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?
- Terminal öffnen.
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/pfxwine regedit- Es öffnet sich ein neues Fenster, der Registry Editor. Dort navigiert man zu
HKEY_LOCAL_MACHINE/System/CurrentControlSet/Enum - Es gibt zwei relevante Unterordner,
winebusundwinexinput. Starte mit dem ersten, dort solltest du für jeden Joystick einen Eintrag mit dessen ID finden.- Wenn du die ID deiner Joysticks nicht kennst, dann öffne ein neues Terminal und gib XXX ein.
- Öffne den ersten Joystick, es wird ein Unterordner sichtbar. Gehe in diesen.
- Ändere folgende Felder:
Servicevonxinputaufwinehid.CompatibleIDsaufWINEBUS\WINE_COMP_HID.ClasszuHIDClass.
- Das wiederholst du für den zweiten Joystick, wenn du einen hast.
- Anschließend gehst du in den
winexinputOrdner und prüft dort die selben Felder. Bei ir waren sie automatisch angepasst. Sollte das nicht der Fall sein, passe sie an. - 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.