Sto usando un Raspberry Pi in combinazione con Chromium (modalità kiosk) per mostrare alcune statistiche. Il Pi non ha una tastiera collegata, quindi ho cercato una soluzione per inviare sequenze di tasti dal terminale al processo Chromium (scheda). L'input normale funziona, ma come faccio a inviare qualcosa come F5
(una chiave speciale:aggiornamento del browser) tramite questa soluzione?
# pidof chromium
20809 20790 20788 20786 20783
# echo 'some text' > /proc/20809/fd/0
Risposta accettata:
I programmi della GUI non leggono dal loro input standard, ottengono il loro input dal server X. Ci sono strumenti per iniettare una sequenza di tasti in una finestra. xdotool è abbastanza comune e conveniente.
Dovrai trovare l'ID della finestra a cui desideri inviare la sequenza di tasti. Puoi farlo con xdotool. xdotool search --class Chrome
restituisce l'elenco degli ID delle finestre di tutte le finestre di Chrome. Se questo restituisce più di uno, devi scegliere quello che desideri. Puoi usare xdotool search --name
da abbinare al titolo invece che alla classe. Puoi anche analizzare l'output di wmctrl ed estrarre l'ID della finestra desiderato.
Una volta trovato l'ID della finestra corretto, puoi chiamare xdotool
per iniettare una sequenza di tasti. Sfortunatamente, molte applicazioni rifiutano gli eventi sintetici, ovvero le sequenze di tasti e gli eventi del mouse inviati da un'altra applicazione. Questo è il caso delle versioni attuali di Chrome. È possibile iniettare una sequenza di tasti da un'altra applicazione con un meccanismo diverso, ma ciò richiede che la finestra sia focalizzata. Puoi fare tutto ciò con xdotool, ma farà sì che lo stato attivo sfarfallio rapidamente sulla finestra di Chrome e viceversa. Il seguente snippet invia F5 alla prima finestra di Chrome (in un ordine alquanto arbitrario).
xdotool search --class Chrome windowactivate --sync %1 key F5 windowactivate $(xdotool getactivewindow)
O con versioni precedenti di xdotool:
xdotool windowactivate $(xdotool search --class Chrome) &&
xdotool key F5 &&
xdotool windowactivate $(xdotool getactivewindow)
Ricorda che questo invia F5 a quella finestra e spetta al programma decidere cosa farne. In Chrome, questo ricarica la scheda corrente.