Come può un gamepad controllare IL mouse?


9

Ci sono molte domande su questo argomento:

Ma lo scopo di queste domande / risposte è di poter usare il gamepad per giocare.

Vorrei una soluzione per utilizzare il gamepad per controllare IL mouse.
Per sostituire il mouse con il gamepad in tutte le applicazioni.
In questo modo ho potuto controllare il mio computer in salotto dal mio divano con un gamepad wireless.

Risposte:


8

Seguendo la risposta di Grumbel , ho provato la soluzione xboxdrv con il supporto del suo link e specialmente questa pagina :

1. Installare xboxdrv 0.8.2 da Ubuntu Software Center.

Installare anche uinput e joydev se necessario. L'ho fatto in questo modo sudo modprobe uinput+sudo modprobe joydev

2. È necessario conoscere l' evento del gamepad:

Avvia udevadm monitor --udeve quindi collega il game pad:

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

Concludo che l'evento del mio gamepad è / dev / input / event8

3. Visualizza i nomi di ogni tasto, asse, pulsante del gamepad.

L'idea è di avviare xboxdrve testare tutti i pulsanti e annotare il risultato sulla carta.

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

Nel mio caso il risultato è: inserisci qui la descrizione dell'immagine

4. Impostare il file di configurazione

Creare un file xboxdrv-mouse.ini per impostare l'asse XY e il pulsante sinistro e destro del mouse.
Qui ho impostato i pulsanti del gamepad 2per il pulsante sinistro del mouse e 3per il pulsante destro del mouse:

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

Si noti che il valore per REl_X e REL_Y sembra definire la velocità del mouse e, definendo un valore negativo, inverte l'asse (vedere qui per REL_Y)

Un altro esempio con più definizioni di pulsanti

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

sudo xboxdrv --config xboxdrv-mouse.ini

Per evitare di avviarlo con sudo, crea una regola udev .

CONCLUSIONE

Funziona bene, è la soluzione migliore per me.


questo vale solo per i controller XBOX?
Gman Smith,

@gmansmith no L'ho usato per il game pad Logitec
Boris,

4

Non testato su Ubuntu, ma quella semplice ricetta funziona su Debian Jessie (con il mio gamepad USB classico iBuffalo ):

  1. Installa il modulo xorg giusto:

$ sudo apt install xserver-xorg-input-joystick

  1. Riavvia il display manager (o riavvia)

Ha funzionato bene su Raspbian Buster - Raspberry Pi 3 B +. Gamepad 8bitdo in modalità compatibile con xbox 360 e gamepad usb in stile snes generico funziona bene. Grazie.
Thinklogically

3

xboxdrv dovrebbe essere in grado di fare quello che vuoi. Richiede tuttavia un po 'di configurazione per funzionare con gamepad non Xbox, qualcosa del genere (controlla la pagina man per i dettagli, usa --evdev-debug per scoprire i nomi dei pulsanti e degli assi):

#!/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 #

difficile, ricevo solo "argomento non valido"
Boris

Qualche informazione in più sarebbe utile, come appariva la tua configurazione, qual era l'output esatto di xboxdrv, quale versione hai usato, ecc. Anche quanto sopra è solo un esempio, devi personalizzarlo per il tuo controller per averlo lavoro.
Grumbel,

grazie Grumbel! cercando di non essere pigro, ho letto il documento e ho finalmente impostato la mia configurazione di xboxdrv, ho dettagliato come nella mia risposta
Boris

2

Lo stesso per un 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

Alcuni dettagli

Il mio obiettivo era di configurarlo per giocare ai giochi sparatutto in prima persona, dato che non sono abituato a giocare con il mouse e la tastiera. Tuttavia, la maggior parte dei giochi su GNU / Linux non supporta molto bene il gamepad. Ho provato a farlo come la modalità gamepad avanzata sul famoso N64 Game 007 - GoldenEye.

In questo modo, puoi anche utilizzare il gamepad per sostituire il mouse.

Mie scelte

  • emulare il mouse sulla levetta principale
  • i pulsanti gialli C (x2 y2) sono impostati su SU, GIÙ i tasti della tastiera e i tasti su un keayboard azerty per lo spostamento laterale (Q e D; cambia la lettera per il layout della tastiera)
  • in alto a destra in basso a sinistra sono assegnati alla croce
  • fare clic con il tasto sinistro del mouse su Z (indietro) per sparare e fare clic con il tasto destro su R (rb). Potresti voler cambiare il pulsante R in KEY_SPACE per saltare, a seconda del gioco che giochi.
  • A e B sono sulla rotellina del mouse, quindi puoi facilmente cambiare le tue armi.
  • il pulsante L (lb) non viene impostato

Spero che questo possa aiutare gli altri giocatori.

Todo Se qualcuno sa come farlo, sarei interessato a sapere come impostare una sorta di "area centrale" dove il cursore del mouse non si sposta, anche se la levetta non è perfettamente nel mezzo. Ciò eviterebbe di spostare un po 'il cursore quando non si utilizza il gamepad ma è ancora abilitato.


1

Ho provato xboxdrv e ha funzionato, ma non è mai stato perfetto per me e ho dovuto configurare manualmente il file di configurazione. La soluzione migliore sembra essere il progetto AntiMicro: https://github.com/Ryochan7/antimicro la configurazione è davvero semplice (anche se la GUI è piuttosto semplice), con un paio di clic sono stato in grado di:

  • configura il mio pad (F710 Wireless) come un mouse - devi solo assegnare pulsanti / stick adeguati alla funzione desiderata in un set;
  • ottenere il tasto "Logitech logo" centrale per passare dall'operazione mouse a pad - Ho semplicemente il secondo set in cui nessuno dei tasti è assegnato e il tasto centrale passa tra queste due modalità, quindi posso avviare il gioco usando "modalità mouse" e quindi passa alla "modalità pad" per giocare;
  • AntiMicro sembra applicare automaticamente anche la "zona morta" - quando stavo usando xboxdrv, dovevo farlo manualmente nel file di configurazione perché il cursore si spostava lentamente tutto il tempo in una direzione, qui tutto è buono.

Penso che il progetto sia abbastanza nuovo, ma per me sembra funzionare quasi perfettamente finora. Il piccolo problema è che crea l'icona "vassoio" che consente di cambiare i profili nell'angolo in alto a sinistra che non si adatta bene allo schema del menu globale di Ubuntu.


Grazie per questo. AntiMicro è abbastanza carino. Sono stato in grado di ottenere il mio vecchio Sixaxis (ovvero: Dualshock 3 meno il rombo) inviando eventi sia per la tastiera che per il mouse. L'installazione è piuttosto semplice e da quello che ho visto lo sviluppatore è molto sensibile alle segnalazioni di bug.
Laurence Gonsalves,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.