Pourquoi ces commandes xte fonctionnent-elles dans le terminal, mais pas lorsqu'elles sont liées avec xbindkeys?

18

Cette xtecommande, lorsque je l'exécute dans un terminal, déclenche le mode Expo:

xte 'keydown Super_L' 'key S' 'keyup Super_L'

Cependant, lorsque je mets cela dans mon fichier .xbindkeysrc:

"xte 'keydown Super_L' 'key S' 'keyup Super_L'"
  b:11

Rien ne se passe lorsque je clique sur le bouton. La liaison suivante fait apparaître la lettre X dans ma console lorsque j'appuie sur le bouton 11:

"xte 'key X'"
  b:11

Alors pourquoi la reliure Expo ne fonctionne-t-elle pas?


Voici la sortie détaillée xbindkeys -n -vlorsque vous cliquez sur le bouton 11:

Appuyez sur le bouton!
e.xbutton.button = 11
e.xbutton.state = 16
"xte 'keydown Super_L' 'key W' 'keyup Super_L'"
    m: 0x0 + b: 11 (souris)
a obtenu l'écran 0 pour la fenêtre 2bb
Démarrer le programme avec un appel fork + exec
Libération du bouton!
e.xbutton.button = 11
e.xbutton.state = 16

Et rien ne se passe. Est-ce que cela a quelque chose à voir avec la façon dont xbindkeysla commande est exécutée? (appel fork + exec)


Tentez le numéro deux.

expo.sh:

#!/usr/bin/env bash
export DISPLAY=:0
xte 'keydown Super_L' 'key S' 'keyup Super_L'

L'exécution de ce script à partir de la ligne de commande active Expo. Liaison dans xbindkeys:

"sh ~/expo.sh"
  b:11

En cliquant sur le bouton de la souris 11:

Appuyez sur le bouton!
e.xbutton.button = 11
e.xbutton.state = 16
"sh ~ / expo.sh"
    m: 0x0 + b: 11 (souris)
a obtenu l'écran 0 pour la fenêtre 2bb
Démarrer le programme avec un appel fork + exec

Rien ne se passe!

Hubro
la source
1
Vous essayez d'appuyer sur <Super> <S>? Je sais que xbindkeys + xte peut parfois être difficile.
Seth
@Seth: Correct. Y a-t-il un moyen de contourner la sélection?
Hubro
1
Essayez 'keydown Super_L' 'keydown S' 'keyup S' 'keyup Super_L'.
Seth
@Seth: Ça n'a fait aucune différence, j'ai peur :(
Hubro
Avez-vous relancé xbindkeys après avoir effectué les modifications? Parfois, c'est nécessaire. Votre but ultime est d'ouvrir la vue d'ensemble de l'espace de travail, je suppose?
Seth

Réponses:

17

Une autre solution plus simple: au lieu d'utiliser simplement "b: 11" dans la définition de xbindkeys, utilisez "b: 11 + release". Il attendra que vous relâchiez le bouton pour lancer la commande.

Exemple:

"sh ~/expo.sh"
  b:11 + release
user215129
la source
2
Hubro devrait revenir ici et marquer cela comme la bonne réponse ...
David Ljung Madison Stellar
7

C'est très bizarre. Il s'avère que si mon bouton de la souris est toujours enfoncé (pas encore relâché) lorsque leSuper+W frappe est simulée, rien ne se passe. Je ne sais pas qui blâmer pour ça (peut-être la cannelle?). J'ai cependant travaillé dessus en ajoutant un court délai à la xtecommande:

xte 'usleep 100000' 'keydown Super_L' 'key S' 'keyup Super_L'

Il attend maintenant 0,1 seconde avant de simuler Super+S . Si j'appuie et maintiens le bouton de la souris plus de 0,1 seconde, rien ne se passe.

Il s'agit d'une solution de contournement. Je préférerais de loin une bonne réponse.

Hubro
la source
Hubro, veuillez voir la réponse la mieux notée de user215129 et la marquer comme correcte
David Ljung Madison Stellar
1
@DavidLjungMadison Non. Ce n'est même pas une réponse à ma question, juste une suggestion de solution.
Hubro
1
Je me demande si vous comprenez la réponse. Le problème est que vous essayez d'envoyer les clés alors que le bouton est toujours enfoncé. Attendre le relâchement du bouton signifie qu'il n'enverra pas les clés tant que le bouton ne sera pas relâché, résolvant ainsi votre problème. Pas une solution de contournement, c'est une explication du problème et un moyen de le résoudre.
David Ljung Madison Stellar
1
Alors tu ne comprends toujours pas. Le problème est que vous essayez de taper des touches lorsque le bouton est enfoncé, et tout ce qui lance Expo recherche Super-S, pas Btn-2 + Super-S. Votre solution est une solution de contournement car elle ne résout pas le problème en garantissant que le bouton est en place et ne fonctionne pas dans de nombreuses circonstances. La solution consiste (comme c'est souvent le cas pour les événements de souris) à attendre le relâchement du bouton avant de déclencher des commandes, ce qui garantit que le bouton n'est pas mélangé avec la frappe.
David Ljung Madison Stellar
2
Peut confirmer que la réponse de user215129 n'est en effet pas correcte et ne répond pas à la question. Faire ma propre enquête sur ce problème en ce moment et dans mon cas, le changer pour libérer ou retarder n'est pas une option car j'en ai besoin pour effectuer une action lorsque le bouton est enfoncé, avec une action différente à la libération. Voir: askubuntu.com/questions/984054/…
Ethuil UI
2

J'ai fait face au même problème.

"xte 'key b'"

fonctionnait dans la console mais pas dans le fichier de paramètres xbindkeys. J'ai changé b par son code keysym, en utilisant la commande "xev" pour l'obtenir:

"xte 'key Ox62'"

Ça a marché pour moi

sebastien cossin
la source
1

Essayez avec + Release

"xte 'keydown Super_L' 'key S' 'keyup Super_L'"
b:11 + Release

Cela peut aider.

Ivan Nikitovic
la source
1

Avoir un problème similaire lors de l'utilisation du mappeur de touches sxhkcd. Il s'avère que vos touches de raccourci réelles sont détectées comme étant toujours enfoncées.

Il existe quelques semi-solutions:

  • recherchez l'événement de sortie
  • ajouter sleep 0.2devant votre commande
  • utiliser un raccourci avec une clé de repère
  • libérez vos modificateurs de raccourcis devant votre séquence xte

Cependant, vous ne pouvez pas obtenir d'actions en temps réel avec cela =)

Possum Gallo
la source