Der NVIDIA Shield Controller funktioniert bei Kabelanschluss auch unter Linux. Wie man mit minimaler Arbeit diesen zum Laufen bekommt zeigen wir in dieser Anleitung.
Kürzlich wollte ich mein aus dem Halloween-Steam-Sale erworbene Spiel namens „Salt and Sanctuary“ zusammen mit einem Kollegen spielen. Das Problem ist nur immer das Gleiche, als PC-User besitzt man in der Regel nicht mehr als einen Controller, wodurch tolle Coop-Spiele meist doch alleine gespielt werden müssen. Meine einzige Lösung war mein in der Ecke liegende NVIDIA Shield Controller, aber funktioniert der auch unter Linux? Ja, das tut er, jedoch nur mit angeschlossenem USB-Kabel (also nicht Wireless).
Achtung
Die Anleitung ist für Anfänger gedacht, wer keine langen Erklärungen will oder braucht, der kann unser asciinema-Video ansehen. Dort sind alle Kommandos im Schnelldurchlauf mit minimaler Erklärung zu sehen. Die Kommandos können übrigens fast alle im Video kopiert werden, nur der Inhalt der Konfigurationsdatei ist im Video leider nicht kopierbar und muss dieser Guide entnommen werden.
Die ausführliche Erklärung
Um den Controller zum Laufen zu bekommen benötigen wir die Programme xboxdrv und evtest. Bei xboxdrv handelt es sich um einen Xbox360-Treiber, welcher von uns benötigt wird, um den Controller zum Laufen zu bekommen. Evtest gibt uns die als „Input device event monitor“ die Möglichkeit zu sehen, wo der Controller angesteckt ist, da eine automatische Erkennung des Controllers leider nicht vorliegt.
Installieren von xboxdrv und evtest:
sudo apt-get install xboxdrv evtest
Zuerst legen wir nun eine extra Konfigurationsdatei für den Shield Controller an.
Ich hab meine „shieldctrl.xboxdrv“ genannt. Am einfachsten ist es, wenn man die Datei irgendwo ins Home-Verzeichnis ablegt. Als Editor nutze ich hier den beliebten einfachen Nano.
Konfig-Datei erstellen:
nano shieldctrl.xboxdrv
Folgender Inhalt muss nun in die Datei eingefügt werden:
# Beispielkonfiguration für den Nvidia Shield Controller # Es funktioniert nur, wenn der Controller über das USB-Kabel angeschlossen ist! [xboxdrv] evdev= "PLATZHALTER_FÜR_DEN_PFAD" mimic-xpad = true silent = true [evdev-absmap] ABS_X = x1 ABS_Y = y1 ABS_Z = x2 ABS_RZ = y2 ABS_BRAKE = lt ABS_GAS = rt ABS_HAT0X= dpad_x ABS_HAT0Y= dpad_y [axismap] -y2=y2 -y1=y1 [evdev-keymap] KEY_HOMEPAGE=guide BTN_THUMBR=tr KEY_#308=y BTN_TL=lb BTN_TR=rb BTN_START=start BTN_A=a BTN_THUMBL=tl KEY_#307=x KEY_BACK=back BTN_B=b
Gespeichert wird bei Nano mit STRG+O, eine Datei schließt man mit STRG+X.
Nun muss mit evtest der angeschlossenen Controller gefunden werden, damit wir in der Konfigurationsdatei den Pfad für „evdev“ festlegen können. Hierfür stecken wir den Controller an einem USB-Port an (!) und starten evtest mit Root-Rechten. Wichtig ist, dass der Controller zu diesem Zeitpunkt an ist, also dass das NVIDIA-Logo und die Touch-Tasten leuchten.
sudo evtest
Evtest scannt per Default alle Devices, welche unter /dev/input/ liegen und mit „event“ beginnen. Durch eingeben der nebenstehenden Nummer des Gerätes können wir ein Gerät zum Auswählen testen. Bei mir heißt der Eintrag für den Controller „NVIDIA Corporation NVIDIA Controller v01.03“ bei euch schätzungsweise ähnlich. Meiner ist an der 20. Stelle (also /event20), wodurch ich die Ziffer „20“ eingebe, um den Controller auszuwählen.
konstantin@paradise:~$ sudo evtest No device specified, trying to scan all of /dev/input/event* Available devices: /dev/input/event0: Lid Switch /dev/input/event1: Power Button /dev/input/event2: Power Button /dev/input/event3: AT Translated Set 2 keyboard /dev/input/event4: Video Bus /dev/input/event5: Video Bus /dev/input/event6: SynPS/2 Synaptics TouchPad /dev/input/event7: SteelSeries Rival Gaming Mouse /dev/input/event8: SteelSeries Rival Gaming Mouse /dev/input/event9: SteelSeries Rival Gaming Mouse /dev/input/event10: HID 046a:010d /dev/input/event11: HID 046a:010d /dev/input/event12: C-Media Electronics Inc. USB Audio Device /dev/input/event13: Dell WMI hotkeys /dev/input/event14: Integrated_Webcam_HD /dev/input/event15: HDA Intel PCH Front Line Out /dev/input/event16: HDA Intel PCH Line Out /dev/input/event17: HDA Intel PCH HDMI/DP,pcm=3 /dev/input/event18: HDA Intel PCH HDMI/DP,pcm=7 /dev/input/event19: HDA Intel PCH HDMI/DP,pcm=8 /dev/input/event20: NVIDIA Corporation NVIDIA Controller v01.03 Select the device event number [0-20]: 20
Jetzt kann ich die Auswahl überprüfen, indem ich wild am Controller Tasten drücke und auf einen „Ausschlag“ in Form eines SYN_REPORTS im Terminal warte. Bekomme ich SYN_REPORTS habe ich das richtige Device und kann den Pfad in meine Konfigurationsdatei von vorhin (shieldctrl.xboxdrv) unter evdev einfügen.
Als letzter Schritt muss lediglich xboxdrv mit dem Parameter -c (= lese folgendes Config-File) unter dem Pfad zur Konfigurationsdatei in Anführungszeichen eingeben werden. Danach sollte der Controller in Spielen benutzbar sein, meist muss das Spiel aber noch 1-2 Mal neugestartet werden, damit er auch im Spiel funktioniert.
xboxdrv -c „Pfad zur Konfigurationsdatei“
Trouble Shooting
Die Touch-Tasten funktionieren leider nicht immer, wodurch manchmal das Xbox-bekannte „Start“ oder „Select“ nicht benutzt werden kann. Da man diese Tasten häufig benötigt empfehle ich diese manuell im Spiel auf andere, nicht benutzte, Tasten zu legen.
Bei „Salt and Sanctuary“ waren die Haupttasten leider alle schon belegt, jedoch nicht der Druck nach unten auf den Linken- und Rechtenstick (auch Stick-Buttons genannt). Sollten also keine passenden freien Tasten gefunden werden, kann man versuchen die selten verwendeten Stick-Buttons zu nutzen.