GNU/Linux >> Linux Esercitazione >  >> Linux

Come inviare sequenze di tasti (f5) dal terminale a un programma Gui?

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.


Linux
  1. Eseguire un programma Gui all'avvio?

  2. Come utilizzare SSMTP per inviare un'e-mail dal terminale Linux

  3. Come aprire una nuova scheda in GNOME Terminal dalla riga di comando?

  4. Come creare un file in Linux dalla finestra del terminale?

  5. Come avviare i programmi Linux GUI dalla riga di comando, ma separati dalla riga di comando?

Come installare un programma da Source su Linux

Come sfogliare lo stack overflow dal terminale

Come verificare se la GUI è installata in Linux dalla riga di comando

Come aprire una finestra di un terminale Linux

Come utilizzare Gmail dal terminale Ubuntu per inviare e-mail

come tracciare stdin dal terminale?