-
Notifications
You must be signed in to change notification settings - Fork 8
Simulated TrueForce
Quick reminder of the difference: force feedback is the physical force you feel through the wheel (weight, road pull, kerbs), and it works with no setup. TrueForce is Logitech's extra layer of fine, fast vibration and texture on top; some games build it in, and this page is about adding it to the games that do not. Full explainer in Force Feedback in Games.
TrueForce is normally provided by the game itself through Logitech's
TrueForce support (see Force Feedback in Games). For titles with no
built-in TrueForce, this project ships logi-tf-sim: a small background
helper that builds engine haptics from the game's own live data (engine RPM,
speed, throttle, sent over the local network) and plays them through the
wheel's real TrueForce audio path. That same live data drives the wheel's
rev-light strip as a live RPM display.
On the G923 this is the only TrueForce there is: Logitech's own TrueForce files do not work for it on Linux (see G923), so the helper is the supported path. It finds a G923 automatically and streams to the wheel's own TrueForce interface, mirroring the live force-feedback output into the stream so haptics and force feedback agree instead of fighting.
An engine note through the wheel rim: a fundamental tone at the engine's firing rate plus harmonics, louder with throttle, present at idle, silent when the engine is off. The rev LEDs fill with RPM (on the RS50 using your active LIGHTSYNC slot's colors and direction; on a real G PRO rim the onboard profile owns the colors). On a G923 the helper drives the five LED pairs of the strip directly (they are also standard Linux LEDs, see G923).
Any game that broadcasts its live data in one of these formats:
| Format | Default port | Games |
|---|---|---|
| Codemasters / EA float array | 20777 | DiRT Rally 2.0, DiRT 4 and the classic Codemasters format titles |
| Project CARS 2 | 5606 | Project CARS 2, Automobilista 2 |
| Modern EA F1 | 20777 | F1 22 through F1 25 |
| EA Sports WRC | 20777 | EA Sports WRC |
| OutGauge | 4444 | BeamNG.drive |
The helper listens on all of those at once, quietly, and detects the game
from the packets themselves; every port can be changed. It also accepts a
small relay protocol (port 20780) for the sims that publish telemetry into
Windows shared memory instead of broadcasting it: iRacing, RaceRoom, Assetto
Corsa, Competizione, EVO, rFactor 2 and Le Mans Ultimate. Those need
logi-tf-relay running inside the game's Proton prefix to feed it. Since
0.29.0 the relay is written and attached to each release as a download; see
Simulated TrueForce Internals and docs/SHARED_MEMORY_RELAY.md.
Euro Truck Simulator 2 and American Truck Simulator are a third case: they
publish through a plugin interface, so a native Linux plugin
(liblogi_tf_scs.so, also a release download) forwards their telemetry. No
Wine involved.
Playing something else that sends UDP telemetry? See Add a Game for how to capture it and help get it added.
- Open the Setup page in logi-wheel-gui or logi-wheel (see Configuring the Wheel) and find the Simulated TrueForce panel: master switch, helper start/stop, and a per-game list with individual enables and intensities.
- Switch on the game's own telemetry setting. Examples:
-
DiRT Rally 2.0:
hardware_settings_config.xml, set<udp enabled="true" ...>(the stock port 20777 is the default here too). - Automobilista 2 / Project CARS 2: System settings, UDP frequency to a nonzero value, protocol "Project CARS 2".
-
DiRT Rally 2.0:
- Race. The helper stays silent until the game's data arrives and stops when it goes quiet.
Configuration lives in ~/.config/logi-wheel/tf-sim.conf (or
$XDG_CONFIG_HOME/logi-wheel/ if you set that; plain key=value, and the
Setup page edits it for you):
| Key | Meaning | Default |
|---|---|---|
enabled |
master switch | on |
intensity |
master intensity, 0-100 | 30 |
pitch |
felt rev rate, 10-200 percent. 100 puts the fundamental at the crank rate (rpm/60 Hz); lower feels like a slower, heavier engine | 35 |
cylinders |
cylinder count, used to derive the firing rate the note is built from | 4 |
effects |
mix in the haptic layers beyond the engine note (kerbs, surface, rev limiter and the rest); off is engine-only | on |
leds |
drive the rev-light display from telemetry RPM | on |
wheel |
which attached wheel to drive: auto, dd (RS50 or G PRO) or g923. rs50, gpro and 923 are accepted too |
auto |
port.codemasters (also serves F1 and EA Sports WRC), port.pcars, port.beamng, port.relay
|
the ports it listens on | 20777 / 5606 / 4444 / 20780 |
game.<id>.enabled, game.<id>.intensity
|
per-game override, applied on top of the master | on / 100 |
g923.ffb_invert |
G923 only: sign of the mirrored force-feedback value in the stream (hardware-calibrated; leave alone unless forces and haptics visibly disagree) | 1 |
Intensity is master x per-game, so you can set a global comfort level and trim individual games. Pitch is the one to play with if the engine feel reads too frantic or too lazy: it scales the fundamental frequency without touching amplitude.
Wheel only matters on a rig with more than one wheel plugged in. auto
takes a G923 whenever it finds one, which is right for a single wheel and
wrong for a rig with a G923 and a direct-drive wheel together: the
direct-drive wheel is never reached, because the search stops at the G923.
Setting wheel to dd or g923 says which one you meant. Both apps offer
it on the Setup page, so you should not need to edit the file.
For a one-off run without changing your configuration, LOGI_TF_SIM_WHEEL
takes the same values and wins over the file.
The Setup page (and logi-tf-sim --sweep from a terminal) offers a
consent-gated test sweep: a synthetic RPM run-up so you can feel the effect
and calibrate intensity with no game running. Hold the rim first; it is a
direct-drive wheel.
- Simulated TrueForce and games with built-in TrueForce do not fight: the helper only plays while the game's data is flowing, and games with native TrueForce support stream their own effects directly without using the simulation.
- The rev-light feeder runs at G HUB's own cadence (~60 Hz), writing only when the level actually changes, so a rev sweep keeps up with the engine; see Simulated TrueForce Internals.
- The helper plays through libtrueforce, the project's own version of Logitech's TrueForce support.
For how it works inside (parsers, synthesis, the watchdog loop), see Simulated TrueForce Internals.