web-dev-qa-db-fra.com

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

J'ai eu du mal avec cela au cours du week-end et j'ai besoin de remapper les boutons de ma souris.

30
zerobandwidth

J'ai une souris Logitech avec 9 boutons et appuyer sur le "bouton du milieu" (n ° 2) implique de cliquer sur la molette de défilement. Je n'aime pas cela parce que je suis maladroit et finit généralement par 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 supérieur (n ° 9 dans ce cas) sur le bouton du milieu (n ° 2). Je voulais aussi mapper le bouton du bas (n ° 8) pour qu'il exécute un double-clic sur le bouton de gauche (n ° 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.

Mappage des boutons de la souris sur d'autres boutons de la souris

Vous aurez besoin de xinput pour cette tâche. Cela peut être fait entièrement dans votre fichier .xsessionrc. Commencez par utiliser xinput pour découvrir le nom attribué à votre souris, qui est ensuite corrélé à un ID de périphérique d'entrée. Vous trouverez ci-dessous 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 est représentée par id=11. Votre souris aura un nom différent. comprendre que cela est laissé comme un exercice pour le lecteur.

Tandis que vous connaissez toujours l’ID du périphérique dans cette session , déterminez le nombre de boutons que le gestionnaire d’entrée pense que votre souris possède, en utilisant xinput listdeviceID. Ce nombre peut être différent du nombre de boutons apparaissant sur le périphérique.

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’ya que 9 boutons physiques évidents, mais xinput en signale 16.

Étant donné la nature de l'USB, cet ID peut changer à chaque redémarrage. Il ne suffit donc pas de scripter quelque chose qui est lié de manière statique à un ID que vous avez découvert une fois. Vous devrez analyser dynamiquement cette information au démarrage et exécuter votre nouvelle cartographie 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 de et vers, afin d’obtenir leurs indices. (Pour référence, 1, 2 et 3 "toujours" (c'est-à-dire, généralement) font référence 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 n ° 9 (côté haut) sur le bouton n ° 2 (milieu).

Maintenant que vous savez comment s'appelle votre souris et quels boutons vous souhaitez modifier, vous pouvez écrire un script ~/.xsessionrc qui appelle xinput pour exécuter le remappage des boutons au démarrage. Ci-dessous, 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. Ceci est fait en greping pour le nom de souris connu dans le rapport de xinput, puis en utilisant sed pour extraire le numéro d'identification 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 en cours de nouvelle correspondance avec le bouton n ° 2. Tous les autres restent à leur réglage par défaut.

Mise à jour: Comme @Lokasenna le souligne ci-dessous , si votre appareil se signale à la fois comme souris et clavier, vous devrez peut-être limiter le nombre de résultats de grep à l'aide de -m 1.

Mappage des boutons de la souris sur des fonctions arbitraires

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 périphérique de votre souris et le numéro du bouton que vous souhaitez attribuer. Dans mon cas, je voulais mapper le bouton du bas (n ° 8) sur un double-clic sur le bouton de gauche (n ° 1).

Créez ou éditez ~/.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 allons utiliser 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 quand 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 avec la libération du bouton n ° 8. (En théorie, je suppose que vous pourriez mapper toute 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 16.04 Ubuntu

Pour les utilisateurs ayant plusieurs souris connectées à votre système, vous devez également indiquer 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

⎡ 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
47
zerobandwidth

Les étapes courtes pour cela sont:

Il existe un utilitaire appelé xinput. xinput list ou simplement xinput affichera tous les périphériques d'entrée X et leurs ID. Ici vous trouvez l'ID de la souris que vous voulez remapper.

Je vais utiliser mon identifiant comme exemple, à partir de ma configuration, qui est 21, alors xinput --get-button-map 21 sera affiché

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

Maintenant, si vous voulez, par exemple, échanger les boutons gauche et droit, vous exécutez simplement

xinput --set-button-map 21 3 2 1

Nous y sommes, le remappage est terminé.

Pour le lancer au démarrage, placez-le dans un fichier:

echo "xinput --set-button-map 21 3 2 1" > leftmouseremap.sh

lui donner la permission exécutable

chmod +x leftmouseremap.sh 

Enfin, ajoutez ceci à Statrtup Application manuellement à partir de l'interface graphique ou, si vous le souhaitez à partir de la CLI, mettez le texte ci-dessous (changez les chemins d'accès) 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 qu'avec KDE le chemin serait comme ~/.kde/Autosart, pour d'autres gestionnaires de bureau, cela pourrait être très différent. Alternativement, le démarrage peut être exécuté avec une approche générale en utilisant /etc/rc.local.

5
Ruslan Gerasimov

Lors de l'utilisation de excellente réponse de zerobandwidth , certains périphériques, tels que MX Ergo de Logitech, s'affichent sous la forme d'un pointeur et d'un symbole clavier périphérique:

⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ Logitech MX Ergo                          id=10   [slave  pointer  (2)]
⎜   ↳ SynPS/2 Synaptics TouchPad                id=14   [slave  pointer  (2)]
⎣ Virtual core keyboard                         id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ Power Button                              id=6    [slave  keyboard (3)]
    ...
    ↳ Logitech MX Ergo                          id=15   [slave  keyboard (3)]

Par conséquent, grep "Logitech MX Ergo" renvoie deux valeurs. Ce dernier finit par être inclus en tant que premier élément de la chaîne de mappage et visse tous les boutons de votre souris.

Le correctif est simple: utilisez simplement l'argument de nombre maximal 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
3
Lokasenna

Avant 12.04, il existait dans le référentiel standard un outil graphique simple appelé "btnx", qui était ajouté en tant que "Propriétés du bouton" dans la configuration du système. Malheureusement, il a été abandonné. Un PPA "non approuvé" actuellement maintenu pour les versions 14.04, 16.04 et 18.04 est disponible: https://launchpad.net/~oliverstar/+archive/ubuntu/ppa (trouvé à https://launchpad.net/ubuntu/xenial/+source/btnx )

Il ne s'intégrera pas avec les paramètres système mais fonctionne assez bien sur mon ordinateur portable avec une souris à 5 boutons bon marché. Il peut aussi être transformé en frappes au clavier et en commandes et la configuration est beaucoup plus simple qu'avec toute autre méthode!

1
w-sky

J'ai été en mesure de modifier le mappage du bouton central de la souris Logitech sur "Retour" à l'aide de Easystroke Gesture Recognition, que j'ai téléchargé à partir du Centre de logiciel Ubuntu. Modifier: dans l'application, vous devez sélectionner Ajouter une action, le nommer, sélectionner le type de clé, cliquer sur Détails et appuyer sur Entrée, appuyer sur Enregistrer le tracé et, pendant l'invite, appuyer sur le bouton du milieu.

1
atr15