K zobrazení některých statistik používám Raspberry Pi v kombinaci s Chromium (režim kiosku). Pi nemá připojenou klávesnici, takže jsem hledal řešení pro odesílání úhozů z terminálu do procesu Chromium (tab). Normální vstup funguje, ale jak mohu poslat něco jako F5
(speciální klíč:obnovení prohlížeče) prostřednictvím tohoto řešení?
# pidof chromium
20809 20790 20788 20786 20783
# echo 'some text' > /proc/20809/fd/0
Přijatá odpověď:
Programy GUI nečtou ze svého standardního vstupu, získávají svůj vstup z X serveru. Existují nástroje pro vložení úhozu do okna. xdotool je poměrně běžný a pohodlný.
Budete muset najít ID okna, do kterého chcete odeslat stisk klávesy. Můžete to udělat pomocí xdotool. xdotool search --class Chrome
vrátí seznam ID oken všech oken Chrome. Pokud se vrátí více než jeden, musíte vybrat ten, který chcete. Můžete použít xdotool search --name
aby odpovídaly názvu místo třídy. Můžete také analyzovat výstup wmctrl a extrahovat požadované ID okna.
Jakmile najdete správné ID okna, můžete zavolat xdotool
vstříknout stisk klávesy. Bohužel mnoho aplikací odmítá syntetické události, tedy stisky kláves a události myši odeslané jinou aplikací. To je případ aktuálních verzí Chrome. Je možné vložit stisk klávesy z jiné aplikace jiným mechanismem, ale to vyžaduje zaostření okna. To vše můžete udělat pomocí xdotool, ale způsobí to, že zaměření rychle přejde na okno Chrome a zpět. Následující úryvek odešle F5 do prvního okna Chrome (v poněkud libovolném pořadí).
xdotool search --class Chrome windowactivate --sync %1 key F5 windowactivate $(xdotool getactivewindow)
Nebo se staršími verzemi xdotool:
xdotool windowactivate $(xdotool search --class Chrome) &&
xdotool key F5 &&
xdotool windowactivate $(xdotool getactivewindow)
Pamatujte, že to odešle F5 do tohoto okna a je na programu, aby rozhodl, co s tím udělá. V prohlížeči Chrome se tím znovu načte aktuální karta.