Releases: mescon/logitech-trueforce-linux-driver
Release list
v0.11.0: One unified TrueForce stream, one-command setup, honest names
The headline for newcomers: installation is now one command.
git clone https://github.com/mescon/logitech-trueforce-linux-driver.git
cd logitech-trueforce-linux-driver
sudo ./tools/setup.shThat handles the DKMS module, the in-tree driver blacklist, udev
permissions, module load, and (with the SDK DLLs staged) the TrueForce
shim for every Steam prefix, then finishes with a doctor that checks
every layer and names the fix for anything that is off. Re-run it after
a kernel update and it converges. ./tools/setup.sh doctor works any
time. Two things stay manual because they live inside Steam's own UI
(per-game PROTON_ENABLE_HIDRAW=1 and disabling Steam Input), and the
driver now heals the classic "settings need sudo until you replug"
udev race by itself.
A cleaner TrueForce texture stream
Cross-pollination with the Trueforce-For-All
project (a Windows SimHub plugin built on this project's protocol docs,
see issue #20) taught us that bytes 6-9 of a TrueForce stream packet are
the motor torque target, with the audio window playing additively on
top. The driver now streams one unified packet per tick, carrying
the steering force and the texture audio together, which is exactly the
shape AC EVO itself sends. Measured on the RS50: the same texture effect
couples 2.6x less into the steering axis than the previous
implementation, texture resolution doubled to a 2 kHz slot rate, and
texture amplitude is capped in the vibration regime so a synthetic
full-scale rumble can never hijack steering torque. Feel-verified on
RS50 hardware for this release: the texture route is a clean rim
vibration with a smooth start and stop, and a rumble layered on top of a
steady steering force leaves that force unchanged.
Every wheel gets its right name, and its right features
- dmesg lines are tagged with the actual bound model:
RS50 (native):,
RS50 (G PRO compatibility mode):, orG PRO:. The compat tag
doubles as a mode indicator when you are debugging. - Real G PRO owners: your rim's rev lights are now driveable from
Linux (wheel_rev_level, 0 to 10), decoded from G HUB captures, and
the RS50-specific per-LED RGB attributes no longer appear on your
wheel (different rim, different protocol). Needs a tester: issue #8. - G923 owners: your wheel speaks the same TrueForce protocol, and
the udev rule now grants the SDK hidraw access under Proton. Whether
TrueForce actually arrives is the open question only you can answer:
issue #27.
New settings you can drive from Linux
wheel_response_curve: the steering axis's 64-point response
curve (feature 0x80A4, the store behind G Hub's Sensitivity slider).
Writein:outpairs orreset. This was the last G Hub feature that
was protocol-mapped but unimplemented. The upload path (open, 64-point
resample, chunked commit, and revert) is confirmed on RS50 hardware;
the in-game feel of a custom curve is not yet characterised, so treat
the shape of a curve as experimental while field reports accumulate.wheel_pedal_response_curve: the pedal unit's three axes get the
same 64-point hardware curves (feature 0x80A4 on HID++ sub-device
0x02). Untested on hardware;<axis> resetis the escape hatch.
Correct force strength on every wheel (libtrueforce)
libtrueforce previously scaled every torque request against the RS50's
8 Nm ceiling. On an 11 Nm G PRO that meant a request for 8 Nm mapped to
full scale, roughly 11 Nm actual, about 37% more force than asked for.
Peak torque is now resolved per model (RS50 8 Nm, G PRO 11 Nm), and the
capability getters report the right value. A real-hardware confirmation
of the G PRO figures is requested in issue #28. The library's udev rule
was also fixed: it only granted access for the RS50's USB ID, silently
locking G PRO owners out of libtrueforce without root; it now covers the
G PRO too. A non-finite (NaN) torque request from game code can no
longer slip past the clamp into an undefined motor command; it is
treated as zero force.
Fixes worth knowing about
- Settings commands were stalling about 5 seconds each for one day
on master (a device-index matching fix colliding with a transport
quirk). Found via usbmon, fixed the same day; range writes now measure
4 ms. - Unifying/Lightspeed mice and keyboards paired through a receiver
briefly inherited the same stall through this fork's shared code path;
fixed by scoping the check to the wheels it was written for. - Oversteer integration: the bundled patch now unlocks the full settings
set (gain, autocenter, spring/damper/friction levels, combined pedals)
for both G PRO product IDs, not just range. - Teardown and concurrency hardening from two adversarial review passes
(use-after-free windows on unplug, stall guards between sync sends,
gain-independent autocenter with a firmer centring curve), plus the
removal of a large dead code path left over from before the G PRO
moved onto the direct-drive engine.
Compatibility matrix status
RS50 verified across the board on real hardware, including this cycle's
reworked TrueForce stream and the response-curve upload path, in both
G PRO compatibility mode and native mode (046d:c276). SDK-driven
game TrueForce under Proton was packet-confirmed in native mode too
(AC EVO, 2026-07-08, ~2 kHz type-0x01 stream on ep 0x03), so native
mode keeps game TrueForce while unlocking the full 2700 range: compat
mode is no longer required for TrueForce. Real G PRO is expected to work
(same code path) with two items awaiting an owner: rev lights and
texture-routing feel. G923: standard force feedback is unchanged via the
in-tree path; TrueForce is plausible but unverified. Full matrix in the
README.
Docs: the protocol spec (now docs/PROTOCOL_SPECIFICATION.md, v6.7)
gained the Windows-side FFB architecture (HID++ 0x8123 fn2), the
unified-packet semantics, and the G PRO rev-light protocol, with
attribution to the TF4ALL project, whose findings we validated in-kernel
and reciprocated on issue #20.
v0.10.0: TrueForce for Linux
First public release. If you have a Logitech RS50 or G PRO Racing Wheel and run Linux, this driver is the difference between a wheel that merely turns and a wheel you can actually race with.
Out of the box, Linux gives these wheels basic input only: the stock kernel has no force feedback support for this direct-drive family, no TrueForce, and no way to configure them. This project fills all of that in.
What your wheel can do on Linux with this driver
- Full force feedback: the complete effect set games use - constant force, springs, dampers, friction, inertia, periodic effects, rumble - delivered to the direct-drive motor at 500 Hz.
- TrueForce haptics, for the first time on Linux. The high-frequency engine and road haptics that define these wheels, working in the big sims under Proton via Logitech's own signed SDK libraries running unmodified. Verified end-to-end with full laps in Assetto Corsa Competizione and Assetto Corsa EVO: steering forces and TrueForce simultaneously.
- The same two-channel feel architecture as Windows: steering forces drive the motor, texture and rumble play on the wheel's dedicated audio-haptic channel. Road detail buzzes the rim; it does not fight your hands.
- A wheel that stays configured. Some games silently force the wheel to 90 degrees at session start; the driver detects it and puts your steering range back automatically within seconds. You set 900 degrees, you drive 900 degrees.
- Every G HUB setting, from Linux: rotation range, FFB strength, damping, TrueForce level, FFB filter, pedal response curves and deadzones, LED effects and colors, onboard profiles selectable by their names - all as simple files you can read and write (Oversteer works too). Plus your wheel's serial number and firmware versions for support.
Start here
docs/GETTING_STARTED.md - one linear path from download to driving, about 15 minutes. TrueForce needs one ingredient you supply yourself: four SDK DLLs copied from a Logitech G HUB installation (they are Logitech-signed and not redistributable; the guide shows exactly where they go).
Honest expectations
This is a 0.10 release: verified deeply, but narrowly - one RS50, two sims, one very thorough test bench. The other Logitech-SDK sims (Le Mans Ultimate, AMS2, Assetto Corsa, rFactor 2, iRacing) use the same SDK and should work identically; each needs exactly one person to confirm. There is no GUI yet (settings are sysfs files, or Oversteer), setup is manual rather than one-click, and G HUB-exclusive features (firmware updates, onboard profile editing) are not covered. The full verified/expected/missing breakdown is in the README's "State of the driver" section.
The fastest way to help: race
If you play any sim from the "expected" list, one sentence about whether it worked (plus the output of cat wheel_firmware) moves it into the verified column. Real G PRO owners are especially wanted: the code path is identical to the verified RS50, and one field report closes that gap. Issues welcome, good news included.
For the technically curious: this repository also contains the only public documentation of the RS50/G PRO HID++ feature set and the TrueForce wire protocol, reverse-engineered from USB captures and live-verified against the wheel - see docs/.