Kernic

Einfach meine Gedanken.

Winwingsim URSA MINOR, Elite: Dangerous und Linux

Elite: Dangerous auf Linux hat die Eigenart, Joysticks gerne als Xbox Controller zu erkennen. Die Ursache liegt hier irgendwo bei Proton/Wine, aber es gibt eine Lösung. Für mein zukünftiges Ich, aber auch für euch ist hier eine kleine Anleitung.

🔊 Beitrag vorlesen lassen
📥 MP3 herunterladen

Das Problem

Ich habe Elite: Dangerous über Steam auf meinem Arch Linux System installiert. Da das Spiel nicht nativ für Linux verfügbar ist liefert Steam die Windows Version aus und lässt diese mit ihrer Kompatibilitätsschicht Proton laufen. Das funktioniert bei vielen Spielen erstaunlich gut, auch bei Elite: Dangerous. Aber es werden eben Systemaufrufe von Linux in die passenden Windows aufrufe übersetzt, und das geht nicht immer perfekt.

Ich habe meine beiden Winwingsim URSA MINOR Sticks also per USB an meinem PC angeschlossen und mit dem kleinen Programm jstest auf Funktionalität geprüft. Abgesehen von einem komischen Mapping funktionierten die Joysticks einwandfrei. Alle Achsen, Regler und Buttons wurden erkannt. Damit sollte dem Raumschiffvergnügen nichts mehr im Wege stehen, oder?

Leider doch. In den Einstellungen von Elite: Dangerous wollte ich die Tasten belegen und bekam direkt komische Icons angezeigt. Warum ist die Z-Achse in Elite: Dangerous angeblich der linke Trigger? Warum die Primärfeuertaste A? Das Spiel denkt wohl, ich habe nicht zwei Joysticks, sondern zwei Xbox Controller angeschlossen.

Die Ursache

Die Ursache dafür ist wohl eine Kombination aus Valves Proton und Elite: Dangerous. Die Joysticks werden im Layer registriert, aber so, dass sie für die Weltraumsimulation wie Controller aussehen. Deshalb wechselt das Game in den Controller Modus.

Etwas mehr im Detail ist es so, dass die Joysticks in der Registry als xinput Geräte angelegt werden. Xinput ist eine Microsoft API speziell für Gaming-Controller und unter anderem der Grund dafür, warum Controller entweder DirectInput verwenden, oder maximal zehn Tasten erkannt werden. Meine Joysticks haben aber jeweils über 30 Tasten, womit nicht nur die Zuordnung der Achsen sondern erst Recht die Verwendung der Tasten problematisch ist.

Ich habe dann etwas nachgeforscht und wurde am Ende von Beko Pharm vom Stellanebula Project auf eine Seite mit der Lösung geschickt.

Die Lösung

Eigentlich ist die Lösung dann recht einfach. Man geht in die Registry und wechselt den Typ von xinput auf winehid. Wie das genau geht?

  1. Terminal öffnen.
  2. export WINEPREFIX=/PATH/TO/STEAM/steamapps/compatdata/359320/pfx
    Der Pfad zu Steam hängt von eurem System ab. Bei mir war es /home/kernic/.steam/steam/steamapps/compatdata/359320/pfx
  3. wine regedit
  4. Es öffnet sich ein neues Fenster, der Registry Editor. Dort navigiert man zu HKEY_LOCAL_MACHINE/System/CurrentControlSet/Enum
  5. Es gibt zwei relevante Unterordner, winebus und winexinput. Starte mit dem ersten, dort solltest du für jeden Joystick einen Eintrag mit dessen ID finden.
    1. Wenn du die ID deiner Joysticks nicht kennst, dann öffne ein neues Terminal und gib XXX ein.
  6. Öffne den ersten Joystick, es wird ein Unterordner sichtbar. Gehe in diesen.
  7. Ändere folgende Felder:
    1. Service von xinput auf winehid.
    2. CompatibleIDs auf WINEBUS\WINE_COMP_HID.
    3. Classzu HIDClass.
  8. Das wiederholst du für den zweiten Joystick, wenn du einen hast.
  9. Anschließend gehst du in den winexinput Ordner und prüft dort die selben Felder. Bei ir waren sie automatisch angepasst. Sollte das nicht der Fall sein, passe sie an.
  10. Schließe den Registry Editor, starte Elite: Dangerous und prüfe in den Einstellungen, ob alles passt.

Das war es schon. Unter dem Link oben findest du noch weitere Tipps. Diese haben bei mir aber mehr Probleme verursacht als geholfen.