Logitech RPM Indicator

Logitech RPM Indicator est une application graphique qui allume la
barre de LEDs RPM (shift-light) des volants Logitech en fonction
de la télémetry des jeux de course. Elle écoute en local le flux UDP /
IPC du jeu actif et pilote les LEDs via hidraw.

Le packaging GLF-OS est basé sur le projet upstream
IvanVojtko/logitech-linux-rpm-led
(v1.3.0, GPL-3.0).

:information_source: Remarque
L'application est incluse par défaut dans les éditions :
standard, studio et studio-pro. Elle n'est PAS installée sur
mini et streamers (qui n'embarquent pas le pack gaming).


Lancer l'application

L'application est accessible depuis :

  • le menu Applications → Jeux → Logitech RPM Indicator
  • ou via le terminal : logitech-rpm-indicator

Fonctionnalités

  • LED shift-light sur volants Logitech sous Linux
  • Interface simple : sélection du jeu → bouton Start
  • Compatible avec plusieurs protocoles de télémetry
  • Auto-reconnexion en cas d'interruption (relance du jeu / changement de session)
  • Mode auto-détection : bascule automatique du profil quand un jeu compatible démarre via Steam
  • Persistence : la dernière sélection est conservée entre lancements (option)
  • Seuils des LEDs (shift-light RPM thresholds) configurables et persistés dans ~/.config/logitech-rpm-indicator/settings.ini
  • Assetto Corsa : la valeur Max RPM par voiture est mémorisée

Jeux supportés

Jeu Méthode Port UDP
Forza Horizon 5 / 6 UDP "Data Output" 5300
F1 2019 / 2020 / 22 / 23 UDP telemetry 20777
DiRT Rally 2.0 UDP telemetry (édit XML) 20777
Assetto Corsa UDP remote telemetry (par défaut)
Automobilista 2 / Project CARS / PC2 SMS Madness Engine UDP (par défaut)
Euro Truck Simulator 2 Plugin SCS SDK (voir section dédiée) 5607

Utilisation

  1. Branche ton volant Logitech (filaire ou via dongle 2.4 GHz)
  2. Lance Logitech RPM Indicator
  3. (Optionnel) Active Auto-detect running game pour bascule automatique
  4. (Optionnel) Active Remember last selected game pour restaurer la sélection au prochain démarrage
  5. (Optionnel) Ajuste les Shift LEDs (%) pour calibrer la zone d'allumage
  6. Sélectionne le jeu dans la liste déroulante puis clique Start
  7. Lance le jeu et assure-toi que la sortie télémetry est activée (voir ci-dessous)

Configuration jeu par jeu

Forza Horizon 5 / 6

  1. Démarre Forza Horizon 5 ou Forza Horizon 6
  2. Va dans Paramètres → HUD
  3. Active Data Output
  4. Renseigne :
    • IP : 127.0.0.1
    • Port : 5300

F1 2019 / 2020 / 22 / 23

  1. Game Options → Settings → Telemetry Settings
  2. Renseigne :
    • UDP Telemetry : On
    • UDP Broadcast Mode : Off
    • UDP IP Address : 127.0.0.1
    • Port : 20777

DiRT Rally 2.0

Le jeu n'a pas d'interface de config UDP : il faut éditer le fichier XML
dans le préfixe Proton. Sur GLF-OS, ce fichier est sous Steam :

~/.local/share/Steam/steamapps/compatdata/690790/pfx/drive_c/users/steamuser/My Documents/My Games/DiRT Rally 2.0/hardwaresettings/hardware_settings_config.xml

(Le chemin compatdata/690790 peut différer selon ta lib Steam.)

Modifie les valeurs suivantes :

  • udp enabled="true"
  • extra_data="3"
  • IP : 127.0.0.1
  • Port : 20777

SMS Madness Engine (AMS2 / PC1 / PC2)

  1. Options → System
  2. Renseigne :
    • Shared Memory : No
    • UDP Frequency : 4 (LED plus réactif = chiffre plus bas, mais CPU+)
    • UDP Protocol Version : Project CARS 1

Assetto Corsa

  1. Active la télémetry UDP dans les paramètres du jeu
  2. Dans l'app, sélectionne Assetto Corsa
  3. Renseigne Assetto Max RPM correspondant à ta voiture courante (la valeur est mémorisée par voiture)

Euro Truck Simulator 2

ETS2 ne publie pas la télémetry UDP nativement — il faut un plugin SCS SDK
côté jeu qui forwarde les données vers l'app sur 127.0.0.1:5607.

Sur GLF-OS, le plugin source est livré sous :

/run/current-system/sw/share/doc/logitech-rpm-indicator/scs-plugin/

Pour l'installer côté ETS2 natif Linux (jeu directement Linux, rare aujourd'hui) :

# 1) Récupérer le SDK SCS
curl -L https://download.eurotrucksimulator2.com/scs_sdk_1_14.zip -o /tmp/scs_sdk_1_14.zip
unzip /tmp/scs_sdk_1_14.zip -d /tmp/scs_sdk_1_14

# 2) Compiler le plugin Linux
cp -r /run/current-system/sw/share/doc/logitech-rpm-indicator/scs-plugin/ /tmp/
make -C /tmp/scs-plugin linux SCS_SDK_DIR=/tmp/scs_sdk_1_14

# 3) Copier dans le répertoire plugins ETS2 (créer le dir s'il manque)
mkdir -p ~/.local/share/Steam/steamapps/common/Euro\ Truck\ Simulator\ 2/bin/linux_x64/plugins/
cp /tmp/scs-plugin/logitech_rpm_telemetry.so \
   ~/.local/share/Steam/steamapps/common/Euro\ Truck\ Simulator\ 2/bin/linux_x64/plugins/

Pour ETS2 sous Proton (le cas standard), il faut la version DLL Windows.
Comme la compilation cross nécessite MinGW-w64, le plus simple est d'utiliser
le .dll pré-buildé inclus dans la release upstream :

# Télécharger la release upstream
curl -LO https://github.com/IvanVojtko/logitech-linux-rpm-led/archive/refs/tags/v1.3.0.tar.gz
tar -xzf v1.3.0.tar.gz
# Le .dll précompilé est sous scs-plugin/ après build CI
# (alternative : compiler localement via `nix shell nixpkgs#pkgsCross.mingwW64.stdenv -c make ...`)

mkdir -p ~/.local/share/Steam/steamapps/common/Euro\ Truck\ Simulator\ 2/bin/win_x64/plugins/
cp scs-plugin/logitech_rpm_telemetry.dll \
   ~/.local/share/Steam/steamapps/common/Euro\ Truck\ Simulator\ 2/bin/win_x64/plugins/

Puis dans l'app : sélectionne Euro Truck Simulator 2 dans la liste → Start.
Lance ETS2 normalement.

:warning: Attention
Le bouton "Install ETS2 Telemetry Plugin" dans l'app ne fonctionne PAS
sur GLF-OS : il tente de copier depuis un chemin écrivable, alors que
notre packaging Nix met les sources sous /nix/store (read-only). Suis
la procédure manuelle ci-dessus.


Troubleshooting (adapté GLF-OS / NixOS)

Rien ne se passe, les LEDs ne réagissent pas

  • Vérifie que le bon jeu est sélectionné dans l'app et que tu as cliqué Start
  • Vérifie que la télémetry est activée dans le jeu avec les bons IP/port
  • Vérifie qu'aucun pare-feu local ne bloque l'UDP loopback. Sur GLF-OS,
    le pare-feu (via Nix Firewall Manager) autorise
    par défaut le trafic loopback (127.0.0.1), donc ce n'est normalement
    pas un souci. Si tu as fait des restrictions custom, regarde tes
    règles lo.

Le volant n'apparaît pas dans la liste

  1. Branche le volant et allume-le avant de lancer l'app.
  2. Vérifie qu'il est détecté par le noyau :
lsusb | grep -i logitech
ls -la /dev/input/by-id/ | grep -i logitech
  1. Sur GLF-OS, l'utilisateur nobodyz est automatiquement dans le groupe
    input (qui possède /dev/hidraw*). Vérifie :
groups | tr ' ' '\n' | grep input  # doit retourner "input"
ls -l /dev/hidraw*                  # group "input" sur les nodes

Si input est absent de tes groupes (cas d'un compte créé hors
provisionnement GLF-OS), ré-ajoute-le côté customConfig :

users.users.<ton-user>.extraGroups = [ "input" ];

puis glf-update.

PermissionError à l'accès au volant

Sur GLF-OS, le groupe input suffit normalement. Si tu rencontres
quand même un PermissionError, ajoute une règle udev custom via
le module NixOS plutôt que d'éditer /etc/udev/rules.d/ (qui est
volatile sur NixOS : les fichiers manuels sont écrasés au rebuild).

Crée un fichier /etc/nixos/customConfig/logitech-wheels-udev.nix :

{ ... }:
{
  # Permissions hidraw permissives pour les volants Logitech
  # (vendor 046d). À durcir avec GROUP="input" + mode 0660 si besoin.
  services.udev.extraRules = ''
    SUBSYSTEM=="hidraw", ATTRS{idVendor}=="046d", MODE="0660", GROUP="input", TAG+="uaccess"
  '';
}

Puis ajoute l'import dans ton /etc/nixos/customConfig/default.nix :

imports = [
  ./firewall.nix
  ./logitech-wheels-udev.nix   # <-- ajouter
];

Et reconstruis : glf-update.

:information_source: Remarque
Comparé au workaround upstream (un 99-*.rules manuel dans
/etc/udev/rules.d/ avec MODE="0666"), la version NixOS ci-dessus
est déclarative (persistée par ta config), plus restrictive
(0660 + group input au lieu de 0666 world-writable) et utilise
le tag uaccess de systemd-logind pour donner l'accès uniquement à
la session graphique active.

LEDs réagissent mais en retard ou saccadées

  • Réduit le UDP Frequency dans le jeu (chiffre plus bas = plus réactif, mais consomme +CPU)
  • Ferme les apps lourdes en fond
  • Si tu joues sous Proton, vérifie que le HUD overlay n'introduit pas de latence
    (désactive temporairement MangoHud / Goverlay)

L'app crash au démarrage avec Namespace Gtk not available

Bug connu du packaging — corrigé en v1.3.0 (postFixup wrapper). Si tu
le vois encore : glf-update pour rapatrier la dernière version, ou
ouvre un ticket sur framagit.

Vérifier que ton volant est bien géré par le kernel

GLF-OS embarque hid-tmff2 et new-lg4ff pour le support Force
Feedback Logitech. Vérifie que le module kernel est chargé :

lsmod | grep -E 'lg4ff|hid_logitech'

Tu devrais voir hid_logitech_hidpp, new_lg4ff ou équivalent.


Configuration

Les paramètres utilisateur (seuils, dernier jeu sélectionné, Max RPM
Assetto par voiture) sont stockés sous :

~/.config/logitech-rpm-indicator/settings.ini

Tu peux le sauvegarder/restaurer pour migrer ta config sur une autre
machine GLF-OS.


Voir aussi

  • Solaar : gestionnaire d'appareils Logitech Unifying / Bolt
    (souris MX, claviers MX Keys, Lift, casques...). Installée par
    défaut sur GLF-OS dans les mêmes éditions
    (standard / studio / studio-pro), accessible via
    solaar ou depuis le menu Applications.
    Logitech RPM Indicator s'occupe uniquement des volants, Solaar
    gère tout le reste de l'écosystème Logitech.

  • Oversteer : configuration de la plage de rotation / FFB des
    volants (axe différent du shift-light). Cohabite sans souci avec
    Logitech RPM Indicator.


Sources

Voir aussi