Como um gamepad pode controlar o mouse?

9

Há muitas perguntas sobre este assunto:

Mas o objetivo dessas perguntas / respostas é poder usar o gamepad para jogar.

Gostaria de uma solução para usar o gamepad para controlar o mouse.
Para substituir o mouse pelo gamepad em todos os aplicativos.
Dessa forma, eu podia controlar meu computador na sala de estar do meu sofá com um gamepad sem fio.

Boris
fonte

Respostas:

8

Seguindo a resposta de Grumbel , tentei a solução xboxdrv com o suporte do link dele e especialmente desta página :

1. Instale o xboxdrv 0.8.2 no Ubuntu Software Center.

Instale também uinput e joydev, se necessário. Eu fiz isto deste modo sudo modprobe uinput+sudo modprobe joydev

2. Precisa saber o evento do gamepad:

Inicie udevadm monitor --udeve conecte o 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)

Concluo que o evento do meu gamepad é / dev / input / event8

3. Exibir nomes de todas as teclas, eixos, botões do gamepad.

A idéia é iniciar xboxdrve testar todos os botões e anotar o resultado no 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
...

No meu caso, o resultado é: insira a descrição da imagem aqui

4. Defina o arquivo de configuração

Crie um arquivo xboxdrv-mouse.ini para definir o eixo XY e o botão esquerdo e direito do mouse.
Aqui, defino os botões do gamepad 2para o botão esquerdo do mouse e 3para o botão direito do 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 #

Observe que o valor para REl_X e REL_Y parece definir a velocidade do mouse e, ao definir um valor negativo, ele inverte o eixo (veja aqui REL_Y)

Um outro exemplo com mais definição de botão

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

sudo xboxdrv --config xboxdrv-mouse.ini

Para evitar iniciá-lo sudo, crie uma regra do udev .

CONCLUSÃO

Funciona bem, é a melhor solução para mim.

Boris
fonte
isso se aplica apenas aos controladores XBOX?
precisa
@gmansmith não, eu usei por game pad Logitec
Boris
4

Não testado no ubuntu, mas essa receita simples funciona no Debian Jessie (com meu gamepad clássico do iBuffalo ):

  1. Instale o módulo xorg correto:

$ sudo apt install xserver-xorg-input-joystick

  1. Reinicie seu gerenciador de exibição (ou reinicie)
Jocelyn delalande
fonte
Funcionou bem no Raspbian Buster - Raspberry Pi 3 B +. Gamepad 8bitdo no modo compatível com xbox 360 e gamepad usb estilo snes genérico funciona bem. Obrigado.
thinklogically
3

O xboxdrv deve poder fazer o que você deseja. No entanto, é necessário um pouco de configuração para trabalhar com gamepads que não sejam do Xbox, algo parecido com (consulte a página de manual para obter detalhes, use --evdev-debug para descobrir os nomes dos botões e eixos):

#!/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
fonte
difícil, eu só obter "argumento inválido"
Boris
Um pouco mais de informação seria útil, como foi a sua configuração, qual foi a saída exata do xboxdrv, qual versão você usou etc. Além disso, o exemplo acima é apenas um exemplo, você deve personalizá-lo para o seu controlador trabalhos.
Grumbel
obrigado Grumbel! tentando não ser ser preguiçoso, eu li o doc e eu finalmente o meu xboxdrv configuração, eu detalhou como na minha resposta
Boris
2

Mesmo para um 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

Alguns detalhes

Meu objetivo era configurá-lo para jogar em jogos de tiro em primeira pessoa, pois não estou acostumado a jogar com mouse e teclado. No entanto, a maioria dos jogos no GNU / Linux não suporta muito bem o gamepad. Tentei fazer isso como o modo gamepad avançado no famoso jogo N64 007 - GoldenEye.

Dessa forma, você também pode usar o gamepad para substituir o mouse.

Minhas escolhas

  • emule o mouse no manípulo principal
  • os botões amarelos C (x2 y2) estão configurados para as teclas de teclado PARA CIMA, PARA BAIXO e as teclas de um teclado de azerty para movimento lateral (Q e D; altere a letra do layout do teclado)
  • para cima, para baixo, para a esquerda, são atribuídos à cruz
  • clique esquerdo do mouse está em Z (volta) para disparar e clique direito em R (rb). Você pode alterar o botão R para KEY_SPACE para pular, dependendo do jogo que você joga.
  • A e B estão na roda do mouse, para que você possa facilmente mudar suas armas.
  • o botão L (lb) é deixado sem ajuste

Espero que isso ajude outros jogadores.

Todo Se alguém souber como fazê-lo, eu estaria interessado em saber como configurar uma espécie de "área central" onde o cursor do mouse não se move, mesmo que o stick não esteja perfeitamente no meio. Isso evitaria que o cursor se movesse um pouco quando você não usa o gamepad, mas ele ainda está ativado.

ttoine
fonte
1

Eu tentei o xboxdrv e funcionou, mas nunca foi perfeito para mim e tive que configurar manualmente o arquivo de configuração. A melhor solução parece ser o projeto AntiMicro: https://github.com/Ryochan7/antimicro a configuração é realmente simples (embora a GUI seja bastante básica), com alguns cliques, consegui:

  • configure meu pad (F710 Wireless) como um mouse - basta atribuir botões / varas adequados à função desejada em um conjunto;
  • obtenha a tecla central "Logitech logo" para alternar entre a operação do mouse e do teclado - eu simplesmente tenho o segundo conjunto em que nenhuma das teclas está atribuída e a tecla central alterna entre esses dois modos; portanto, posso iniciar o jogo usando o "modo mouse" e depois mude para o "modo pad" para tocar;
  • O AntiMicro parece aplicar a "zona morta" automaticamente também - quando eu estava usando o xboxdrv, era necessário fazê-lo manualmente no arquivo de configuração porque o cursor flutuava lentamente o tempo todo em uma direção, aqui está tudo bem.

Eu acho que o projeto é bastante novo, mas para mim parece funcionar quase perfeitamente até agora. O pequeno problema é que ele cria o ícone "bandeja" que permite alternar perfis no canto superior esquerdo, o que não se encaixa bem no esquema global de menus do Ubuntu.

user126406
fonte
Obrigado por isso. AntiMicro é bastante agradável. Consegui receber meu Sixaxis antigo (ou seja: Dualshock 3 menos rumble) enviando eventos de teclado e mouse. A configuração é bem simples e, pelo que vi, o desenvolvedor responde muito bem aos relatórios de erros.
Laurence Gonsalves