44 votes

Comment remapé automatiquement les boutons de ma souris au démarrage ?

J'ai eu du mal avec ça pendant le week-end et j'ai besoin de reconfigurer les boutons de ma souris.

67voto

zerobandwidth Points 1313

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 grepant 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

8voto

mqchen Points 3621

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.

7voto

Lokasenna Points 71

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

1voto

atrofsk Points 11

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.

1voto

w-sky Points 778

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!

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