Comment créer un raccourci qui exécute une commande xdotool pour simuler une pression de touche?

10

J'essaie de simuler une pression de touche multimédia à l'aide d'un raccourci personnalisé.

Jusqu'à présent, j'ai pu réaliser la simulation dont j'ai besoin en utilisant la commande:

xdotool key XF86AudioPlay

Il fonctionne parfaitement, il met en pause ou démarre le lecteur de musique à chaque fois qu'il est exécuté.

Le problème survient lorsque vous essayez de l'exécuter en tant que raccourci.

J'ai d'abord essayé d'exécuter un alias avec un raccourci personnalisé, mais cela n'a pas fonctionné.

Comme expliqué sur cette question :

Les commandes exécutées par les liaisons clavier ne sont pas analysées via un shell. Votre meilleur pari est de créer un répertoire dans votre homedir.

Ensuite, j'ai créé le script suggéré et je l'ai nommé simplay:

#!/bin/sh
xdotool key XF86AudioPlay

Il est situé dans un dossier bin qui fait partie de la PATH, cela fonctionne bien et peut être exécuté à partir de n'importe quel emplacement.

Lorsque j'ai essayé de créer le raccourci personnalisé, je n'ai pas réussi à le faire exécuter, la configuration est la suivante:

Name: test
Command: simplay

Shortcut: Ctrl+Alt+R

Après avoir cherché un peu plus, j'ai trouvé une autre façon d'exécuter le raccourci:

gnome-terminal -e simplay

Je l'ai essayé sur un terminal et j'ai remarqué qu'en l'exécutant, il ouvrirait rapidement une nouvelle fenêtre de terminal, exécuterait le processus enfant, mettrait la musique en pause et fermerait immédiatement la fenêtre.

J'ai changé la commande sur le raccourci et en le frappant j'ai remarqué le même comportement ouvrant un terminal et étant immédiatement fermé mais cette fois le processus enfant n'a pas mis la musique en pause, ce qui me fait penser que le script a été appelé à toutes mes tentatives précédentes mais il ne peut en quelque sorte pas être exécuté.

Comment puis-je résoudre ce problème selon vos connaissances?

Jorge Cuevas
la source

Réponses:

12

Le problème

Votre raccourci est exécuté en même temps que votre pression de touche simulée

Si vous exécutez une commande, simulant une pression de touche, appelée avec ... une autre pression de touche, vous simulez en fait une troisième pression de touche, qui est la combinaison des deux :)

Résoudre

Vous devez empêcher l'exécution de votre raccourci en même temps que la pression de touche simulée, en d'autres termes, ajouter un délai:

/bin/bash -c "sleep 1 && xdotool key XF86AudioPlay"

Ajoutez cette commande à un raccourci et cela devrait fonctionner.

Remarque

Bien sûr, vous pouvez jouer un peu avec la valeur de sleep 1, pour la régler sur la meilleure valeur qui soit confortable, selon la façon dont la combinaison est "collante". sleep 0.5pourrait très bien faire, et rendre le raccourci plus rapide.

Jacob Vlijm
la source
8

Vous pouvez également utiliser la commande directement dans la définition de raccourci, vous n'avez donc pas besoin de créer un script autonome pour cela.

Au lieu d'utiliser la solution de contournement "sleep 1", vous pouvez utiliser l' --clearmodifiersindicateur, c'est-à-dire que votre raccourci personnalisé ressemblerait à ceci:

Name: test
Command: xdotool key --clearmodifiers XF86AudioPlay

Shortcut: Ctrl+Alt+R

Pour moi, cela fonctionne lors du mappage des raccourcis vers Super+F9.

Jan
la source
L'extrait de code ci-dessus est-il censé être un fichier? Si c'est le cas, devez-vous le placer à un endroit particulier ou exécuter une commande particulière pour implémenter le raccourci?
JellicleCat
1
L'extrait n'est qu'une description du raccourci que j'ai utilisé. Dans Ubuntu, vous pouvez créer des raccourcis personnalisés dans les paramètres du clavier. Cependant, j'ai depuis mis à jour ma version d'Ubuntu et je suis maintenant en mesure de mapper directement l'action "Play (ou play / pause)" sur une combinaison de touches de mon choix, qui s'avère plus fiable que l'utilisation de xdotool.
Jan
Encore mieux qu'un --clearmodifiers est d'émettre un "keyup" pour le raccourci clavier que vous utilisez pour appeler le script. Le léger inconvénient est que vous devez mettre à jour le script si vous changez le raccourci clavier pour appeler le script.
vanadium
1

Une alternative (pour des performances plus rapides) à l'utilisation sleep 1 && xdotool ...consiste à utiliser xdotool pour libérer vos touches de raccourci. Un peu plus long, mais vous pouvez également utiliser

/bin/bash -c "xdotool keyup R Alt_L Ctrl_L && xdotool key XF86AudioPlay"
Alexander Mot
la source