J'ai eu du mal avec cela au cours du week-end et j'ai besoin de remapper les boutons de ma souris.
J'ai 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 parce que je suis maladroit et finis généralement par faire défiler la fenêtre dans laquelle je suis lorsque j'essaie de cliquer sur la roue. Je voulais donc remapper automatiquement le bouton du haut (# 9 dans ce cas) sur le bouton du milieu (# 2). Je voulais également mapper le bouton latéral inférieur (# 8) afin qu'il exécute un double-clic sur le 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.
Vous devrez xinput
installer pour cette tâche. Cela peut être fait entièrement dans votre .xsessionrc
dossier. Tout d'abord, utilisez xinput
pour découvrir le nom 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:
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ Logitech USB Laser Mouse id=11 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
Ma souris s'appelle Logitech USB Laser Mouse
et s'affiche comme id=11
. Votre souris aura un nom différent; comprendre que cela est laissé comme un exercice pour le lecteur.
Bien que vous connaissiez toujours l'ID du périphérique dans cette session, découvrez combien de boutons le gestionnaire d'entrée pense que votre souris possède, en utilisant . Cela peut être différent du nombre de boutons qui apparaît sur l'appareil.xinput list
deviceID
Logitech USB Laser Mouse id=11 [slave pointer (2)]
Reporting 7 classes:
Class originated from: 11. Type: XIButtonClass
Buttons supported: 16
Button labels: "Button Left" "Button Middle" "Button Right" "Button Wheel Up" "Button Wheel Down" "Button Horiz Wheel Left" "Button Horiz Wheel Right" "Button Side" "Button Extra" "Button Forward" "Button Back" "Button Task" "Button Unknown" "Button Unknown" "Button Unknown" "Button Unknown"
Avec ma souris, il n'y a que 9 boutons physiques évidents, mais en xinput
rapporte 16.
Compte tenu de la nature de l'USB, cet ID peut changer chaque fois que vous redémarrez, il ne suffit donc pas de scripter quelque chose qui est statiquement associé à un ID que vous découvrez une fois. Vous devrez analyser dynamiquement cela au démarrage et exécuter votre re-mappage en fonction de l'ID actuel.
Maintenant que vous connaissez son nom, vous pouvez utiliser xinput test
pour déterminer la clé à remapper. Appuyez sur les boutons de la souris que vous souhaitez mapper depuis 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, central et droit d'une souris à 3 boutons. Une nouvelle cartographie commune les inverse pour rendre la souris gaucher. )
button press 2
button release 2
button press 9
button release 9
Dans ce cas, j'ai trouvé que je voulais mapper le bouton # 9 (côté, haut) au bouton # 2 (milieu).
Maintenant que vous savez comment s'appelle votre souris et quels boutons vous souhaitez modifier, vous pouvez écrire un ~/.xsessionrc
script qui invoque xinput
pour exécuter le remappage des boutons au démarrage. Voici mon script complet.
# Map button 9 (top side button) to button 2 (middle button)
my_mouse_id=$(xinput | grep "Logitech USB Laser Mouse" | 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 ici une variable de session temporaire égale à l'ID de la souris tel que rapporté par xinput
. Cela se fait grep
en recherchant le nom connu de la souris dans le rapport xinput
, puis en utilisant sed
pour extraire le numéro d'identification de ce id=xxx
jeton dans le rapport. Cette valeur est ensuite utilisée dans une xinput set-button-map
directive, qui exécute le remappage. Dans l'exemple ci-dessus, le seul changement est que le bouton n ° 9 est en cours de mappage sur le bouton n ° 2. Tous les autres restent à leur réglage par défaut.
Mise à jour: Comme le souligne @Lokasenna 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 l' grep
utilisation -m 1
.
Voir aussi cette réponse .
Vous aurez besoin de xinput
, xbindkeys
et xautomation
(y compris xte
) installé pour cette tâche.
Utilisez xinput list
et xinput test
pour découvrir l'ID de l'appareil de votre souris et le numéro du bouton que vous souhaitez attribuer. Dans mon cas, je voulais mapper le bouton latéral inférieur (# 8) à un double-clic sur le bouton gauche (# 1).
Créez ou modifiez ~/.xbindkeysrc
. Le format de ce fichier est une série de lignes apparié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 xte
composant 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 associe une séquence de deux clics de souris sur le bouton n ° 1 à la libération du bouton n ° 8. (En théorie, je suppose que vous pouvez 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.)
Pour les utilisateurs avec plusieurs souris connectées à votre système, vous devez également transmettre l'ID de l'appareil. Cela peut ne pas s'appliquer à tous les utilisateurs et a été découvert sur Ubuntu 16.04 avec Unity.
xinput list
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ Kensington Kensington Expert Mouse id=9 [slave pointer (2)]
⎜ ↳ SynPS/2 Synaptics TouchPad id=13 [slave pointer (2)]
⎜ ↳ TPPS/2 IBM TrackPoint id=14 [slave pointer (2)]
Modifiez ensuite le fichier .xbindkeysrc en référençant la valeur id = à partir de la sortie de la commande (id = 9 dans cet exemple):
"/usr/bin/xte -i 9 'mouseclick 1' 'mouseclick 1' &"
b:8 + Release
sed 's/^.*id=\([0-9]*\)[ \t].*$/\1/'
awk
déclaration par votresed
déclaration dans mes exemples. Merci pour l'amélioration!xinput set-button-map "Logitech Trackball" 1 3 3
xinput
montre ma souris deux fois, comme ceci: ↳ USB OPTICAL MOUSE id = 12 [pointeur esclave (2)] ↳ USB OPTICAL MOUSE id = 13 [pointeur esclave (2)] Seul l'ID 13 capturera les commandes avecxinput test
. Le script attrapera toujours le premier ID. Mais pourquoi est-ce deux fois de toute façon? Les deux disparaissent lorsque je déconnecte cette souris et réapparaissent lorsqu'ils sont connectés.Les étapes courtes pour cela sont:
Il existe un utilitaire appelé
xinput
.xinput list
ouxinput
affichera simplement tous les périphériques d'entrée X et leurs identifiants. Vous trouverez ici l'ID de la souris que vous souhaitez remapper.Je vais utiliser mon ID comme exemple, à partir de ma configuration, qui est 21, puis
xinput --get-button-map 21
afficheraiMaintenant, si vous voulez, par exemple, permuter les boutons gauche et droit, vous exécutez simplement
Nous y voilà, le remappage est terminé.
Pour l'exécuter au démarrage, mettez-le dans un fichier:
lui donner la permission exécutable
Enfin, ajoutez ceci à Statrtup Application manuellement depuis l'interface graphique ou, si vous le souhaitez depuis CLI, mettez le texte ci-dessous (changez les chemins vers le vôtre) dans un fichier dans votre
~/.config/autostart
, voici le mien (less .config/autostart/leftmouseremap.sh.desktop
):Gardez à l'esprit qu'avec KDE, le chemin serait le même
~/.kde/Autosart
, pour d'autres gestionnaires de bureau, cela pourrait être légèrement différent. Alternativement, le démarrage peut être exécuté avec une approche générale en utilisant/etc/rc.local
.la source
Lorsque vous utilisez la grande réponse de zerobandwidth , certains appareils, tels que MX Ergo de Logitech, apparaissent à la fois comme un pointeur et un périphérique de clavier :
Par conséquent,
grep "Logitech MX Ergo"
finit par renvoyer deux valeurs. Ce dernier finit par être inclus comme premier élément dans la chaîne de mappage et visse tous les boutons de votre souris.Le correctif est facile - utilisez simplement l'
grep
argument de nombre maximal de-m 1
:la source
J'ai pu changer le mappage du bouton central de ma souris Logitech sur `` Retour '' en utilisant la reconnaissance de gestes Easystroke que j'ai téléchargé à partir du Centre logiciel Ubuntu. Modifier: Dans l'application, vous sélectionnez Ajouter une action, Nommez-la, sélectionnez le type de clé, cliquez sur Détails et appuyez sur Entrée, appuyez sur Enregistrer coup et, pendant l'invite, appuyez sur le bouton du milieu.
la source
xinput
des boutons qui n'apparaissent pas lors de l'utilisationxinput list <devID>
.Avant le 12.04, il y avait un outil graphique simple appelé "btnx" dans le référentiel standard, qui était ajouté en tant que "Propriétés des boutons" dans la configuration du système. Malheureusement, il a cependant été abandonné. Un PPA "non approuvé" actuellement maintenu pour les 14.04, 16.04 et 18.04 est ici: https://launchpad.net/~oliverstar/+archive/ubuntu/ppa (trouvé sur https://launchpad.net/ubuntu/xenial/+source / btnx )
Il ne s'intégrera pas avec les paramètres système mais fonctionne très bien sur mon ordinateur portable avec une souris à 5 boutons bon marché. Il peut aussi remapper sur les touches et les commandes et la configuration est beaucoup plus simple qu'avec toute autre méthode!
la source
J'ai HP elitebook 2570p, Ubuntu 18.04.2. Ici, j'ai un trackpoint qui est inutile pour moi et voici 2 boutons de trackpoint inutiles sous l'espace
Je n'utilise pas ces touches car je les ai sous le pavé tactile. Je voudrais remapper ces boutons à gauche = back_button (Alt_L + Left), celui de droite = middle_mouse_button. Le trackpoint dans "xinput" est id = 11 et le bouton gauche est le numéro 1, la droite est 3.
Quelqu'un pourrait-il m'écrire le bon code à copier sur le terminal? J'ai combiné avec xbindkeysrc mais qui définit n'importe quelle action sur les deux boutons (trackpoint et touchpad)
la source