Wie kann ein Gamepad DIE Maus steuern?

9

Es gibt viele Fragen zu diesem Thema:

Der Zweck dieser Fragen / Antworten besteht jedoch darin, das Gamepad zum Spielen eines Spiels verwenden zu können.

Ich möchte eine Lösung, um das Gamepad zur Steuerung der Maus zu verwenden.
So ersetzen Sie die Maus in allen Anwendungen durch das Gamepad.
Auf diese Weise konnte ich meinen Computer im Wohnzimmer von meiner Couch aus mit einem drahtlosen Gamepad steuern.

Boris
quelle

Antworten:

8

Nach Grumbels Antwort habe ich xboxdrv- Lösung mit Unterstützung seines Links und speziell dieser Seite ausprobiert :

1. Installieren Sie xboxdrv 0.8.2 vom Ubuntu Software Center.

Installieren Sie bei Bedarf auch uinput und joydev . Ich habe es so gemacht sudo modprobe uinput+sudo modprobe joydev

2. Sie müssen das Ereignis des Gamepads kennen:

Starten Sie udevadm monitor --udevdas Gamepad und schließen Sie es an:

$ udevadm monitor --udev
monitor will print the received events for:
UDEV - the event which udev sends out after rule processing

UDEV  [6722.377700] add      /devices/pci0000:00/0000:00:1d.3/usb5/5-1 (usb)
UDEV  [6722.383264] add      /devices/pci0000:00/0000:00:1d.3/usb5/5-1/5-1:1.0 (usb)
UDEV  [6722.383333] add      /devices/pci0000:00/0000:00:1d.3/usb5/5-1/5-1:1.0/0003:046D:C218.0003 (hid)
UDEV  [6722.383389] add      /devices/pci0000:00/0000:00:1d.3/usb5/5-1/5-1:1.0/0003:046D:C218.0003/hidraw/hidraw1 (hidraw)
UDEV  [6722.387123] add      /devices/pci0000:00/0000:00:1d.3/usb5/5-1/5-1:1.0/input/input10 (input)
UDEV  [6722.399284] add      /devices/pci0000:00/0000:00:1d.3/usb5/5-1/5-1:1.0/input/input10/event8 (input)
UDEV  [6722.412128] add      /devices/pci0000:00/0000:00:1d.3/usb5/5-1/5-1:1.0/input/input10/js0 (input)

Ich schließe daraus, dass das Ereignis meines Gamepads / dev / input / event8 ist

3. Zeigen Sie die Namen aller Tasten, Achsen und Schaltflächen des Gamepads an.

Die Idee ist, xboxdrvalle Tasten zu starten und zu testen und das Ergebnis auf Papier zu notieren.

$ sudo xboxdrv --evdev /dev/input/event8 --evdev-debug
Your Xbox/Xbox360 controller should now be available as:
/dev/input/js1
/dev/input/event9
Press Ctrl-c to quit, use '--silent' to suppress the event output
EV_ABS ABS_X 128
EV_ABS ABS_Y 128
...

In meinem Fall ist das Ergebnis: Geben Sie hier die Bildbeschreibung ein

4. Stellen Sie die Konfigurationsdatei ein

Erstellen Sie eine Datei xboxdrv-mouse.ini , um die XY-Achse sowie die linke und rechte Maustaste festzulegen .
Hier stelle ich Gamepad-Tasten 2für die linke und die 3rechte Maustaste ein:

[xboxdrv]
evdev=/dev/input/event8
silent=true

[evdev-absmap]
ABS_X=x1
ABS_Y=y1

[ui-axismap]
x1=REL_X:10
y1=REL_Y:-10

[evdev-keymap]
BTN_THUMB=a
BTN_THUMB2=b

[ui-buttonmap]
a=BTN_LEFT
b=BTN_RIGHT

# EOF #

Beachten Sie, dass der Wert für REl_X und REL_Y die Geschwindigkeit der Maus zu definieren scheint und durch Definieren eines negativen Werts die Achse invertiert (siehe hier für REL_Y).

Ein weiteres Beispiel mit mehr Schaltflächendefinition

[xboxdrv]
evdev=/dev/input/event8
silent=true

[evdev-absmap]
ABS_X=x1
ABS_Y=y1
ABS_HAT0X=x2
ABS_HAT0Y=y2

[ui-axismap]
x1=REL_X:10
y1=REL_Y:-10
x2=KEY_LEFT:KEY_RIGHT
y2=KEY_DOWN:KEY_UP

[evdev-keymap]
BTN_TRIGGER=x
BTN_TOP=y
BTN_THUMB=a
BTN_THUMB2=b
BTN_PINKIE=rt
BTN_BASE2=rb
BTN_TOP2=lt
BTN_BASE=lb
BTN_BASE3=back
BTN_BASE4=start

[ui-buttonmap]
x=KEY_KPENTER
y=KEY_SPACE
a=BTN_LEFT
b=BTN_RIGHT
rt=KEY_KP8
rb=KEY_KP2
lt=KEY_KP6
lb=KEY_KP4
back=KEY_LEFTSHIFT
start=KEY_RIGHTCTRL

# EOF #

5. Starten Sie es

sudo xboxdrv --config xboxdrv-mouse.ini

Erstellen Sie eine udev-Regelsudo , um ein Starten mit zu vermeiden .

FAZIT

Es funktioniert gut, es ist die beste Lösung für mich.

Boris
quelle
Gilt das nur für XBOX-Controller?
Gman Smith
@ gmansmith nein ich habe es für Logitec Game Pad verwendet
Boris
4

Auf Ubuntu nicht getestet, aber dieses einfache Rezept funktioniert auf Debian Jessie (mit meinem klassischen iBuffalo-USB-Gamepad ):

  1. Installieren Sie das richtige xorg-Modul:

$ sudo apt install xserver-xorg-input-joystick

  1. Starten Sie Ihren Display Manager neu (oder starten Sie ihn neu)
Jocelyn delalande
quelle
Bei Raspbian Buster - Raspberry Pi 3 B + hat es gut funktioniert. 8bitdo Gamepad im Xbox 360-kompatiblen Modus und generisches USB-Gamepad im Snes-Stil funktionieren gut. Vielen Dank.
Thinklogically
3

xboxdrv sollte in der Lage sein zu tun, was Sie wollen. Es erfordert jedoch ein wenig Konfiguration, um mit Nicht-Xbox-Gamepads zu arbeiten, ähnlich wie in der Manpage (Details finden Sie unter --evdev-debug, um die Namen der Schaltflächen und Achsen herauszufinden):

#!/bin/sh

xboxdrv \
  --evdev /dev/input/event9 \
  --evdev-absmap ABS_X=X1,ABS_Y=y1 \
  --evdev-absmap ABS_HAT0X=dpad_x,ABS_HAT0Y=dpad_y \
  --evdev-keymap BTN_BASE=LB,BTN_BASE2=RB \
  --evdev-keymap BTN_BASE3=guide,BTN_TOP2=start,BTN_PINKIE=back \
  --evdev-keymap BTN_THUMB=x,BTN_TOP=a,BTN_THUMB2=b,BTN_TRIGGER=y \
  \
 --ui-clear \
  --ui-buttonmap rb=BTN_LEFT,lb=BTN_RIGHT,start=KEY_ESC,back=KEY_F1 \
  --ui-buttonmap a=KEY_SPACE \
  --ui-axismap X1=REL_X:20,Y1=REL_Y:20 \
  --ui-axismap DPAD_X=KEY_A:KEY_D:1,DPAD_Y=KEY_W:KEY_S:1 \
  -s "$@"

# EOF #
Grumbel
quelle
schwierig, ich bekomme nur "ungültiges Argument"
Boris
Ein bisschen mehr Informationen wären hilfreich, wie sah Ihre Konfiguration aus, wie war die genaue Ausgabe von xboxdrv, welche Version haben Sie verwendet usw. Auch das obige ist nur ein Beispiel, Sie müssen es anpassen, damit Ihr Controller es hat Arbeit.
Grumbel
danke Grumbel! Ich versuche nicht faul zu sein, lese das Dokument und stelle schließlich meine XboxDRV-Konfiguration ein. Ich habe in meiner Antwort detailliert beschrieben, wie
Boris
2

Gleiches gilt für ein Nintendo 64-Gamepad

[xboxdrv]
evdev=/dev/input/event9
silent=true

[evdev-absmap]
ABS_X=x1
ABS_Y=y1
ABS_RZ=x2
ABS_Z=y2
ABS_HAT0X=dpad_x
ABS_HAT0Y=dpad_y

[axismap]
-X2=X2

[ui-axismap]
x1=REL_X:30
y1=REL_Y:30
x2=KEY_Q:KEY_D
y2=KEY_DOWN:KEY_UP
dpad_x=KEY_LEFT:KEY_RIGHT
dpad_y=KEY_DOWN:KEY_UP

[evdev-keymap]
BTN_THUMB2=b
BTN_THUMB=a
BTN_BASE3=back
BTN_BASE4=start
BTN_BASE=lb
BTN_BASE2=rb

[ui-buttonmap]
start=KEY_KPENTER
rb=BTN_RIGHT
lb=void
a=REL_WHEEL:-1:150
b=REL_WHEEL:1:150
back=BTN_LEFT

Ein paar Details

Mein Ziel war es, dies für Ego-Shoot-Spiele einzurichten, da ich es nicht gewohnt bin, mit Maus und Tastatur zu spielen. Die meisten Spiele unter GNU / Linux unterstützen das Gamepad jedoch nicht sehr gut. Ich habe versucht, dies wie den erweiterten Gamepad-Modus des berühmten N64-Spiels 007 - GoldenEye zu tun.

Auf diese Weise können Sie auch das Gamepad verwenden, um Ihre Maus zu ersetzen.

Meine Entscheidungen

  • emulieren Sie die Maus auf dem Hauptstick
  • Die gelben C (x2 y2) -Tasten sind auf UP, DOWN, Tastaturtasten und die Tasten auf einem Zertifikat-Keayboard für seitliche Bewegungen eingestellt (Q und D; Ändern Sie den Buchstaben für Ihr Tastaturlayout).
  • oben rechts unten links sind dem Kreuz zugeordnet
  • Klicken Sie mit der linken Maustaste auf Z (zurück), um zu schießen, und klicken Sie mit der rechten Maustaste auf R (rb). Abhängig vom gespielten Spiel möchten Sie möglicherweise die R-Taste in KEY_SPACE ändern, um zu springen.
  • A und B befinden sich am Mausrad, sodass Sie Ihre Waffen problemlos wechseln können.
  • Die L-Taste (lb) bleibt nicht eingestellt

Hoffe das wird anderen Spielern helfen.

Todo Wenn jemand weiß, wie es geht, würde mich interessieren, wie man eine Art "Mittelbereich" einrichtet, wenn sich der Mauszeiger nicht bewegt, auch wenn der Stick nicht perfekt in der Mitte ist. Dies würde verhindern, dass sich der Cursor etwas bewegt, wenn Sie das Gamepad nicht verwenden, es aber weiterhin aktiviert ist.

ttoine
quelle
1

Ich habe xboxdrv ausprobiert und es hat irgendwie funktioniert, aber es war nie perfekt für mich und ich musste die Konfigurationsdatei manuell konfigurieren. Die bessere Lösung scheint das AntiMicro-Projekt zu sein: https://github.com/Ryochan7/antimicro Die Konfiguration ist wirklich einfach (obwohl die GUI ziemlich einfach ist), mit ein paar Klicks konnte ich:

  • Konfigurieren Sie mein Pad (F710 Wireless) als Maus - Sie müssen der gewünschten Funktion in einem Satz nur die richtigen Tasten / Sticks zuweisen.
  • Holen Sie sich die zentrale "Logitech Logo" -Taste, um zwischen Maus- und Pad-Betrieb zu wechseln. Ich habe einfach den zweiten Satz, in dem keine der Tasten zugewiesen ist, und die zentrale Taste wechselt zwischen diesen beiden Modi. Daher kann ich das Spiel mit "Mausmodus" und starten Wechseln Sie dann zum Spielen in den "Pad-Modus".
  • AntiMicro scheint die "tote Zone" auch automatisch anzuwenden - als ich xboxdrv verwendete, musste ich dies manuell in der Konfigurationsdatei tun, da der Cursor die ganze Zeit langsam in eine Richtung driftete, hier ist alles gut.

Ich denke, das Projekt ist ziemlich neu, aber für mich scheint es bisher fast perfekt zu funktionieren. Das kleine Problem ist, dass das "Tray" -Symbol erstellt wird, mit dem Profile in der oberen linken Ecke gewechselt werden können, was nicht gut in das globale Ubuntu-Menüschema passt.

user126406
quelle
Danke dafür. AntiMicro ist ganz nett. Ich konnte meine alte Sixaxis (dh Dualshock 3 minus Rumpeln) dazu bringen, sowohl Tastatur- als auch Mausereignisse zu senden. Die Einrichtung ist ziemlich unkompliziert, und nach dem, was ich gesehen habe, reagiert der Entwickler sehr schnell auf Fehlerberichte.
Laurence Gonsalves