web-dev-qa-db-fra.com

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

Cette commande xte, 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 ceci dans mon fichier .xbindkeysrc:

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

Rien ne se passe quand je clique sur le bouton. La liaison suivante fait apparaître la lettre X sur 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 le résultat détaillé de xbindkeys -n -v lorsque vous cliquez sur le bouton 11:

Appui sur le bouton! 
 E.xbutton.button = 11 
 E.xbutton.state = 16 
 "Xte 'keydown Super_L' 'clé 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 
 Relâcher le 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 xbindkeys exécute la commande? (appel fork + exec)


Tentative 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. La relier dans xbindkeys:

"sh ~/expo.sh"
  b:11

En cliquant sur le bouton 11 de la souris:

Appuyez sur la touche! 
 E.xbutton.button = 11 
 E.xbutton.state = 16 
 "Sh ~/expo.sh" 
 M: 0x0 + b : 11 (souris) 
 A l'écran 0 pour la fenêtre 2bb 
 Démarrer le programme avec fork + appel exec

Rien ne se passe!

18
Hubro

C'est très bizarre. Il se trouve que si le bouton de la souris est toujours enfoncé (pas encore relâché) lorsque la frappe Super+W est simulée, rien ne se produit. Je ne sais pas qui est responsable de ça (peut-être Cinnamon?). J'ai toutefois résolu le problème en ajoutant un court délai à la commande xte:

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 sur le bouton de la souris et que je le maintient plus 0.1 secondes, rien ne se passe.

Ceci est une solution de contournement. Je préférerais de beaucoup une réponse appropriée.

6
Hubro

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

Exemple:

"sh ~/expo.sh"
  b:11 + release
16
user215129

J'ai rencontré le 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 fonctionné pour moi

2
sebastien cossin

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

Il existe quelques solutions de contournement:

  • chercher l'événement de sortie
  • ajoutez sleep 0.2 devant votre commande
  • utiliser un raccourci avec la clé de leader
  • libérez vos modificateurs de raccourci devant votre séquence xte

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

1
Possum Gallo

Essayez avec + Release

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

Cela peut aider.

1
Ivan Nikitovic