GNU/Linux >> Tutoriels Linux >  >> Linux

Comment envoyer des frappes (f5) du terminal à un programme Gui ?

J'utilise un Raspberry Pi en combinaison avec Chromium (mode kiosque) pour afficher certaines statistiques. Le Pi n'a pas de clavier connecté, j'ai donc cherché une solution pour envoyer des frappes du terminal au processus Chromium (onglet). L'entrée normale fonctionne mais comment envoyer quelque chose comme F5 (une touche spéciale :rafraichissement du navigateur) via cette solution ?

# pidof chromium
20809 20790 20788 20786 20783
# echo 'some text' > /proc/20809/fd/0

Réponse acceptée :

Les programmes GUI ne lisent pas à partir de leur entrée standard, ils obtiennent leur entrée du serveur X. Il existe des outils pour injecter une frappe dans une fenêtre. xdotool est assez courant et pratique.

Vous devrez trouver l'ID de la fenêtre à laquelle vous souhaitez envoyer la frappe. Vous pouvez le faire avec xdotool. xdotool search --class Chrome renvoie la liste des ID de fenêtre de toutes les fenêtres Chrome. Si cela renvoie plus d'un, vous devez choisir celui que vous voulez. Vous pouvez utiliser xdotool search --name pour correspondre sur le titre au lieu de la classe. Vous pouvez également analyser la sortie de wmctrl et extraire l'ID de fenêtre souhaité.

Une fois que vous avez trouvé le bon ID de fenêtre, vous pouvez appeler xdotool pour injecter une frappe. Malheureusement, de nombreuses applications rejettent les événements synthétiques, c'est-à-dire les événements de frappe et de souris envoyés par une autre application. C'est le cas des versions actuelles de Chrome. Il est possible d'injecter une frappe depuis une autre application par un mécanisme différent, mais cela nécessite que la fenêtre soit focalisée. Vous pouvez faire tout cela avec xdotool, mais cela fera clignoter rapidement la mise au point sur la fenêtre Chrome et inversement. L'extrait suivant envoie F5 à la première fenêtre Chrome (dans un ordre quelque peu arbitraire).

xdotool search --class Chrome windowactivate --sync %1 key F5 windowactivate $(xdotool getactivewindow)

Ou avec les anciennes versions de xdotool :

xdotool windowactivate $(xdotool search --class Chrome) &&
xdotool key F5 &&
xdotool windowactivate $(xdotool getactivewindow)

N'oubliez pas que cela envoie F5 à cette fenêtre et c'est au programme de décider quoi en faire. Dans Chrome, cela recharge l'onglet actuel.


Linux
  1. Exécuter un programme Gui au démarrage ?

  2. Comment utiliser SSMTP pour envoyer un e-mail à partir d'un terminal Linux

  3. Comment créer un fichier sous Linux à partir de la fenêtre du terminal ?

  4. Comment envoyer un signal au programme exécuté dans un conteneur Docker ?

  5. Comment envoyer Ctrl+Alt+F1 (et autres frappes spéciales) à X window ?

Comment installer un programme à partir de la source sous Linux

Comment parcourir le débordement de pile à partir du terminal

Comment vérifier si l'interface graphique est installée sous Linux à partir de la ligne de commande

Comment ouvrir une fenêtre de terminal Linux

Comment utiliser Gmail depuis le terminal Ubuntu pour envoyer des e-mails

comment tracer stdin depuis le terminal?