Eine Unsitte moderner Spiele ist die Nicht-Konfigurierbarkeit des Controllers (=Gamepad). Besonders häufig bei Xbox-Ports gehen die davon aus, dass der Controller ein Xbox-Controller ist. Nun ist mein Controller aber ein alter SpeedLink Strom Trooper und ähnelt eher einem Playstation-Controller. Joe Danger 2 war jetzt das letzte Spiel, das ich wirklich mit Controller spielen wollte und das meinen schlicht nicht erkannte. Die Lösung ist xboxdrv.
Als Treiber (im userspace) emuliert xboxdrv, das in den Quellen liegen sollte, den Xbox-Controller. Es legt /dev/input/js1 an, was von Spielen als Xbox-Controller erkannt wird, und übersetzt die Eingaben auf dem Controller zu dem, was das Xbox-Gamepad ausgeben würde.
Der Befehl für meinen Controller sieht so aus:
xboxdrv --evdev /dev/input/by-id/usb-0e8f_0003-event-joystick --evdev-absmap ABS_X=x1,ABS_Y=y1,ABS_RZ=x2,ABS_Z=y2,ABS_HAT0X=dpad_x,ABS_HAT0Y=dpad_y --evdev-keymap BTN_THUMB2=a,BTN_THUMB=b,BTN_BASE=lt,BTN_BASE2=rt,BTN_TOP2=lb,BTN_PINKIE=rb,BTN_BASE5=back,BTN_BASE6=start,BTN_TOP=x,BTN_TRIGGER=y --mimic-xpad --silent --axismap -Y1=Y1
Um ihn zusammenzubasteln benutzt man evtest:
evtest /dev/input/by-id/usb-0e8f_0003-event-joystick
Das gibt dann zum Beispiel diesen Code aus, wenn ich auf den Button links unten drücke:
Event: time 1471704447.386393, -------------- SYN_REPORT ------------
Event: time 1471704447.466397, type 4 (EV_MSC), code 4 (MSC_SCAN), value 90003
Event: time 1471704447.466397, type 1 (EV_KEY), code 290 (BTN_THUMB2), value 0
Event: time 1471704447.466397, -------------- SYN_REPORT ------------
Ich weiß also: Das ist BTN_THUMB2. Und er entspricht Button A auf dem Xbox-Gamepad. Um das herauszufinden ist dieses Bild des Controller sehr praktisch (via). Dies sind die zu belegenden Xbox-Eingabetasten:
a
b
back
start
lb
rb
lt
rt
tl
tr
x
y
x1
y1
x2
y2
dpad_x
dpad_y
Ist der Befehl einmal zuammengestellt sollte man ihn in eine Konfigurationsdatei packen. Meine heißt ~/.config/xboxdrv und sieht so aus:
[xboxdrv]
mimic-xpad=true
silent=true
[evdev-absmap]
ABS_X=x1
ABS_Y=y1
ABS_RZ=x2
ABS_Z=y2
ABS_HAT0X=dpad_x
ABS_HAT0Y=dpad_y
[evdev-keymap]
BTN_THUMB2=a
BTN_THUMB=b
BTN_BASE=lt
BTN_BASE2=rt
BTN_TOP2=lb
BTN_PINKIE=rb
BTN_BASE5=back
BTN_BASE6=start
BTN_TOP=x
BTN_TRIGGER=y
[axismap]
-Y1=Y1
Interessant ist die Axismap. Das Problem war, dass beim unteren Stick oben und unten vertauscht war. Mit der Axismap ließ sich das umdrehen.
Mit der Konfigurationsdatei lautet der Befehl nur noch
xboxdrv --evdev /dev/input/by-id/usb-0e8f_0003-event-joystick -c ~/.config/xboxdrv
Und Joe Danger 2? Das funktionierte mit xboxdrv erstmal wirklich viel besser. Leider nur für eine Mission, danach bleibt es im Menü hängen. Ich vermute aber, dass das am Spiel selbst liegt, und werde xboxdrv bald mit einem anderen Spiel testen.
onli blogging am : Mercenary Kings
Vorschau anzeigen