web-dev-qa-db-fra.com

Liez Alt + Tab à un bouton de la souris Logitech sur Kubuntu

Remarque: ceci n'est pas un doublon de this ou this , comme je le préciserai .

J'ai une souris Logitech Proteus Core . Sous Windows 10, j'ai paramétré l'un de ses boutons (le plus petit intitulé "G9" en haut de la souris) pour afficher une liste de tâches pouvant être affichée à l'aide des touches Win + Tab. Notez que cela reste en place même si vous relâchez les touches Win et Tab, il ne disparaît que lorsque vous cliquez sur la fenêtre dans laquelle vous souhaitez aller. Le flux de travail est donc le suivant: Appuyez sur le bouton de la souris G9 et relâchez-le, cliquez sur la fenêtre que vous souhaitez.

Je veux un comportement similaire sous Kubuntu 15.04. Si je comprends bien, il n’ya aucun moyen d’afficher une liste de tâches similaire, qui reste affichée jusqu’à ce que vous cliquiez sur quelque chose, sans avoir à maintenir une touche enfoncée.

Donc, mon idée était d’émuler Alt + Tab avec ce bouton. Le flux de travail auquel je pense est le suivant: Push G9 (raccourci pour "Push alt, Push push, realease tab") => sélectionnez la fenêtre que je veux, relâchez G9 (raccourci pour "relâcher alt").

Le problème est que, autant que je sache, ce bouton G9 n’est pas lu par le système d’exploitation comme un bouton de souris normal. Si je cours:

xbindkeys -mk

Et cliquez sur le bouton G9, je reçois cette sortie:

"(Scheme function)"
m:0x40 + c:23
Mod4 + Tab
"(Scheme function)"
m:0x40 + c:133
Mod4 + Super_L

Remarque: J'exécute cette opération sur un VM à des fins de test. Faites-moi savoir si cela peut affecter les choses, même si j'en aurais besoin pour fonctionner dans ce cas également.

Si je cours:

xev | grep button

Je ne reçois aucune sortie lorsque je clique sur le bouton G9 qui m'intéresse. Si je clique sur d'autres boutons, les résultats escomptés sont les suivants:

state 0x0, button 2, same_screen YES

C'est bizarre, mais je pensais pouvoir ajouter ce que xbindkeys -mk renvoie à mon ~/.xbindkeysrc:

"xte 'keydown Alt_L' 'key Tab'"
  m:0x40 + c:23 + Release

Évidemment, même si cela fonctionnait, cela ne ferait pas ce que je veux, mais cela ne fonctionne même pas. Rien ne se passe lorsque je clique sur le bouton G9 après avoir exécuté:

xbindkeys -v -n

Ce qui donne cet avertissement:

Veuillez vérifier qu'aucun autre programme en cours d'exécution ne capture l'une des clés capturées par xbindkeys. Il semble qu'il y ait un conflit et xbindkeys ne peut pas récupérer toutes les clés définies dans son fichier de configuration.

Si je tape la commande xte dans la console, le menu de sélection de tâche alt + tab apparaît. Rien pour le bouton de souris lié cependant.

Si j'assigne le même appel xte à un autre bouton, celui qui est indiqué par la sortie xev (j'ai essayé le bouton droit de la souris), il n'est toujours pas exécuté (il semble que seul l'onglet soit exécuté, comme onglet choses dans l’éditeur de texte), mais l’avertissement a disparu et la fonction normale du bouton a également disparu:

Comment obtenir le comportement Alt+Tab que j'ai décrit en cliquant sur le bouton G9? Qu'en est-il d'un autre bouton, celui que xev détecte, comme b:3?

Remarque: cette souris enregistre la configuration effectuée à partir de son logiciel Windows en interne. Ainsi, tous mes autres boutons conservent leurs fonctions dans la machine virtuelle: précédent/suivant dans le navigateur, changer d'onglet, etc. Le logiciel Logitech autorise les enregistrements de macros dans Windows, mais il ne permet pas de spécifier différentes actions pour les événements Push/Release, autant que je sache.

S'il existe un moyen d'enregistrer la bonne macro sous Windows ou de simplifier ce que je veux réaliser sous Kubuntu, c'est-à-dire utiliser le bouton G9 pour obtenir une fonctionnalité similaire à alt + tab -, je les accepterais également. solutions.

6
IVlad

evrouter peut vous aider à le faire. Cela permettra même de libérer G9 avant de sélectionner la tâche dans la liste.

http://www.bedroomlan.org/projects/evrouter

Je l'ai construit à partir des sources et installé avec checkinstall, mais il y a quelque chose qui ressemble à un référentiel.

Crochets

Il peut être configuré dans le ~/.evrouterrc:

"Logitech Gaming Mouse G300" "/dev/input/event.*" any key/272 "Shell//home/velkan/click.sh"

"Logitech Gaming Mouse G300" "/dev/input/event.*" any key/275 "Shell//home/velkan/atab.sh"

Lancer Sudo evrouter -d /dev/input/event* et cliquer pour aider à composer ces lignes.

"Logitech Gaming Mouse G300" est le nom de ma souris.

"/dev/input/event.*" signifie que l'entrée sera interceptée quel que soit le nom du fichier de périphérique auquel la souris est liée.

any - signifie que l'événement sera accepté avec n'importe quel modificateur Alt/Ctrl/Shift.

key/272 - bouton gauche de la souris.

key/275 - bouton arrière de la souris (sur G4 pour moi).

"Shell//home/velkan/click.sh" - lancez /home/velkan/click.sh lorsque cet événement se produit.

Scripts Alt-Tab

Donc, le script /home/velkan/atab.sh (lié à G4 dans ce cas):

#!/bin/bash

mktemp /tmp/evr-alt-tab-XXXX

/usr/bin/xte 'usleep 100000' 'keydown Alt_L' 'usleep 50000' 'key Tab'

Il crée un fichier temporaire qui informera le click.sh (lié au bouton gauche) qu'il doit libérer Alt.

click.sh script:

#!/bin/bash

if [ -e /tmp/evr-alt-tab-???? ]; then
    /usr/bin/xte 'usleep 100000' 'keyup Alt_L'
    rm /tmp/evr-alt-tab-????
fi

Activer evrouter au démarrage

Je n'ai pas essayé ça sur KDE.

Lancer le script /usr/local/sbin/evrouter_launch.sh:

#!/bin/sh
/usr/local/bin/evrouter /dev/input/event* 0<&- > /dev/null

(ou il peut s'agir de /usr/bin/evrouter au lieu de /usr/local/bin/evrouter)

Config /etc/lightdm/lightdm.conf pour démarrer evrouter avec le gestionnaire de bureau:

[SeatDefaults]
autologin-user=
session-setup-script=/usr/local/sbin/evrouter_launch.sh
5
Velkan

Je l'ai fait en utilisant des idées de la réponse de Velkan. Je vais énumérer les étapes nécessaires.

  1. Tout d’abord, la macro Win+Tab que j’avais définie sur le bouton G9 de Windows interférait avec la façon dont Linux détectait la souris. Au lieu de détecter le bouton de la souris, il a simplement détecté les touches Win et Tab dans xev. Je crois que la souris est configurée en interne pour les envoyer si vous configurez le bouton en tant que "Macro multikey" dans son logiciel Windows.

    Pour résoudre ce problème, ne configurez pas le bouton pour utiliser une macro Multikey dans Windows. Réglez-le à autre chose. Je l'ai défini pour être un clic du milieu.

  2. Maintenant, xev | grep button a détecté le G9 comme étant le bouton 2.

  3. J'ai écrit ce script dans ~/alttab.sh, qui est une combinaison des scripts de Velkan:

    #!/bin/bash
    
    if [ -e /tmp/alt-tab-mouse-script-???? ]; then
       xte 'usleep 100000' 'keyup Alt_L'
       rm /tmp/alt-tab-mouse-script-????
    else
       mktemp /tmp/alt-tab-mouse-script-XXXX
       xte 'usleep 100000' 'keydown Alt_L' 'usleep 50000' 'key Tab'
    fi
    
  4. J'ai ajouté ceci dans mon ~/.xbindkeysrc. Nous avons besoin de deux lignes pour que le clic fonctionne dans les deux états: lorsque alt est inactif et quand il ne l'est pas.

    "~/alttab.sh"
      b:2 + Release 
    
    "~/alttab.sh"
      Alt + b:2
    

Cela a bien fonctionné pour moi. Le flux est le suivant: cliquez sur G9 (Poussez et relâchez), sélectionnez la fenêtre souhaitée (clic gauche ou molette de la souris), puis cliquez à nouveau sur G9 pour accéder à cette fenêtre. Vous pouvez modifier le premier if dans le fichier .sh pour envoyer également un mouseclick 1 avant la frappe au clavier, si vous voulez aller directement à la fenêtre sur laquelle vous cliquez avec le bouton G9. afficher.

J'ai également essayé de supprimer les appels usleep. Cela a fonctionné pour moi sans eux.

Le comportement ne correspond pas exactement à celui de Windows, mais je le trouve assez proche. Peut-être encore plus pratique, puisque vous pouvez faire la sélection avec le même bouton, de sorte que vous n’ayez pas à déplacer votre doigt sur un autre bouton!

3
IVlad