2 votes

Cartographie des boutons latéraux de souris mmo supplémentaires

J'ai récemment acheté la souris Utechsmart Venus : http://www.utechsmart.com/product/show/id/477/US-D16400-GM

Je n'ai pas été en mesure de lier ces boutons latéraux (et le "bouton de tir rapide près du bouton gauche de la souris) à différentes touches sans changer les touches sur lesquelles les boutons latéraux et de tir rapide pointent.

La raison en est que je n'ai pas réussi à faire en sorte que xev reconnaisse les boutons de tir latéral et rapide comme un événement à part entière. Au lieu de cela, lorsque j'appuie sur un bouton latéral ou un bouton de tir rapide, le testeur d'événements de xev signale immédiatement la liaison à laquelle le bouton est associé.

C'est-à-dire que j'appuie sur le bouton latéral "1", le mappeur d'événements rapporte :

 KeyPress event, serial 74, . . .
 KeyRelease event, serial 74 . . .

Lorsque j'appuie sur le bouton gauche de la souris, le mappeur signale :

 ButtonPress event, serial 37, . . .
 Button Release event, serial 37, . . . 

Il est évident que je ne peux pas mapper le bouton à partir de la souris si celle-ci ne me dit pas quelle est l'"adresse" du bouton, comme dans ces deux messages connexes :

Comment configurer les boutons supplémentaires de la souris Logitech ?

Les raccourcis de la souris sont confondus avec les touches du clavier dans Kubuntu

Quelqu'un a-t-il des conseils pour essayer de trouver ce que sont ces boutons sur la souris ?

De toute évidence, la souris fonctionne, mais elle n'est pas associée aux boutons comme je le souhaiterais. Il me semble donc qu'il y a doit Il existe une solution à ce problème, et je serais plus qu'heureux de m'y plonger en profondeur pour le résoudre. J'ai regardé la documentation sur les pilotes Xorg et evdev, mais je ne suis même pas certain que ce soit la bonne direction.

Je ne cherche pas nécessairement à ce que quelqu'un résolve ce problème directement pour moi. Mais j'apprécierais grandement que l'on m'aide à trouver des idées sur la façon de résoudre ce problème.

Merci de votre patience !

UPDATE :

J'ai trouvé un message sur les forums d'Archlinux à propos de la Razer Naga qui est une souris très similaire. Cela semble prometteur : https://bbs.archlinux.org/viewtopic.php?id=145502 . Cela m'a conduit à un problème similaire avec les télécommandes infrarouges ici : https://www.mythtv.org/wik147+853!#@#+!i/Générique_HID_%22MCE%22_Remotes#XKB_Remapping . Vous y trouverez une mine d'informations sur le sujet. Ce serait bien s'ils expliquaient mieux comment ils déterminent quelles sont les "clés" dans les scripts, mais après avoir lu beaucoup de matériel complémentaire, il semble que le <AE[01/12]> vient de la convention (et puisque les boutons de la souris correspondent à ces mappages de touches, cela n'a que plus de sens. . .

Cependant, j'ai toujours un petit problème. Je n'ai pas encore créé de shebang, mais j'ai simplement essayé d'exécuter la commande à la main.

Tout d'abord, j'ai créé le fichier de symboles /usr/share/X11/xkb/symbols/custom (je ne sais pas vraiment pourquoi ils utilisent le répertoire tmp) et j'ai inclus les éléments suivants :

xkb_symbols "venus" {
  2     key <AE01> { [          y,          Y  ]
  3     key <AE02> { [          i,          I  ]
  4     key <AE03> { [bracketleft,  braceleft  ]
  5     key <AE04> { [bracketright, braceright ]
  6     key <AE05> { [      slash,   question  ]
  7     key <AE06> { [          j,          J  ]
  8     key <AE07> { [          k,          K  ]
  9     key <AE08> { [          l,          L  ]
 10     key <AE09> { [  semicolon,      colon  ]
 11     key <AE10> { [      comma,       less  ]
 12     key <AE11> { [      minus, underscore  ]
 13     key <AE12> { [      equal,       plus  ]
 14 };

Puis j'ai lancé xinput list qui a donné.. :

 Virtual core pointer                      id=2    [master pointer  (3)]
    Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
    USB Laser Game Mouse                      id=9    [slave  pointer  (2)]
    USB Laser Game Mouse                      id=11   [slave  pointer  (2)]
    EST Gaming keyboard                       id=13   [slave  pointer  (2)]
 Virtual core keyboard                     id=3    [master keyboard (2)]
     Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
     Power Button                              id=6    [slave  keyboard (3)]
     Power Button                              id=7    [slave  keyboard (3)]
     Sleep Button                              id=8    [slave  keyboard (3)]
     USB Laser Game Mouse                      id=10   [slave  keyboard (3)]
     EST Gaming keyboard                       id=12   [slave  keyboard (3)]
     EST Gaming keyboard                       id=14   [slave  keyboard (3)]
     C-Media Electronics Inc. USB Audio Device id=15   [slave  keyboard (3)]
     USB Laser Game Mouse                      id=16   [slave  keyboard (3)]
     EST Gaming keyboard                       id=17   [slave  keyboard (3)]

Après avoir analysé le script écrit dans les deux liens ci-dessus, j'ai déduit que ma variable $remote_id serait de 16 donc j'ai exécuté ce qui suit :

setxkbmap -device 16 -print | sed's/\(xkb_symbols.*\)"/\1+custom(venus)"/' | xkbcomp -I /usr/share/X11/xkb -i 16 -synch $DISPLAY

Je n'ai pas envoyé ma sortie dans /dev/null parce que je voulais voir ce que serait la sortie (évidemment, lorsque je ferai le script, alors je le ferai, mais j'essaie de comprendre ce que je fais pour le moment). Ma sortie était la suivante :

Warning:          Too many file names on command line
                  Compiling /usr/share/X11/xkb, writing to -, ignoring :0
syntax error: line 1 of /usr/share/X11/xkb
last scanned symbol is: 
Errors encountered in /usr/share/X11/xkb; not compiled.

Je ne sais pas vraiment où aller à partir de là. . .

2voto

Nicholas R Points 43

GRANDES NOUVELLES TOUT LE MONDE !

J'ai finalement réussi à le faire fonctionner. J'ai abandonné ce problème il y a un certain temps et j'ai simplement poursuivi mes activités. Depuis lors, j'ai appris beaucoup plus sur la programmation et l'environnement unix en général, y compris comprendre comment utiliser sed qui a été utilisé dans ce script. Pour donner une certaine perspective, je ne connaissais même pas les pages de manuel à l'époque où j'ai posé cette question. . . Inutile de dire qu'il est facile de voir quelles étaient certaines de mes erreurs à l'époque où j'ai fait ce post.

Cependant, la correction de ces erreurs n'a pas suffi à résoudre le problème. Pour une raison quelconque (que je n'arrive toujours pas à comprendre), le fait d'introduire le mappage des clés dans xkbcomp ne permet pas de compiler les modifications que je veux apporter au fichier de symboles ci-dessus.

Cependant, si j'exécute simplement :

setxkbmap -device $venus_keyboard -print | sed 's/\(xkb_symbols.*\)"/\1+venus"/' > keymap
xkbcomp keymap -i $venus_keyboard -synch $DISPLAY

Les clés se compilent très bien. Honnêtement, je ne comprends toujours pas pourquoi je ne peux pas simplement envoyer la sortie de sed dans xkbcomp, mais cela fait correspondre les touches de ma souris, tout en laissant les touches de mon clavier complètement non affectées.

J'espère que cela pourra aider quelqu'un qui rencontre le même problème que moi.

Voici l'intégralité du Shell Shell que j'ai écrit (à part le fichier des symboles, qui a été expliqué dans les posts des liens que j'ai fournis).

Si quelqu'un a une explication sur la raison pour laquelle le transfert de la sortie de sed dans xkbcomp ne fonctionne pas (ou est intéressé à essayer de m'aider à le découvrir), envoyez-moi une réponse ici. Cela me dérange toujours un peu.

#!/bin/sh

venus_keyboard=$(xinput list | sed -n 's/.*USB Laser Game Mouse[[:space:]]*id=\([0-9]*\).*keyboard.*/\1/p')
[ "$venus_keyboard" ] || exit

setxkbmap -device $venus_keyboard -print | sed 's/\(xkb_symbols.*\)"/\1+venus"/' > ~/xkb/keymap
xkbcomp ~/xkb/keymap -i $venus_keyboard -synch $DISPLAY 2>/dev/null

1voto

cosurgi Points 126

Ma femme a une souris très similaire. J'ai apporté quelques modifications à votre solution. Le fichier /usr/share/X11/xkb/symbols/venus a les contenus suivants :

xkb_symbols "venus" {
    key <AE01> { [ KP_1          , KP_1            ] };
    key <AE02> { [ KP_2          , KP_2            ] };
    key <AE03> { [ KP_3          , KP_3            ] };
    key <AE04> { [ KP_4          , KP_4            ] };
    key <AE05> { [ KP_5          , KP_5            ] };
    key <AE06> { [ KP_6          , KP_6            ] };
    key <AE07> { [ KP_7          , KP_7            ] };
    key <AE08> { [ KP_8          , KP_8            ] };
    key <AE09> { [ KP_9          , KP_9            ] };
    key <AE10> { [ F2            , F2              ] };
    key <KPAD> { [ XF86Calculator, XF86Calculator  ] };
    key <KPSU> { [ period        , period          ] };
};

Et le script ~/bin/mouse_config.sh que j'ai ajouté au démarrage de l'environnement de bureau MATE a le conent suivant :

#!/bin/sh

venus_keyboard=$(xinput list | sed -n 's/.*USB Gaming Mouse[[:space:]]*id=\([0-9]*\).*keyboard.*/\1/p')
[ "$venus_keyboard" ] || exit

setxkbmap -device $venus_keyboard -print | sed 's/\(xkb_symbols.*\)"/\1+venus"/' > ~/.venus_keymap
xkbcomp ~/.venus_keymap -i $venus_keyboard -synch $DISPLAY

vous remarquerez que j'ai dû modifier un peu le nom USB Gaming Mouse En dehors de cela, tout fonctionne parfaitement.

Elle utilise ça pour le mixeur.

Ah, mais peut-être que quelqu'un sait comment éteindre ces lumières LED sur cette souris ?

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X