J'ai eu du mal avec ça pendant le week-end et j'ai besoin de reconfigurer les boutons de ma souris.
Réponses
Trop de publicités?Je possède une souris Logitech avec 9 boutons, et appuyer sur le "bouton du milieu" (#2) implique de cliquer sur la molette de défilement. Je n'aime pas cela car je suis maladroit et j'ai tendance à faire défiler la fenêtre dans laquelle je me trouve lorsque j'essaie de cliquer sur la molette. Je voulais donc remapper automatiquement le bouton latéral supérieur (#9 dans ce cas) sur le bouton du milieu (#2). Je voulais aussi mapper le bouton latéral inférieur (#8) pour qu'il exécute un double-clic du bouton gauche (#1).
Bien que mes objectifs soient spécifiques, les solutions ci-dessous peuvent être généralisées à toute situation dans laquelle vous souhaitez remapper automatiquement les boutons de la souris au démarrage.
Mapping des boutons de la souris vers d'autres boutons de la souris
Vous aurez besoin de xinput
installé pour cette tâche. Cela peut être fait entièrement dans votre fichier .xsessionrc
. Tout d'abord, utilisez xinput
pour découvrir le nom qui est attribué à votre souris, qui est ensuite corrélé à un ID de périphérique d'entrée. Voici un exemple de sortie de mon ordinateur portable:
Pointeur principal du noyau virtuel id=2 [pointeur maître (3)]
Pointeur XTEST principal du noyau virtuel id=4 [esclave pointeur (2)]
Souris laser USB Logitech id=11 [esclave pointeur (2)]
Clavier principal du noyau virtuel id=3 [clavier maître (2)]
Clavier XTEST principal du noyau virtuel id=5 [esclave clavier (3)]
Ma souris se nomme Souris laser USB Logitech
et est affichée comme id=11
. Votre souris aura un nom différent; découvrir cela est laissé comme exercice pour le lecteur.
Alors que vous connaissez toujours l'ID du périphérique dans cette session, découvrez combien de boutons le gestionnaire d'entrée pense que votre souris a, en utilisant xinput list
deviceID
. Cela peut être différent du nombre de boutons apparent sur le périphérique.
Souris laser USB Logitech id=11 [esclave pointeur (2)]
Rapport de 7 classes:
Classe provenant de : 11. Type : XIButtonClass
Boutons pris en charge: 16
Libellés des boutons: "Bouton gauche" "Bouton du milieu" "Bouton droit" "Molette vers le haut" "Molette vers le bas" "Molette horizontale gauche" "Molette horizontale droite" "Bouton latéral" "Bouton supplémentaire" "Bouton avant" "Bouton arrière" "Tâche de bouton" "Bouton inconnu" "Bouton inconnu" "Bouton inconnu" "Bouton inconnu"
Avec ma souris, il n'y a que 9 boutons physiques évidents, mais xinput
en rapporte 16.
Étant donné la nature de l'USB, cet ID peut changer chaque fois que vous redémarrez, donc ce n'est pas suffisant de scripter quelque chose qui est statiquement lié à un ID que vous découvrez une fois. Vous devrez analyser dynamiquement ceci au démarrage et exécuter votre remappage en fonction de l'ID actuel.
Maintenant que vous connaissez son nom, vous pouvez utiliser xinput test
deviceID
pour savoir quel bouton remapper. Appuyez sur les boutons de la souris que vous souhaitez mapper de et vers, afin d'obtenir leurs indices. (Pour référence, 1, 2 et 3 "toujours" (c'est-à-dire, généralement) se réfèrent aux boutons gauche, milieu et droit d'une souris à 3 boutons. Un remappage commun inverse ceux-ci pour rendre la souris gauchère.)
pression de touche 2
relâchement de touche 2
pression de touche 9
relâchement de touche 9
Dans ce cas, j'ai constaté que je voulais mapper le bouton n°9 (côté, haut) sur le bouton n°2 (milieu).
Maintenant que vous savez comment votre souris s'appelle, et quels boutons vous voulez changer, vous pouvez écrire un script ~/.xsessionrc
qui invoque xinput
pour exécuter le remappage des boutons au démarrage. Voici mon script complet.
# Mapper le bouton 9 (bouton latéral du haut) sur le bouton 2 (bouton central)
my_mouse_id=$(xinput | grep -m 1 "Souris laser USB Logitech" | sed 's/^.*id=\([0-9]*\)[ \t].*$/\1/')
echo $my_mouse_id > ~/temp/my_mouse_id
xinput set-button-map $my_mouse_id 1 2 3 4 5 6 7 8 2 10 11 12 13 14 15 16
La première ligne définit une variable de session temporaire égale à l'ID de la souris tel que rapporté par xinput
. Cela se fait en grep
ant pour le nom connu de la souris dans le rapport de xinput
, puis en utilisant sed
pour extraire le numéro d'ID de ce jeton id=xxx
dans le rapport. Cette valeur est ensuite utilisée dans une directive xinput set-button-map
, qui exécute le remappage. Dans l'exemple ci-dessus, le seul changement est que le bouton n°9 est remappé pour imiter le bouton n°2. Tous les autres restent à leur paramétrage par défaut.
Mise à jour : Comme le souligne @Lokasenna dans le commentaire ci-dessous, si votre appareil se signale à la fois comme une souris et un clavier, vous devrez peut-être limiter le nombre de résultats de la commande grep
en utilisant -m 1
. Ceci ne posera pas de problème si la souris ne se signale pas comme les deux, donc cela a été inclus dans le script.
Mapping des boutons de la souris vers des fonctions arbitraires
Voir également cette réponse.
Vous aurez besoin de xinput
, xbindkeys
et xautomation
(y compris xte
) installés pour cette tâche.
Utilisez xinput list
et xinput test
pour découvrir l'ID de périphérique de votre souris et le numéro du bouton que vous voulez attribuer. Dans mon cas, je voulais mapper le bouton latéral inférieur (#8) sur un double-clic du bouton gauche (#1).
Créez ou modifiez ~/.xbindkeysrc
. Le format de ce fichier est une série de lignes associées. La première ligne est une commande à exécuter pour un événement ; la deuxième ligne est la description de l'événement. Nous utiliserons le composant xte
de xautomation
pour envoyer des événements directement au gestionnaire d'entrée.
Pour créer un événement de double-clic lorsqu'un bouton est relâché, j'ai ajouté ce qui suit :
"/usr/bin/xte 'mouseclick 1' 'mouseclick 1' &"
b:8 + Release
Cette configuration mappe une séquence de deux clics de souris sur le bouton n°1 sur la libération du bouton n°8. (En théorie, je suppose que vous pourriez mapper n'importe quelle commande sur un bouton de la souris, mais c'est le cas le plus courant. Voir cette réponse pour d'autres exemples pratiques.)
Mise à jour pour Ubuntu 16.04
Pour les utilisateurs avec plusieurs souris connectées à votre système, vous devez également transmettre l'ID du périphérique. Cela peut ne pas s'appliquer à tous les utilisateurs et a été découvert sur Ubuntu 16.04 avec Unity.
xinput list
Pointeur principal du noyau virtuel id=2 [pointeur maître (3)]
Pointeur XTEST principal du noyau virtuel id=4 [esclave pointeur (2)]
Kensington Kensington Expert Mouse id=9 [esclave pointeur (2)]
SynPS/2 Synaptics TouchPad id=13 [esclave pointeur (2)]
TPPS/2 IBM TrackPoint id=14 [esclave pointeur (2)]
Puis modifiez le fichier .xbindkeysrc en faisant référence à la valeur id= de la sortie de la commande (id=9 dans cet exemple) :
"/usr/bin/xte -i 9 'mouseclick 1' 'mouseclick 1' &"
b:8 + Release
Les étapes courtes pour cela sont :
Il y a un utilitaire appelé xinput
. xinput list
ou simplement xinput
affichera tous les périphériques d'entrée X et leurs identifiants. Vous trouverez ici l'identifiant de la souris que vous souhaitez remapper.
Je vais utiliser mon identifiant comme exemple, de ma configuration, qui est 21, puis xinput --get-button-map 21
affichera
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Maintenant, si vous souhaitez, par exemple, échanger les boutons gauche et droit, il vous suffit de lancer
xinput --set-button-map 21 3 2 1
Et voilà, le remappage est terminé.
Pour le lancer au démarrage, il suffit de mettre ceci dans un fichier :
echo "xinput --set-button-map 21 3 2 1" > leftmouseremap.sh
donnez-lui les autorisations d'exécution
chmod +x leftmouseremap.sh
Enfin, ajoutez ceci à l'application de démarrage manuellement via l'interface graphique ou, si vous le souhaitez en ligne de commande, mettez le texte ci-dessous (en changeant les chemins par les vôtres) dans un fichier de votre ~/.config/autostart
, voici le mien (less .config/autostart/leftmouseremap.sh.desktop
) :
[Desktop Entry]
Type=Application
Exec=/home/ruslan/leftmouseremap.sh
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name[en_US]=/home/ruslan/leftmouseremap.sh
Name=/home/ruslan/leftmouseremap.sh
Comment[en_US]=
Comment=
Gardez à l'esprit que avec KDE le chemin serait comme ~/.kde/Autosart
, pour d'autres gestionnaires de bureau cela pourrait être légèrement différent. Alternativement, le démarrage peut être fait avec une approche générale en utilisant /etc/rc.local
.
Lorsque vous utilisez la grande réponse de zerobandwidth, certains appareils, tels que le MX Ergo de Logitech, apparaissent à la fois comme un appareil de pointeur et comme un appareil de clavier :
Pointeur core virtuel id=2 [pointeur principal (3)]
Pointeur XTEST core virtuel id=4 [pointeur esclave (2)]
Logitech MX Ergo id=10 [pointeur esclave (2)]
SynPS/2 Synaptics TouchPad id=14 [pointeur esclave (2)]
Clavier core virtuel id=3 [clavier principal (2)]
Clavier XTEST core virtuel id=5 [clavier esclave (3)]
Bouton d'alimentation id=6 [clavier esclave (3)]
...
Logitech MX Ergo id=15 [clavier esclave (3)]
Par conséquent, grep "Logitech MX Ergo"
finit par renvoyer deux valeurs. Cette dernière finit par être incluse comme premier élément dans la chaîne de mappage et perturbe tous vos boutons de souris.
La solution est simple - utilisez simplement l'argument de compte maximum de grep
, -m 1
:
my_mouse_id=$(xinput | grep -m 1 "Logitech MX Ergo" | sed 's/^.*id=\([0-9]*\)[ \t].*$/\1/')
echo $my_mouse_id > ~/temp/my_mouse_id
xinput --set-button-map $my_mouse_id 1 2 3 4 5 6 7 8 2 10 11 12 13 14 15 16
J'ai pu changer la configuration du bouton du milieu de ma souris Logitech en 'Entrée' en utilisant la reconnaissance de gestes Easystroke que j'ai téléchargée depuis le Centre de logiciels Ubuntu. Édition : Dans l'application, vous devriez sélectionner Ajouter une action, la nommer, sélectionner le type de touche, cliquer sur Détails et appuyer sur Entrée, appuyer sur Enregistrer le geste, et pendant l'invite appuyer sur le bouton du milieu.
Avant la version 12.04, il y avait un outil graphique facile appelé "btnx" dans le dépôt standard, qui ajouté comme "Propriétés des boutons" dans la Configuration système. Malheureusement, il a été abandonné. Un PPA "non fiable" actuellement maintenu pour 14.04, 16.04 et 18.04 est ici : https://launchpad.net/~oliverstar/+archive/ubuntu/ppa (trouvé à https://launchpad.net/ubuntu/xenial/+source/btnx)
Il ne s'intégrera pas aux paramètres système mais fonctionne très bien sur mon ordinateur portable avec une souris bon marché à 5 boutons. Il peut également remapper sur des frappes de touches et des commandes et la configuration est beaucoup plus simple qu'avec n'importe quelle autre méthode!