Cette question a déjà été posée mais n'a pas été répondue correctement. Après l'autorisation avec @Seth, je le redemande. Cela me permettra de répondre et éventuellement de modifier la question beaucoup plus facilement. La question d'origine se trouve ici:
Mapper les touches Ctrl et Alt aux boutons de la souris
Problème:
Bien qu'il soit très simple de mapper n'importe quelle frappe sur un bouton de la souris xbindkeys
en conjonction avec xdotool
ou xte
il semble beaucoup plus problématique de lui mapper une touche de modification (par exemple ALT , CTRL , SHIFT, etc.).
La solution finale devrait permettre entre autres un CTRL + clic (par exemple pour sélectionner plusieurs entrées d'une liste) avec juste la souris.
Quelques approches possibles pour résoudre ce problème peuvent être trouvées ici sur Stack Exchange ainsi que sur d'autres forums liés à Linux. Mais aucun de ceux-ci ne fonctionne comme prévu car il entraîne d'autres problèmes et effets secondaires.
Remarques:
Certains des exemples ci-dessous impliquent Guile avec la syntaxe Scheme et s'appuient sur .xbindkeysrc.scm
file alors que d'autres s'appuient sur le .xbindkeysrc
fichier avec sa syntaxe respective. Je suis conscient qu'ils ne fonctionneront pas ensemble.
De plus, les extraits ci-dessous ne reposent que sur xdotool
mais je suis ouvert à des approches impliquant d'autres applications comme par xte
exemple - bien que cela semble conduire aux mêmes résultats et donc j'utilise uniquement des xdotool
actions ici.
Approche A:
Mise à jour du .xbindkeysrc
fichier avec:
"xdotool keydown ctrl"
b:8
"xdotool keyup ctrl"
release + b:8
C'est ce que j'ai essayé au départ, mais cela a pour effet secondaire que le modificateur est maintenu et ne peut pas être libéré.
Approche B:
Mise à jour du .xbindkeysrc.scm
fichier avec:
(xbindkey '("b:8") "xdotool keydown ctrl")
(xbindkey '(release "b:8") "xdotool keyup ctrl")
(xbindkey '("m:0x14" "b:8") "xdotool keydown ctrl")
(xbindkey '(release "m:0x14" "b:8") "xdotool keyup ctrl")
Trouvé à http://www.linuxforums.org/forum/hardware-peripherals/169773-solved-map-mouse-button-modifier-key.html et tente de résoudre le problème où le modificateur est conservé (comme décrit à l'approche une).
Bien qu'il corrige qu'il ne fonctionne que partiellement car il n'est pas possible d'effectuer d'autres clics de souris lorsque vous appuyez sur le bouton du pouce.
Approche C:
Mise à jour du .xbindkeysrc
fichier avec:
"xdotool keydown ctrl"
b:8
"xdotool keyup ctrl"
release + control + b:8
Essayé par OP de la question liée ici à askubuntu. Beaucoup plus simple et plus solide car il n'implique pas d'états modificateurs. Néanmoins, le problème persiste, c'est-à-dire qu'un clic CTRL + n'est pas possible.
Il semble que ce xbindkeys
soit le problème ici car il reconnaît le clic mais ne l'exécute pas. Cela peut être testé en utilisant xev | grep button
et xbindkeys -v
:
Un clic de souris normal enregistré par xev
devrait ressembler à:
state 0x10, button 1, same_screen YES
state 0x110, button 1, same_screen YES
Ainsi que pour le bouton du pouce:
state 0x10, button 8, same_screen YES
state 0x10, button 8, same_screen YES
Mais lorsque la xbindkeys
configuration ci-dessus est activée, elle n'enregistre rien. Bien que cela ait du sens pour le bouton du pouce car il est mappé sur CTRL et n'est donc plus un bouton de souris, il est étrange que le bouton 1 ne soit pas également enregistré. C'est probablement parce xbindkeys
qu'il ne l'exécute pas mais se le reconnaît lui-même:
Button press !
e.xbutton.button=8
e.xbutton.state=16
"xdotool keydown ctrl"
m:0x0 + b:8 (mouse)
got screen 0 for window 16d
Start program with fork+exec call
Button press !
e.xbutton.button=1
e.xbutton.state=20
Button release !
e.xbutton.button=1
e.xbutton.state=276
Button release !
e.xbutton.button=8
e.xbutton.state=20
"xdotool keyup ctrl"
Release + m:0x4 + b:8 (mouse)
got screen 0 for window 16d
Start program with fork+exec call
Approche D:
Mise à jour du .xbindkeysrc
fichier avec:
"xdotool keydown ctrl"
b:8
"xdotool keyup ctrl"
release + control + b:8
"xdotool click 1"
b:1
Tout simplement trop simple ... mais conduit à une boucle infinie de clics.
MISE À JOUR:
En attendant, j'ai acheté un Logitech G502 et j'ai remarqué qu'une fois configuré via le pilote sous Windows, non seulement le profil lui-même est stocké dans la mémoire de l'appareil, mais la pression réelle est effectuée par la souris. Cela a en fait résolu mon problème sous Linux!
La seule autre souris dont je me souvienne qui était capable de le faire était la Razer Copperhead à l'époque. Mais je suppose qu'il existe aujourd'hui d'autres souris qui peuvent faire de même.