Résumé de la question: Je souhaite qu'un de mes boutons de souris soit enregistré comme bouton Windows gauche Super_Lpar X11.
Dans mon gestionnaire de fenêtres, je peux déplacer des fenêtres en maintenant le "bouton gauche de Windows" (Left Super) et en faisant glisser une fenêtre avec le bouton gauche de la souris. Je veux pouvoir le faire sans toucher au clavier, donc je veux mapper la touche Super gauche au bouton de la souris 11, de cette façon je peux maintenir le bouton 11 et cliquer + faire glisser les fenêtres.
La solution la plus évidente consiste à utiliser xbindkeys et xte comme ceci ( .xbindkeysrc
):
"xte 'keydown Super_L'"
b:11
"xte 'keyup Super_L'"
b:11 + release
Cela fonctionne comme ceci:
- Lorsque j'appuie sur le bouton de la souris 11, Super_Lest également enfoncé
- Lorsque je relâche le bouton de la souris 11, Super_Lest également libéré
Mais il y a un problème: je ne peux pas déplacer les fenêtres en utilisant Super_L+ Mouse1si je maintiens également un autre bouton de la souris, comme le bouton de la souris 11. En utilisant la solution ci-dessus, le bouton de la souris 11 est toujours enregistré comme pressé et relâché, et donc aucun des les opérations du gestionnaire de fenêtres fonctionnent.
J'ai essayé ceci en utilisant à la fois Cinnamon et Awesome WM, et absolument aucune des Super_Lcombinaisons de clavier ne fonctionne pendant que le bouton 10 ou 11 de la souris est maintenu enfoncé.
Un hack de qualité inférieure
Je suis actuellement en train de contourner ce problème en provoquant un clic de la souris sur le Super_Lbouton pendant un certain temps. De cette façon, je peux cliquer sur le bouton de la souris, puis faire glisser des éléments pendant une brève période après:
"xte 'keydown Super_L' 'usleep 250000' 'keyup Super_L'"
b:11
Une autre tentative
Comme suggéré par totti, j'ai essayé cette xbindkeys
configuration:
"xte 'mouseup 10' 'keydown Super_L'"
b:10
"xte 'keyup Super_L'"
b:10 + Release
Ça ne marche pas. Il semble que la Super_Ltouche soit maintenue enfoncée, car dès que je relâche le bouton 10, elle reste enfoncée pour toujours (jusqu'à ce que j'appuie à Super_Lnouveau sur la touche du clavier) mais le bouton de la souris est toujours en cours d'enregistrement, car je ne peux pas cliquer et faire glisser les fenêtres . Je ne pense pas que je vais pouvoir faire ce travail en utilisant xbindkeys
et xte
.
Réponses:
Un post askubuntu contient une réponse que je résumerai ci-dessous.
Le problème est que xbindkeys saisit la souris entière, rendant le mappage des modificateurs + clics de souris incertain. La réponse utilise uinput via un script python-uinput pour surveiller
/dev/my-mouse
le clic du bouton du pouce et envoyer la Ctrlclé au clavier virtuel. Voici les étapes détaillées:1. Créer des règles udev
Pour la souris, limez
/etc/udev/rules.d/93-mxmouse.conf.rules
:Udev recherchera les périphériques du noyau avec des noms comme event5. Le SYMLINK sert à trouver la souris
/dev/my_mx_mouse
, lisible par le groupemxgrabber
.Pour trouver des informations sur le matériel, exécutez quelque chose comme:
Pour uinput, fichier
/etc/udev/rules.d/94-mxkey.rules
:Débranchez et branchez votre souris, ou forcez udev à déclencher les règles avec
udevadm trigger
.2. Activez le module UINPUT
Et dans
/etc/modules-load.d/uinput.conf
:3. Créer un nouveau groupe
4. Script Python
Installez
python-uinput library
etpython-evdev library
.Le script ci-dessous nécessite d'identifier le code événementiel du bouton:
5. Finition
Rendez le fichier python exécutable et assurez-vous qu'il est chargé au démarrage.
la source
F13
,F14
etF15
, et désactiver les fonctions de la souris en utilisantxinput
. Ensuite, je peux simplement réaffecter ces clés à tout ce dont j'ai besoin en utilisant un simplexmodmap
. L'idée principale est rédigée dans un sens (il y a des valeurs codées en dur et je ne restaure pas laxinput
fonction de la souris par la suite), je ferai un blog à ce sujet avec la version finale du script (et partagerai le lien ici quand ce sera fait. Merci vous pour votre aide! ♥ ♥Comme vous pouvez exécuter le script sur un clic de souris, vous pouvez utiliser l'astuce suivante.
1. Appuyez sur le bouton 11 pour maintenir la super touche . (Le bouton 11 déclenche un script)
2. Déplacez les fenêtres à l'aide des autres boutons de la souris
3. Appuyez à nouveau sur le bouton 11 pour relâcher la super touche
script
Utilisez
xdotool
pour maintenir la super toucheAu premier clic sur le bouton, créez un fichier temporaire et maintenez la touche. Au prochain clic, supprimez le fichier tmp et relâchez la clé,
mise à jour
Selon la page d'aide d'ubuntu (comment faire de nombreux boutons de souris), vous
imwheel
pouvez remapper une clé.la source
+ Mod4
ma configuration xbindkeys pour tenir compte de la super clé maintenue enfoncée. La solution de contournement que vous proposez est meilleure que la mienne, et j'y passe :-) Mais cela ne répond toujours pas à la question.Suggestion de débogage: j'essaierais de surveiller le
/dev/input/eventX
fichier pour voir quels événements sont générés lorsque vous appuyez et relâchez ce bouton, en particulier en combinaison avecBTN_LEFT
. Voici un exemple de code pour vous aider à démarrer. Vous devrez évidemment le modifier pour enregistrer tous les événements, pas seulement les appuis sur les touches.Vous pouvez également vouloir vérifier la
xev
sortie, si vous ne l'avez pas déjà fait. L'analyse des deux journaux devrait révéler le problème exact que vous rencontrez.Il est probable que votre souris génère des événements de relâchement de bouton supplémentaires lorsque plusieurs boutons sont enfoncés. Dans ce cas, vos options seraient d'utiliser des solutions de contournement de liaison de clés ou de modifier la
xf86-input-evdev
bibliothèque pour filtrer les événements indésirables (ou simuler ceux qui manquent). J'ai fait quelque chose de similaire il y a quelque temps pour un écran tactile qui générait des événements de "clic" lorsque j'essayais de faire glisser et déposer. L'idée était de filtrer les événements de «libération» qui arrivaient presque simultanément (dans une petite fenêtre de temps) avec des événements de «clic». Si ma supposition est correcte, vous devrez essentiellement implémenter quelque chose de similaire.la source
J'ai compris cela plus tôt dans la journée avec d'autres touches de modification. Le problème est que vous devez inclure le modificateur dans la combinaison de boutons de la version. En supposant que votre clé Super est mappée sur Mod4 (qui devrait être la valeur par défaut, afaik):
EDIT: Je viens de réaliser que cela ne répond pas complètement à votre question car vous ne pourrez toujours pas utiliser LMB tout en maintenant b: 11
la source