W jaki sposób gamepad może sterować myszą?

9

Istnieje wiele pytań na ten temat:

Ale celem tych pytań / odpowiedzi jest możliwość korzystania z gamepada do grania w grę.

Chciałbym znaleźć rozwiązanie polegające na sterowaniu myszą za pomocą gamepada.
Zastąpienie myszy przez gamepad we wszystkich aplikacjach.
W ten sposób mogłem sterować komputerem w salonie z kanapy za pomocą bezprzewodowego pada.

Boris
źródło

Odpowiedzi:

8

W następstwie Grumbel odpowiedź „s, próbowałem xboxdrv rozwiązanie przy wsparciu swojego łącza oraz specjalnie do tej strony :

1. Zainstaluj xboxdrv 0.8.2 z Centrum oprogramowania Ubuntu.

W razie potrzeby zainstaluj także uinput i joydev . Zrobiłem to w ten sposób sudo modprobe uinput+sudo modprobe joydev

2. Musisz wiedzieć o zdarzeniu gamepada:

Uruchom, udevadm monitor --udeva następnie podłącz pad do gry:

$ 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)

Doszedłem do wniosku, że zdarzenie mojego gamepada to / dev / input / event8

3. Wyświetl nazwy wszystkich klawiszy, osi, przycisków gamepada.

Chodzi o uruchomienie xboxdrvi przetestowanie wszystkich przycisków i zanotowanie wyniku na papierze.

$ 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
...

W moim przypadku wynikiem jest: wprowadź opis zdjęcia tutaj

4. Ustaw plik konfiguracyjny

Utwórz plik xboxdrv-mouse.ini , aby ustawić oś XY oraz lewy i prawy przycisk myszy.
Tutaj ustawiam przyciski gamepad 2dla lewego przycisku myszy i 3dla prawego przycisku myszy:

[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 #

Zauważ, że wartość RE1_X i REL_Y wydaje się określać prędkość myszy, a poprzez zdefiniowanie wartości ujemnej odwraca oś (patrz tutaj dla REL_Y)

Kolejny przykład z większą definicją przycisku

[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. Uruchom

sudo xboxdrv --config xboxdrv-mouse.ini

Aby uniknąć uruchamiania go sudo, utwórz regułę udev .

WNIOSEK

Działa dobrze, to dla mnie najlepsze rozwiązanie.

Boris
źródło
czy dotyczy to tylko kontrolerów XBOX?
Gman Smith,
@gmansmith no Użyłem go do konsoli Logitec
Boris
5

Nie przetestowano na Ubuntu, ale ten prosty przepis działa na Debian Jessie (z moim klasycznym padem USB iBuffalo ):

  1. Zainstaluj odpowiedni moduł xorg:

$ sudo apt install xserver-xorg-input-joystick

  1. Uruchom ponownie menedżera ekranu (lub uruchom ponownie)
Jocelyn delalande
źródło
Działa dobrze na Raspbian Buster - Raspberry Pi 3 B +. 8bitdo gamepad w trybie kompatybilnym z Xbox 360 i standardowy gamepad usnes w stylu snes działa dobrze. Dziękuję Ci.
myśl logicznie
3

xboxdrv powinien być w stanie robić, co chcesz. Wymaga to jednak nieco konfiguracji, aby działać z gamepadami innymi niż Xbox, coś w stylu (sprawdź szczegóły na stronie podręcznika, użyj --evdev-debug, aby znaleźć nazwy przycisków i osi):

#!/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
źródło
trudne, dostaję tylko „nieprawidłowy argument”
Boris
Przydałoby się trochę więcej informacji, jak wyglądała twoja konfiguracja, jakie było dokładne wyjście xboxdrv, jakiej wersji użyłeś itp. Również powyższy przykład to tylko przykład, musisz go dostosować, aby kontroler go posiadał praca.
Grumbel,
dziękuję Grumbel! staram się nie być leniwym, czytam dokument i w końcu ustawiłem konfigurację xboxdrv, szczegółowo opisałem, jak w mojej odpowiedzi
Boris
2

To samo dotyczy gamepad Nintendo 64

[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

Trochę szczegółów

Moim celem było skonfigurowanie tego do grania w gry FPS, ponieważ nie jestem przyzwyczajony do grania za pomocą myszy i klawiatury. Jednak większość gier na GNU / Linux nie obsługuje zbyt dobrze gamepada. Próbowałem to zrobić jak w zaawansowanym trybie gamepad na słynnej grze N64 007 - GoldenEye.

W ten sposób możesz także użyć gamepada do zastąpienia myszy.

Moje wybory

  • emulować mysz na głównym drążku
  • żółte przyciski C (x2 y2) są ustawione w GÓRĘ, W DÓŁ klawisze klawiatury, a klawisze na klawiaturze azerty do bocznego przesuwania (Q i D; zmień literę dla układu klawiatury)
  • w górę w prawo w dół w lewo są przypisane do krzyża
  • Kliknij lewym przyciskiem myszy na Z (z tyłu), aby strzelać, a prawym przyciskiem myszy R (rb). Możesz zmienić przycisk R na KEY_SPACE, aby skakać, w zależności od gry, w którą grasz.
  • A i B znajdują się na kółku myszy, więc możesz łatwo zmieniać broń.
  • przycisk L (lb) pozostaje nieaktywny

Mam nadzieję, że pomoże to innym graczom.

Todo Jeśli ktoś wie, jak to zrobić, chciałbym wiedzieć, jak ustawić rodzaj „środkowego obszaru”, gdzie kursor myszy się nie porusza, nawet jeśli drążek nie jest idealnie pośrodku. Pozwoli to uniknąć poruszenia kursora, gdy nie korzystasz z gamepada, ale jest on nadal włączony.

ttoine
źródło
1

Próbowałem xboxdrv i to działało, ale nigdy nie było dla mnie idealne i musiałem ręcznie skonfigurować plik konfiguracyjny. Lepszym rozwiązaniem wydaje się być projekt AntiMicro: https://github.com/Ryochan7/antimicro konfiguracja jest naprawdę prosta (chociaż GUI jest dość prosty), kilkoma kliknięciami udało mi się:

  • skonfiguruj mój pad (F710 Wireless) jako mysz - wystarczy przypisać odpowiednie przyciski / drążki do żądanej funkcji w jednym zestawie;
  • uzyskaj środkowy klawisz „Logitech logo”, aby przełączać się między działaniem myszy i pada - po prostu mam drugi zestaw, w którym nie przypisano żadnego klawisza, a środkowy klawisz przełącza się między tymi dwoma trybami, dlatego mogę uruchomić grę w „trybie myszy” i następnie przejdź do „trybu padu”, aby grać;
  • Wygląda na to, że AntiMicro automatycznie stosuje „martwą strefę” - kiedy korzystałem z xboxdrv, musiałem to zrobić ręcznie w pliku konfiguracyjnym, ponieważ kursor płynął powoli cały czas w jednym kierunku, tutaj wszystko jest dobrze.

Myślę, że projekt jest całkiem nowy, ale dla mnie wydaje się, że działa prawie idealnie. Mały problem polega na tym, że tworzy ikonę „zasobnika”, która pozwala przełączać profile w lewym górnym rogu, co nie pasuje dobrze do schematu globalnego menu Ubuntu.

użytkownik126406
źródło
Dzięki za to. AntiMicro jest całkiem niezły. Byłem w stanie uzyskać moją starą Sixaxis (tj. Dualshock 3 minus dudnienie) wysyłającą zdarzenia klawiatury i myszy. Konfiguracja jest dość prosta i z tego, co widziałem, programista bardzo reaguje na zgłoszenia błędów.
Laurence Gonsalves,