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

9

Il y a beaucoup de questions à ce sujet:

Mais le but de ces questions / réponses est de pouvoir utiliser la manette de jeu 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.
De cette façon, je pouvais contrôler mon ordinateur dans le salon depuis mon canapé avec une manette de jeu sans fil.

Boris
la source

Réponses:

8

Suite à la réponse de Grumbel , j'ai essayé la solution xboxdrv avec le support de son lien et spécialement cette page :

1. Installez xboxdrv 0.8.2 depuis Ubuntu Software Center.

Installez également uinput et joydev si nécessaire. Je l'ai fait de cette façon sudo modprobe uinput+sudo modprobe joydev

2. Besoin de connaître l' événement de la manette de jeu:

Lancez udevadm monitor --udevpuis 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 de jeu est / dev / input / event8

3. Affichez les noms de toutes les touches, axes, boutons de la manette de jeu.

L'idée est de lancer xboxdrvet 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: entrez la description de l'image ici

4. Définissez le fichier de configuration

Créez un fichier xboxdrv-mouse.ini pour définir l'axe XY et le bouton gauche et droit de la souris.
Ici, je règle les boutons de la manette de jeu 2pour le bouton gauche de la souris et 3pour 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 de 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éez une règle udev .

CONCLUSION

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

Boris
la source
cela s'applique-t-il uniquement aux contrôleurs XBOX?
Gman Smith
@gmansmith no Je l'ai utilisé pour la manette de jeu Logitec
Boris
4

Non testé sur Ubuntu, mais cette recette simple fonctionne sur Debian Jessie (avec ma manette de jeu USB classique iBuffalo ):

  1. Installez le bon module xorg:

$ sudo apt install xserver-xorg-input-joystick

  1. Redémarrez votre gestionnaire d'affichage (ou redémarrez)
Jocelyn delalande
la source
Cela a bien fonctionné sur Raspbian Buster - Raspberry Pi 3 B +. La manette de jeu 8bitdo en mode compatible Xbox 360 et la manette de jeu USB de style SNES générique fonctionnent bien. Je vous remercie.
pense logiquement
3

xboxdrv devrait pouvoir faire ce que vous voulez. Cela nécessite cependant un peu de configuration pour fonctionner avec des manettes de jeu non Xbox, quelque chose dans le sens de (consultez la page de manuel pour plus de détails, utilisez --evdev-debug pour trouver les noms 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 #
Grumbel
la source
difficile, je ne reçois que des "arguments invalides"
Boris
Un peu plus d'informations seraient utiles, à quoi ressemblait votre configuration, quelle était la sortie exacte de xboxdrv, quelle version avez-vous utilisée, etc. travail.
Grumbel
merci Grumbel! en essayant de ne pas être paresseux, j'ai lu le doc et j'ai finalement mis ma config xboxdrv, j'ai détaillé comment dans ma réponse
Boris
2

Idem pour une manette de jeu 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 configurer cela pour jouer à des jeux de tir à la première personne, car je n'ai pas l'habitude de jouer avec la souris et le clavier. Cependant la plupart des jeux sur GNU / Linux ne supportent pas très bien la manette de jeu. J'ai essayé de le faire comme le mode de manette avancé sur le célèbre N64 Game 007 - GoldenEye.

De cette façon, vous pouvez également utiliser la manette de jeu pour remplacer votre souris.

Mes choix

  • émuler la souris sur le stick principal
  • les boutons jaunes C (x2 y2) sont définis sur les touches du clavier HAUT, BAS et les touches sur un keayboard azerty pour le déplacement latéral (Q et D; changez la lettre pour la disposition de votre 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 pouvez vouloir changer le bouton R en KEY_SPACE pour sauter, selon le jeu auquel vous jouez.
  • A et B sont sur la molette de la souris, vous pouvez donc facilement changer vos armes.
  • le bouton L (lb) n'est pas réglé

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

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

ttoine
la source
1

J'ai essayé le xboxdrv et cela a fonctionné mais il n'a jamais été 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 vraiment simple (bien que l'interface graphique soit plutôt basique), en quelques clics j'ai pu:

  • configurer mon pad (F710 Wireless) comme une souris - il suffit d'attribuer les bons boutons / sticks à la fonction souhaitée dans un seul ensemble;
  • obtenir la touche centrale "Logitech logo" pour basculer entre le fonctionnement de la souris et du pad - J'ai simplement le deuxième jeu où aucune touche n'est assignée et la touche centrale bascule entre ces deux modes, donc je peux lancer le jeu en utilisant le "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 le fichier de configuration parce que le curseur dérivait lentement tout le temps dans une direction, ici tout va bien.

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 qui ne correspond pas bien au schéma de menu global d'Ubuntu.

user126406
la source
Merci pour cela. AntiMicro est assez sympa. J'ai pu obtenir mon ancien Sixaxis (c'est-à-dire: Dualshock 3 moins le grondement) en envoyant à la fois des événements de clavier et de souris. La configuration est assez simple, et d'après ce que j'ai vu, le développeur est très réactif aux rapports de bogues.
Laurence Gonsalves