GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie sendet man Tastenanschläge (f5) vom Terminal an ein Gui-Programm?

Ich verwende einen Raspberry Pi in Kombination mit Chromium (Kioskmodus), um einige Statistiken anzuzeigen. Der Pi hat keine angeschlossene Tastatur, also habe ich nach einer Lösung gesucht, um Tastenanschläge vom Terminal an den Chromium (Tab)-Prozess zu senden. Die normale Eingabe funktioniert, aber wie sende ich so etwas wie F5 (ein spezieller Schlüssel:Browseraktualisierung) über diese Lösung?

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

Akzeptierte Antwort:

GUI-Programme lesen nicht von ihrer Standardeingabe, sie bekommen ihre Eingabe vom X-Server. Es gibt Tools, um einen Tastendruck in ein Fenster einzufügen. xdotool ist ziemlich verbreitet und praktisch.

Sie müssen die Fenster-ID finden, an die Sie den Tastendruck senden möchten. Das geht mit xdotool. xdotool search --class Chrome gibt die Liste der Fenster-IDs aller Chrome-Fenster zurück. Wenn dies mehr als einen zurückgibt, müssen Sie den gewünschten auswählen. Sie können xdotool search --name verwenden auf den Titel statt auf die Klasse abzugleichen. Sie können auch die Ausgabe von wmctrl parsen und die gewünschte Fenster-ID extrahieren.

Sobald Sie die richtige Fenster-ID gefunden haben, können Sie xdotool aufrufen einen Tastendruck zu injizieren. Leider lehnen viele Anwendungen synthetische Ereignisse ab, d. h. Tastenanschläge und Mausereignisse, die von einer anderen Anwendung gesendet wurden. Dies ist bei aktuellen Versionen von Chrome der Fall. Es ist möglich, einen Tastendruck von einer anderen Anwendung durch einen anderen Mechanismus einzufügen, aber das erfordert, dass das Fenster fokussiert ist. Sie können das alles mit xdotool tun, aber es führt dazu, dass der Fokus schnell zum Chrome-Fenster und zurück flackert. Das folgende Snippet sendet F5 zum ersten Chrome-Fenster (in einer etwas willkürlichen Reihenfolge).

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

Oder mit älteren Versionen von xdotool:

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

Denken Sie daran, dass dies F5 sendet zu diesem Fenster und es liegt am Programm, zu entscheiden, was damit zu tun ist. In Chrome wird dadurch der aktuelle Tab neu geladen.


Linux
  1. Führen Sie ein GUI-Programm beim Start aus?

  2. So verwenden Sie SSMTP zum Senden einer E-Mail vom Linux-Terminal

  3. Wie öffne ich eine neue Registerkarte im GNOME-Terminal über die Befehlszeile?

  4. Wie erstelle ich eine Datei in Linux aus dem Terminalfenster?

  5. Wie kann ich Linux zu einem bestimmten Zeitpunkt vom Terminal aus herunterfahren?

So installieren Sie ein Programm von der Quelle unter Linux

So durchsuchen Sie den Stapelüberlauf vom Terminal aus

So überprüfen Sie, ob die GUI in Linux über die Befehlszeile installiert ist

So öffnen Sie ein Linux-Terminalfenster

So verwenden Sie Google Mail vom Ubuntu-Terminal zum Senden von E-Mails

Wie kann man stdin vom Terminal aus plotten?