Blog

Getting Windows-only racing wheel LEDs working on Linux

I daily-drive Arch, and I sim race. Those two facts together mean I regularly run into parts of my racing hardware that the manufacturer decided Linux users don’t get to have. The RPM shift LEDs on my Thrustmaster wheel were one of them.

If you’ve never seen them: a lot of wheels have a little row of LEDs across the top that climb green-to-red as your revs rise, so you can shift on the lights instead of watching a tacho. On Windows, the manufacturer’s software (or SimHub) drives them. On Linux, they sit there dark.

So I built a daemon that drives them natively — from live sim telemetry, no Windows in the loop. Here’s how it works and what it’s built on.

The protocol

The LEDs are driven by 64-byte HID output reports over hidraw. I didn’t have to work that out myself — prodigal.knight had already reverse-engineered the format and published it in their SimHub Thrustmaster Wheel LED Controller, open since early 2023. That’s the hard part of this whole problem, and it was already solved. I just had to know it existed.

The actual work: getting telemetry on Linux

Knowing how to talk to the LEDs is one thing. Driving them from a sim running on Linux is a different problem — a plumbing problem.

Sims expose live data (RPM, shift points) through shared memory. But most sims I run are Windows games under Proton/Wine, and that shared memory lives on the Wine side of the fence — the Linux side can’t just read it. You need a bridge, and that’s simd and simshmbridge: they expose the Wine-side telemetry to native Linux, so a Linux process can read what the sim is doing in real time.

Once telemetry was readable on Linux, the rest was wiring: read the revs, map them to LED state, send the bytes. I built a daemon around it that:

  • speaks the protocol over hidraw,
  • auto-detects across several Thrustmaster wheel-base models by USB vendor/product ID,
  • pushes updates at ~60 Hz so the lights track revs smoothly,
  • and hooks into systemd/udev so it starts when the wheel’s plugged in and gets out of the way when it isn’t.

Now I sit down, the wheel’s already talking, the LEDs climb green-to-red as I approach the redline, and I shift on the lights. On Arch. No Windows.

Built on

  • simhub-thrustmaster-wheel-led-controller by prodigal.knight — the LED protocol.
  • simd / simshmbridge — the telemetry bridge that makes reading sim data on Linux possible.
  • hid-tmff2 — force feedback for these wheels on Linux, which is what makes them usable here at all.

It’s open source. If you run Linux and a Thrustmaster wheel, the assembly’s already done — clone it and your lights should work too.

← all posts