¿Cómo puede un gamepad controlar EL mouse?

9

Hay muchas preguntas sobre este tema:

Pero el propósito de estas preguntas / respuestas es poder usar el gamepad para jugar un juego.

Me gustaría una solución para usar el gamepad para controlar EL mouse.
Para reemplazar el mouse por el gamepad en todas las aplicaciones.
De esa manera podría controlar mi computadora en la sala de estar desde mi sofá con un gamepad inalámbrico.

Boris
fuente

Respuestas:

8

Siguiendo Grumbel respuesta 's, he intentado xboxdrv solución con el apoyo de su enlace y en especial esta página :

1. Instale xboxdrv 0.8.2 desde el Centro de software de Ubuntu.

Instale también uinput y joydev si es necesario. Lo hice de esta manera sudo modprobe uinput+sudo modprobe joydev

2. Necesita saber el evento del gamepad:

Inicia udevadm monitor --udevy luego conecta el gamepad:

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

Concluyo que el evento de mi gamepad es / dev / input / event8

3. Visualice los nombres de cada tecla, eje, botones del gamepad.

La idea es iniciar xboxdrvy probar todos los botones y anotar el resultado en papel.

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

En mi caso el resultado es: ingrese la descripción de la imagen aquí

4. Establecer el archivo de configuración

Cree un archivo xboxdrv-mouse.ini para establecer el eje XY y el botón izquierdo y derecho del mouse.
Aquí configuro los botones del gamepad 2para el botón izquierdo del mouse y 3para el botón derecho 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 #

Tenga en cuenta que el valor para REl_X y REL_Y parece definir la velocidad del mouse, y al definir un valor negativo invierte el eje (consulte aquí para REL_Y)

Otro ejemplo con más definición de botón.

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

sudo xboxdrv --config xboxdrv-mouse.ini

Para evitar iniciarlo con sudo, cree una regla udev .

CONCLUSIÓN

Funciona bien, es la mejor solución para mí.

Boris
fuente
¿esto solo se aplica a los controladores XBOX?
Gman Smith
@gmansmith no, lo usé para el pad de juegos Logitec
Boris
4

No probado en ubuntu, pero esa receta simple funciona en Debian Jessie (con mi gamepad usb iBuffalo classic ):

  1. Instale el módulo xorg correcto:

$ sudo apt install xserver-xorg-input-joystick

  1. Reinicie su administrador de pantalla (o reinicie)
Jocelyn delalande
fuente
Funcionó bien en Raspbian Buster - Raspberry Pi 3 B +. El gamepad 8bitdo en modo compatible con xbox 360 y el gamepad genérico snes style usb funciona bien. Gracias.
pensar lógicamente el
3

xboxdrv debería poder hacer lo que quieras. Sin embargo, requiere un poco de configuración para funcionar con gamepads que no sean Xbox, algo similar a (consulte la página de manual para obtener más detalles, use --evdev-debug para averiguar los nombres de los botones y ejes):

#!/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
fuente
difícil, solo obtengo un "argumento inválido"
Boris
Un poco más de información sería útil, cómo se veía su configuración, cuál era el resultado exacto de xboxdrv, qué versión usó, etc. Además, lo anterior es solo un ejemplo, debe personalizarlo para que su controlador lo tenga trabajo.
Grumbel
gracias Grumbel! tratando de no ser perezoso, leí el documento y finalmente configuré mi configuración de xboxdrv, detallé cómo en mi respuesta
Boris
2

Lo mismo para un gamepad de 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

Algunos detalles

Mi objetivo era configurar esto para jugar en juegos de disparos en primera persona, ya que no estoy acostumbrado a jugar con el mouse y el teclado. Sin embargo, la mayoría de los juegos en GNU / Linux no son muy compatibles con gamepad. Traté de hacer eso como el modo de gamepad avanzado en el famoso N64 Game 007 - GoldenEye.

De esta manera, también puedes usar el gamepad para reemplazar tu mouse.

Mis decisiones

  • emular el mouse en el dispositivo principal
  • los botones amarillos C (x2 y2) están configurados en las teclas de teclado ARRIBA, ABAJO, y las teclas en un panel de teclas azerty para movimiento lateral (Q y D; cambie la letra para la distribución del teclado)
  • arriba derecha abajo izquierda se asignan a la cruz
  • el botón izquierdo del mouse está en Z (atrás) para disparar y el botón derecho en R (rb). Es posible que desee cambiar el botón R a KEY_SPACE para saltar, dependiendo del juego que juegue.
  • A y B están en la rueda del mouse, por lo que puede cambiar fácilmente sus armas.
  • el botón L (lb) se deja sin configurar

Espero que esto ayude a otros jugadores.

Todo Si alguien sabe cómo hacerlo, me interesaría saber cómo configurar una especie de "área central" donde el cursor del mouse no se mueva, incluso si el palo no está perfectamente en el medio. Esto evitaría que el cursor se mueva un poco cuando no usas el gamepad pero todavía está habilitado.

ttoine
fuente
1

Probé el xboxdrv y funcionó, pero nunca fue perfecto para mí y tuve que configurar manualmente el archivo de configuración. La mejor solución parece ser el proyecto AntiMicro: https://github.com/Ryochan7/antimicro la configuración es realmente simple (aunque la GUI es bastante básica), con un par de clics pude:

  • configurar mi pad (F710 Wireless) como un mouse; solo necesita asignar botones / palos adecuados a la función deseada en un conjunto;
  • obtener la tecla central "Logitech logo" para alternar entre la operación del mouse y la almohadilla: simplemente tengo el segundo conjunto donde no se asigna ninguna de las teclas y la tecla central alterna entre esos dos modos, por lo tanto, puedo iniciar el juego usando el "modo mouse" y luego cambie al "modo pad" para jugar;
  • AntiMicro parece aplicar también automáticamente la "zona muerta": cuando estaba usando el xboxdrv, tenía que hacerlo manualmente en el archivo de configuración porque el cursor se movía lentamente todo el tiempo en una dirección, aquí todo está bien.

Creo que el proyecto es bastante nuevo, pero para mí parece funcionar casi perfectamente hasta ahora. El pequeño problema es que crea el icono de "bandeja" que permite cambiar los perfiles en la esquina superior izquierda que no encaja bien en el esquema del menú global de Ubuntu.

usuario126406
fuente
Gracias por esto. AntiMicro es bastante agradable. Pude obtener mi viejo Sixaxis (es decir: Dualshock 3 menos ruido) enviando eventos de teclado y mouse. La configuración es bastante sencilla y, por lo que he visto, el desarrollador responde muy bien a los informes de errores.
Laurence Gonsalves