FlightGear und das Saitek Pro Switch Panel

Oktober 2020, ergänzt im Mai 2022

Lange konnten sie nicht miteinander: vor Jahren hatte ich mir für meinen Flugsimulator ein "Pro Switch Panel" gekauft, um etwas mehr Realismus beim simulierten Fliegen zu haben. Dass ich mit FlightGear, einem OpenSource-Simulator nicht in die Zielgruppe des Herstellers passe, ist natürlich mein Problem. Warum sollten sie ihre Hardware auch an Leute verkaufen wollen, die keine kommerzielle Software kaufen? Sind zwar die selben Euronen/Dollars, aber die OSS-Szene wird von ihnen links liegen gelassen. Hatte ich dummerweise vorher nicht geprüft, die andere Hardware (Yoke & Rudder pedals) hatte problemlos funktioniert. Die Suche im Netz vor Jahren ergab zwar ein paar Ansätze, die aber entweder vom Betriebssystem her nicht gepasst hatten oder schlicht unvollständig geblieben waren.

Selbst hatte ich zwar ein paar Sachen herausgefunden, z.B. dass das Gerät als USB-HID-Gerät erkannt wurde, dass das Betriebssystem Events bekam, wie die Schalter bezeichnet waren und welche Sequenzen dann ankamen. Aber selbst einen Treiber zu bauen ist jenseits meiner Fähigkeiten. Also verstaubte das Gerät die letzten Jahre ungenutzt.

Saitek Switch Panel

Urlaub, die zweite Corona-Welle vereitelt einen Tapetenwechsel wirkungsvoll, also mal alte Themen prüfen. Das war eines davon. Hatte sich ggf. etwas getan? Ja, es hatte sich was getan. Zwar noch nicht so ganz plug-and-play, aber mit etwas experimentieren hat es dann funktioniert. Es gab eine Lösung mit einem zusätzlichen HTTP-Server, den man manuell starten musste, aber node.js wollte ich dafür dann doch nicht installieren. Es gab aber andere Ansätze, die ich dann ausprobiert und mit Anpassungen übernommen habe. Ggf. hilft es ja jemand anderem, daher hier das "Rezept":

Vorweg noch die Info, dass das für openSUSE, konkret in der Version 15.2 passt (und zwar mit einem X-Server für die GUI, NICHT mit Wayland. Das hatte ich mal kurz getestet, war aber nicht reif genug für meine Anwendungsfälle, daher kann ich dazu nichts schreiben). Und mit dem FlightGear in Version 2018.3.4

Schritt 1:
Die Events des Geräts kommen letztlich als Maus-Events an. Je nachdem, wo der Mauszeiger gerade steht, kann das unangenehme Folgen haben wenn dann der ein oder andere Schalter betätigt wird. Also muss das irgendwie unterbunden werden. Vielleicht gibts dazu einen intelligenteren Weg als den über die Konfiguration im X-Server, Tips nehme ich gern entgegen.
openSUSE benötigt seit einiger Zeit keine xorg.conf-Datei mehr, daher muss man sich eine im Verzeichnis /etc/X11 selbst anlegen und folgendes reinschreiben:
Section "InputClass"
  Identifier "HOLTEK Saitek Pro Flight Switch Panel"
  MatchProduct "HOLTEK Saitek Pro Flight Switch Panel"
  MatchIsPointer "on"
  Option "Ignore" "on"
EndSection
Die Zeichenkette für Identifier und MatchProduct sollte man fürs eigene Gerät prüfen, im Lauf der Zeit gab es hier wohl Änderungen, so dass nicht alle Geräte mit dem selben Aussehen die selben Informationen liefern. Das geht am einfachsten, indem man das Gerät anschliesst und anschliessend in einer Shell den Befehl
dmesg | grep "Pro Flight"

absetzt. Benötigt wird die Zeichenkette die in eckigen Klammern ausgegeben wird. Bsp:

hid-generic 0003:06A3:0D67.0001: input,hidraw0: USB HID v1.00 Device [HOLTEK Saitek Pro Flight Switch Panel] on usb-0000:00:14.0-2/input0

Der Eintrag in der xorg.conf-Datei bewirkt, dass alle Events des angegebenen Geräts vom X-Server ignoriert werden. Das ist kein Problem, weil die Events bereits "vorher" bei FlightGear ankommen und ausgewertet wurden.


Schritt 2:
Der User, der den FlightGear startet benötigt Zugriff auf die vom OS für das Gerät angelegte Gerätedatei. Das geht am einfachsten, indem man den User via YAST oder Shell-Befehl in die Gruppe "input" aufnimmt.
Da die hidraw-Geräte standardmässig dem User root gehören und nur dieser Zugriff hat, biegen wir die Rechte etwas um, indem wir eine UDEV-Regel im System ablegen. Dazu erstellen wir eine Datei mit (im Grunde beliebigem Namen) im Verzeichnis /etc/udev/rules.d
Ich habe die Datei zur besseren Wiedererkennung mit dem Namen "50-hidraw-for-input-group.rules" versehhen. Der Inhalt sieht so aus:
# We change the entries for all hidraw devices so that the group is "input" instead of
# "root" and we change permissions so that the group has rw access
# Users that need access may be assigned to the input group
#
# This is necessary as all HID devices will be unaccessible by Flightgear or at least
# will throw an error when starting up Flightgear
#
KERNEL=="hidraw*", GROUP="input", MODE="0660"
Anmerkung: Technisch funktioniert es auch ohne diesen Schritt, aber in den Logs des Flightgear gibts dann unnötige Fehlermeldungen.


Schritt 3:
Zum Schluss muss FlightGear noch lernen, das Gerät zu erkennen und zu verwenden. Irgendwoher muss ja die Info kommen, was es tun soll, wenn Schalter X oder Y betätigt wird. Im Grunde läuft das genauso wie bei Joysticks, ABER die xml-Datei muss an eine andere Stelle gestellt werden. Und zwar gehört sie nicht ins "Joysticks"-Verzeichnis (unterhalb von "Input"), sondern in das parallel zu "Joysticks" liegende "Event"-Verzeichnis. Am besten legt man dort einen Ordner "Saitek" an (je nach oben geprüfter/herausbekommener Herstellerangabe) und legt die Datei dort ab. Der Dateiname selbst ist egal.
Achtung: was oben im ersten Schritt als Identifier herauskam muss in der XML-Datei auch als Eintrag mit dem Tag "name" enthalten sein, sonst kann FlightGear das nicht zuordnen. Also bitte prüfen, ob der passende Eintrag in der Datei schon enthalten ist. Wenn nicht, einfach mit einem Texteditor einen vorhandenen Eintrag kopieren und anpassen, indem der in Schritt 1 gefundene Identifier eingetragen wird.

Einmal Rechner starten, damit alles sauber zusammenpasst und anschliessend mal den FG starten, Cessna auswählen und dann kanns gem. Checkliste losgehen...


Anmerkung: die Fahrwerks-Anzeige mit ihren LEDs ist nicht nutzbar. DAS bleibt noch zu lösen. Aber nicht mit ner Cessna 182 ;-)

Der Vollständigkeit halber noch die Links, über die ich zur Lösung gekommen bin bzw. die erwähnt wurden: