web-dev-qa-db-fra.com

Comment lier les boutons de la souris aux clés?

J'ai un Logitech MX400 Laser Mouse qui a 5 boutons + 4 pour le défilement vertical/horizontal. Je voudrais le mettre en place afin qu'au lieu de défilement horizontal en appuyant à droite sur la molette va envoyer Ctrl+Tab et à gauche enverra Ctrl+Shift+Tab, ce qui me permettra de parcourir les onglets dans les navigateurs.

De plus, ce serait bien si je pouvais remapper le bouton du milieu sur l'un des boutons latéraux, car il est très difficile d'appuyer dessus.

Un autre avantage serait que je puisse écrire un script qui me permette de définir quels boutons font quoi en fonction de la fenêtre active.

J'ai essayé d'utiliser xmodmap mais je ne voyais que comment réorganiser les boutons, mais pas pour qu'ils envoient des signaux de touche.

Merci d'avance.


Carte de boutons (en utilisant xev):

Left        1
Middle      2
Right       3
ScrollUp    4
ScrollDown  5
ScrollLeft  6
ScrollRight 7
Backward    8
Forward     9
19
Callum Rogers

Les xbindkeys et xte peuvent vous aider.

Par exemple, mon fichier .xbindkeysrc ressemble à ceci:

# close the window under the mouse cursor
"xte 'mouseclick 1' && xte 'keydown Alt_L' 'key F4' 'keyup Alt_L'"
  b:8+Release

# double click
"xte 'mouseclick 1' 'mouseclick 1'"
  b:9
17
lukasz

Merci à tous pour la solution. Voici un guide plus infaillible/combiné (réalisé sur Xubuntu 18.04).

  1. Ouvrez un terminal (comme xterm/terminal/terminator), devenez root (Sudo su -) ou utilisez Sudo devant la commande:

    apt install xbindkeys xautomation
    
  2. Vérifiez le mappage des boutons avec xevname__. Pour cela, vous n'avez pas besoin du droit d'accès root. Quittez la session racine (avec exitname__) ou ouvrez un autre terminal en tant qu'utilisateur.

    xev | grep button
    
  3. Une petite fenêtre apparaîtra. Vous devez déplacer la souris dans cette fenêtre et appuyer sur le bouton que vous souhaitez remapper. Un exemple de sortie dans le terminal sera:

    state 0x0, button 8, same_screen YES
    

    C’est le deuxième bouton latéral de ma souris que je veux utiliser comme PAGE_DOWN.

    state 0x0, button 9, same_screen YES
    

    C’est le premier bouton latéral (oui, l’ordre est inversé) que je souhaite utiliser comme PAGE_UP.

  4. Lorsque vous avez tous les boutons que vous souhaitez remapper, vous pouvez fermer la petite fenêtre xev. Ouvrez votre éditeur préféré (gedit/vi/nano par exemple) et éditez le fichier de configuration.

    vi .xbindkeysrc
    
  5. Si vous avez déjà du contenu dans le fichier, regardez s'il y a déjà une liaison comme celle-ci (peu probable, pas par défaut) et ajoutez à la fin.

    #Pagedown press
    "xte 'keydown Next'"
    b:8
    
    #Pagedown release
    "xte 'keyup Next'"
    b:8 + Release
    
    #Pagedup press
    "xte 'keydown Prior'"
    b:9
    
    #Pageup release
    "xte 'keyup Prior'"
    b:9 + Release
    

    Remarque: vous avez besoin de deux entrées, une pour la pression du bouton et une pour le relâchement.

  6. Les boutons 8 + 9 seront associés aux touches "Next" (qui est PAGE_DOWN) et "Prior" (PAGE_UP). Si vous souhaitez mapper différentes clés, vous pouvez trouver le symbole de clé avec xev.

    xev | grep keysym
    
  7. Comme auparavant, démarrez-le dans un terminal, déplacez la souris vers la petite fenêtre et appuyez sur la touche voulue.

    state 0x0, keycode 117 (keysym 0xff56, Next), same_screen YES,
    
  8. Sauver et tuer xbindings.

    killall xbindkeys ; xbindkeys
    

Vous pouvez maintenant utiliser les boutons latéraux supplémentaires de la souris. Le paramètre sera chargé automatiquement au prochain redémarrage/connexion. Si vous modifiez les paramètres, vous n’avez besoin de la commande killall [...] ci-dessus.

4
malasa