web-dev-qa-db-fra.com

Comment une manette de jeu peut-elle contrôler LA souris?

Il y a beaucoup de questions sur ce sujet:

Mais le but de ces questions/réponses est de pouvoir utiliser le gamepad pour jouer à un jeu.

Je voudrais une solution pour utiliser la manette de jeu pour contrôler LA souris.
Pour remplacer la souris par la manette de jeu dans toutes les applications.
Ainsi, je pouvais contrôler mon ordinateur dans le salon depuis mon canapé avec une manette de jeu sans fil.

8
Boris

Après la réponse de Grumbel , j'ai essayé la solution xboxdrv avec le support de his lien et spécialement cette page :

1. Installez xboxdrv 0.8.2 à partir du Centre de logiciel Ubuntu.

Installez également uinput et joydev si nécessaire. Je l'ai fait de cette manière Sudo modprobe uinput + Sudo modprobe joydev

2. Besoin de connaître l'événement du gamepad:

Lancez udevadm monitor --udev puis branchez la manette de jeu:

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

Je conclus que l'événement de ma manette est /dev/input/event8

3. Afficher les noms de chaque touche, axe, boutons du gamepad.

L'idée est de lancer xboxdrv, de tester tous les boutons et de noter le résultat sur papier.

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

Dans mon cas, le résultat est: enter image description here

4. Définir le fichier de configuration

Créez un fichier xboxdrv-mouse.ini pour définir l’axe des ordonnées X et les boutons gauche et droit de la souris.
Ici, je mets les boutons de la manette de jeu 2 pour le bouton gauche de la souris et 3 pour le bouton droit de la souris:

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

Notez que la valeur pour REl_X et REL_Y semble définir la vitesse de la souris, et en définissant une valeur négative, elle inverse l’axe (voir ici pour REL_Y)

Un autre exemple avec plus de définition de bouton

[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. Lancez-le

Sudo xboxdrv --config xboxdrv-mouse.ini

Pour éviter de le lancer avec Sudo, créer une règle udev .

CONCLUSION

Cela fonctionne bien, c'est la meilleure solution pour moi.

8
Boris

xboxdrv devrait pouvoir faire ce que vous voulez. Cela nécessite toutefois un peu de configuration pour fonctionner avec des manettes de jeu non-Xbox, un peu comme (consultez la page de manuel pour plus de détails, utilisez --evdev-debug pour trouver le nom des boutons et des axes):

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

Non testé sur Ubuntu, mais cette recette simple fonctionne sur Debian Jessie (avec mon gamepad USB classique d'iBuffalo):

  1. Installez le bon module xorg:

$ Sudo apt install xserver-xorg-input-joystick

  1. Redémarrez votre gestionnaire d'affichage (ou redémarrez)
3
Jocelyn delalande

Pareil pour 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

Quelques détails

Mon objectif était de permettre aux joueurs de jouer à la première personne, car je ne suis pas habitué à jouer avec la souris et le clavier. Cependant, la plupart des jeux sur GNU/Linux ne supportent pas très bien le gamepad. J'ai essayé de faire cela comme le mode avancé du gamepad sur le célèbre jeu N64 Game 007 - GoldenEye.

De cette façon, vous pouvez également utiliser le gamepad pour remplacer votre souris.

mes choix

  • imiter la souris sur le bâton principal
  • les boutons jaunes C (x2 y2) sont réglés sur les touches de clavier HAUT, BAS et les touches d'un keayboard azerty pour un déplacement latéral (Q et D; changez la lettre de votre disposition de clavier)
  • haut droite bas gauche sont affectés à la croix
  • clic gauche de la souris est sur Z (arrière) pour tirer, et clic droit sur R (rb). Vous voudrez peut-être changer le bouton R en KEY_SPACE pour sauter, en fonction du jeu auquel vous jouez.
  • A et B sont sur la molette de la souris, vous pouvez donc changer facilement vos armes.
  • le bouton L (lb) n'est pas activé

J'espère que cela aidera d'autres joueurs.

Todo Si quelqu'un sait comment faire, je serais intéressé de savoir comment configurer une sorte de "zone centrale" qhere le curseur de la souris ne bouge pas, même si le manche n'est pas parfaitement dans le milieu. Cela éviterait au curseur de bouger un peu lorsque vous n'utilisez pas la manette de jeu mais qu'elle est toujours activée.

2
ttoine

J'ai essayé la xboxdrv et cela a fonctionné, mais ce n'était jamais parfait pour moi et j'ai dû configurer manuellement le fichier de configuration. La meilleure solution semble être le projet AntiMicro: https://github.com/Ryochan7/antimicro la configuration est très simple (bien que l'interface graphique soit plutôt basique), en quelques clics, j'ai pu à:

  • configurer mon clavier (F710 Wireless) en tant que souris - il suffit d’affecter les boutons/clés appropriés à la fonction souhaitée dans un jeu;
  • récupérez la touche centrale "Logitech logo" pour basculer entre les opérations souris et pad - il me reste simplement le deuxième jeu où aucune des touches n'est attribuée et la touche centrale bascule entre ces deux modes, je peux donc lancer le jeu en "mode souris" et puis passez en "mode pad" pour jouer;
  • AntiMicro semble également appliquer automatiquement la "zone morte" - lorsque j'utilisais la xboxdrv, je devais le faire manuellement dans un fichier de configuration, car le curseur dérivait lentement dans une direction, ici tout est bon.

Je pense que le projet est assez nouveau mais pour moi, il semble fonctionner presque parfaitement jusqu'à présent. Le petit problème est qu'il crée l'icône "plateau" qui permet de changer de profil dans le coin supérieur gauche, ce qui ne cadre pas avec le schéma de menu global d'Ubuntu.

1
user126406