it-swarm.com.de

Wie sende ich Tastenanschläge (F5) vom Terminal an ein GUI-Programm?

Ich verwende einen Raspberry Pi in Kombination mit Chrom (Kiosk-Modus), um einige Statistiken anzuzeigen. Der Pi hat keine angeschlossene Tastatur, daher 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: Browser-Aktualisierung) über diese Lösung?

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

GUI-Programme lesen nicht von ihrer Standardeingabe, sondern erhalten ihre Eingabe vom X-Server . Es gibt Werkzeuge, um einen Tastendruck in ein Fenster einzufügen. xdotool ist ziemlich häufig und praktisch.

Sie müssen die Fenster-ID finden, an die Sie den Tastenanschlag senden möchten. Sie können dies mit xdotool tun. xdotool search --class Chrome Gibt die Liste der Fenster-IDs aller Chrome Fenster) zurück. Wenn dies mehr als eines zurückgibt, müssen Sie das gewünschte auswählen. Sie können xdotool search --name, um den Titel anstelle der Klasse abzugleichen. Sie können auch die Ausgabe von wmctrl analysieren und die gewünschte Fenster-ID extrahieren.

Sobald Sie die richtige Fenster-ID gefunden haben, können Sie xdotool aufrufen, um einen Tastendruck einzufügen. 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 Tastenanschlag aus einer anderen Anwendung über einen anderen Mechanismus einzufügen, dies erfordert jedoch eine Fokussierung des Fensters. Sie können dies alles mit xdotool tun, aber der Fokus flackert schnell zum Fenster Chrome und zurück. Das folgende Snippet wird gesendet 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 sendet F5 zu diesem Fenster und es ist Sache des Programms, zu entscheiden, was damit zu tun ist. In Chrome wird dadurch die aktuelle Registerkarte neu geladen.

Die oben vorgeschlagene Lösung verwendete xdotool wie folgt

 xdotool key --windowid <window> <keystroke>

was bei mir nicht funktioniert hat. Nach einigem Experimentieren kam ich zu

 xdotool windowactivate --sync <window> key <keystroke>

Einmal schien das zu funktionieren, ich definierte einige Skripte und aktualisierte meine .lircrc-Datei wie hier gezeigt:

http://pcfellow.com/ClementineRemote.html

15
Mike

Wenn Sie Chromium zum Anzeigen einer benutzerdefinierten Webseite verwenden und diese regelmäßig aktualisieren möchten, können Sie das folgende Tag hinzufügen:

<meta http-equiv="refresh" content="5">

um es automatisch alle 5 Sekunden zu aktualisieren (Sie können es kürzer oder länger einstellen, wenn Sie möchten).

4
André Borie

Ich hatte einen ähnlichen Anwendungsfall auf einem Raspberry Pi mit Raspbian Wheezy. Ich musste die Registerkarten auf Chrome im Kioskmodus drehen (leider ist es nicht mehr sinnvoll, eine Erweiterung zu installieren, um dies auf dem alten Chrome zu tun). Das Beispiel der akzeptierten Antwort enthält einige Tippfehler oder funktioniert einfach nicht mit meinen Softwareversionen. Folgendes funktioniert für mich:

xdotool key --window "$(xdotool search --class Chromium | head -1)" Ctrl+Tab
4
Ben Brian

Ich habe in der Vergangenheit Auto Hot Key verwendet, um beispielsweise Tastendrücke zu senden. Dies ist jedoch unter Linux nicht verfügbar. Eine schnelle Google-Suche zeigt jedoch, dass es IronAHK ( http://www.ironahk.net/ gibt =) Es ist noch nicht viel Dokumentation verfügbar, aber es kann den Trick machen.

2
hafnero