Exécuter le programme sur une touche sans interrompre l'événement key

Est-il possible de lier une touche (globale) à une command et de ne pas interrompre la pression sur la touche? Ce que je veux dire, c'est que si j'essaye la solution bindkey postée ailleurs ici :

# In file: ~/.xbindkeysrc # Bind key 'q' to running 'some_command' "some_command" q 

alors la touche «q» ne se termine jamais comme elle le ferait autrement: par exemple, elle n'imprime jamais le caractère «q» sur le terminal, par exemple.

Utiliser xdotool pour envoyer une touche 'q' Appuyez comme ceci:

 # In file: ~/.xbindkeysrc # Bind key 'q' to running 'some_command' "some_command && xdotool key q" q 

aboutit à une boucle car la pression sur la touche 'q' exécutée par xdotool exécutera une autre 'some_command' via la binding.

Pour être un peu plus clair, je veux que la touche 'q' s'exécute comme elle le fait normalement et en plus exécuter une command externe. La solution ci-dessus remplace l'événement de presse de la touche 'q' par l'exécution d'une command externe. Le problème est que si cette command externe simule également une touche 'q', la reliure relance la command externe et je me coince dans une boucle infinie.

OK, donc je postrai une solution que j'ai trouvée, mais peut-être que quelqu'un d'autre en a une meilleure. Suite à une réponse présentée ici , je peux voir toutes les touches pressées en cours d'exécution

 xinput test <keyboad_id> 

dans un terminal. C'est juste un simple casse de la sortie de cette command dans un programme qui surveille les strings comme "key release 24" (la sortie quand 'q' est libéré sur mon keyboard) et qui fera alors ce que vous voulez quand il le fera correspondre à cette string.

Par exemple, nous pouvons appuyer sur la touche 'q' et faire un son comme ceci:

 xinput test <keyboard_id> | while read in ; do [[ $in = "key press 24" ]] && aplay /usr/share/sounds/purple/alert.wav done 

Nous pouvons alors, évidemment, surveiller d'autres inputs et exécuter autre chose si désiré.