Como um gamepad pode controlar o mouse?

8

Há muitas perguntas sobre esse assunto:

Mas o propósito destas perguntas / respostas é poder usar o gamepad para jogar um jogo.

Eu 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 poderia controlar meu computador na sala de estar do meu sofá com um gamepad sem fio.

    
por Boris 21.03.2012 / 21:27

5 respostas

8

Seguindo a resposta do Grumbel , eu tentei a solução xboxdrv com o suporte do e especialmente esta página :

1. Instale o xboxdrv 0.8.2 do Ubuntu Software Center.

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

2. Precisa conhecer o evento do gamepad:

Inicie o udevadm monitor --udev e, em seguida, ligue o bloco de jogos:

$ 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. Exibe nomes de todas as teclas, eixos, botões do gamepad.

A ideia é lançar xboxdrv e 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 é:

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 eu defino os botões gamepad 2 para o botão esquerdo do mouse e 3 para 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 de REl_X e REL_Y parece definir a velocidade do mouse e, ao definir um valor negativo, inverte o eixo (veja aqui para 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. Lançamento

sudo xboxdrv --config xboxdrv-mouse.ini

Para evitar o lançamento com sudo , crie uma regra do udev .

CONCLUSÃO

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

    
por Boris 13.05.2012 / 11:13
3

xboxdrv deve ser capaz de fazer o que quiser. No entanto, é necessário um pouco de configuração para trabalhar com os gamepads que não são da Xbox, algo como (verifique a página de manual para 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 #
    
por Grumbel 27.03.2012 / 19:19
3

Não testado no Ubuntu, mas essa receita simples funciona no Debian Jessie (com meu iBuffalo classic usb gamepad ):

  1. Instale o módulo xorg correto:

$ sudo apt install xserver-xorg-input-joystick

  1. Reinicie seu gerenciador de exibição (ou reinicialize)
por Jocelyn delalande 31.12.2016 / 00:26
2

O 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 configurar isso para jogar em jogos de tiro em primeira pessoa, já que não estou acostumado a jogar com mouse e teclado. No entanto, a maioria dos jogos no GNU / Linux não suporta gamepad muito bem. Eu tentei fazer isso como o modo gamepad avançado no famoso N64 Game 007 - GoldenEye.

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

Minhas escolhas

  • emular o mouse no bastão principal
  • Os botões
  • amarelo C (x2 y2) são definidos para as teclas UP e DOWN do teclado e as teclas em um keayboard azerty para movimentação lateral (Q e D; altere a letra do layout do teclado)
  • para cima, para baixo, à esquerda, são atribuídos à cruz
  • clique com o botão esquerdo do mouse em Z (trás) para disparar e clique com o botão direito em R (rb). Você pode querer 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, então você pode facilmente mudar suas armas.
  • o botão L (lb) é deixado sem definir

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 se o bastão não estiver perfeitamente no meio. Isso evitaria que o cursor se movesse um pouco quando você não usa o gamepad, mas ele ainda está ativado.

    
por ttoine 13.08.2014 / 16:16
1

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

  • configure meu pad (F710 Wireless) como mouse - basta atribuir os botões / sticks adequados à função desejada em um conjunto;
  • obtenha a chave central "Logitech logo" para alternar entre operação de mouse e pad - eu simplesmente tenho o segundo conjunto onde nenhuma das chaves é atribuída e a chave central alterna entre esses dois modos, portanto eu posso iniciar o jogo usando "mouse modo "e, em seguida, mude para" pad mode "para jogar;
  • O AntiMicro também parece aplicar a "zona morta" automaticamente - quando eu estava usando o xboxdrv eu tinha que fazer isso manualmente no arquivo de configuração porque o cursor girava lentamente o tempo todo em uma direção, aqui está tudo bem. li>

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

    
por user126406 30.09.2014 / 00:10