Modo da riga di comando per inviare sequenze di tasti a una finestra aperta in una X-session diversa


11

Sulla mia macchina principale, ho un desktop Ubuntu aperto e connesso. Quindi accedo anche a questa macchina da un computer remoto, usando X2go che crea una nuova sessione X. Ho un file libreoffice aperto nella sessione originale . Voglio salvare questo file e chiuderlo, ma dal computer remoto! (Entrambe le sessioni hanno lo stesso utente connesso; posso fare sudo se necessario)

Ho provato a usare xdotool searchma questo non riesce a trovare la finestra. C'è un modo per fare quello che voglio da questa seconda sessione? Riesco a vedere il processo con ps -A posso anche vedere il file aperto con lsof! Come posso fare un "salva e chiudi" su di esso?


2
Si potrebbe semplicemente uccidere il processo - se non si dispone di alcun serio modifiche non salvate questo sarebbe stato semplice. In tal caso, dovrebbe comunque tentare di ripristinare il documento alla successiva apertura.
Wayne Werner,

È vero @wayne, probabilmente sarebbe il recupero automatico ... Grazie per il suggerimento. Non sono sicuro se volevo cogliere l'occasione però! Non c'è modo di inviare i tasti premuti (o altri messaggi diretti)? Sembra così semplice.
Sanjay Manohar,

Sono sicuro che ci sono modi - semplicemente non ne sono consapevole. Alcuni complicati implicano l'installazione di un semplice client VNC e l'impostazione DISPLAY=:0(o qualsiasi altra visualizzazione sul quale si trova l'altro account) e quindi avviare il server e accedervi dal client. Ma potrebbe essere eccessivo. LibreOffice potrebbe avere un protocollo di messaggio - non ne ho molta familiarità perché utilizzo Google Documenti o file di testo normale in Vim (incluso LaTex) ...
Wayne Werner,

usa VNC per accedere alla finestra principale da un'altra posizione
Olivier Dulac,

1
xdotool viene eseguito sul valore $ DISPLAY della sessione corrente. Puoi ssh qualsiasi macchina o vncserver, quindi eseguire xdotool su di esso. Ad esempio, se si esegue un vncserver sulla porta 5901, utilizza: 1 schermata per convenzione. Quindi, esegui DISPLAY:1quindi avvia qualsiasi programma X (xeyes per il test) e verrebbe eseguito sotto VNC. Lo stesso vale per i vncserver remoti. SSH in macchina, quindi esegui semplicemente DISPLAY di esportazione: 1 prima dell'uso.
m3nda,

Risposte:


9

Supponendo che la configurazione predefinita, xdpyinfo su "originale" mostrerebbe una visualizzazione di ": 0,0", ad es

xdpyinfo | grep name

Se la variabile di ambiente DISPLAY su "x2go" è ": 1.0", dovrebbe essere così.

Da un terminale su "x2go" Prova a trovare l'id finestra:

DISPLAY=:0.0 xwininfo -root -tree | grep Writer

È possibile che il controllo degli accessi sia impostato in modo che non funzioni, ma penso che dovrebbe essere se sei lo stesso userid sullo stesso host (ovvero l'accesso a ~ / .Xauthority). Controllare l'output "xauth list" se non vi è accesso.

Se funziona, usa il tuo strumento preferito per controllarlo. Aggiungi "-int" a xwininfo sopra per stampare il windowid in decimale se lo strumento lo richiede in questo modo, xdotool non:

export DISPLAY=:0.0
xdotool windowactivate 0x15a18918
xdotool windowfocus 0x15a18918
xdotool key "ctrl+s"
xdotool key "ctrl+q"

o potresti avere più fortuna con questi invece di "ctrl + s" / "ctrl + q"

xdotool key "meta+f" "s"
xdotool key "meta+f" "c"
xdotool key "meta+f" "x"

Potresti aver bisogno di "alt +" invece di "meta +", ho mappature meta / alt / super non standard. meta funziona per me, testato usando un Xnest. Presumo che il layout del menu inglese e gli acceleratori siano inalterati.

È possibile che ci sia un popup sulla tua strada, nel qual caso vale la pena provare:

xdotool key "Escape"

alcune volte, quindi riprovare a salvare e chiudere. Ricorda che xdotool è pignolo riguardo al caso esatto di nomi "chiave".

Dovresti essere in grado di provare tutto questo avviando libreoffice su x2go e NON modificando il tuo DISPLAY. Dovresti salvare i comandi in un file di script della shell in modo che i cambiamenti di messa a fuoco non ti rovinino.

lsof dovrebbe mostrare il file non più aperto se ha funzionato :-)


Grazie per il suggerimento xdotool key "Escape"sui nomi ma non ho provato nomi lunghi: D
m3nda

1

Sembra che ci siano un paio di possibili requisiti. apparentemente l'host deve essere nel file xhosts (era contrassegnato come risposta) e il valore DISPLAY appropriato è stato esportato. Questo post qui dovrebbe aiutarti a farlo nel modo desiderato, consentendo a xdotool di trovare la finestra remota x11 .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.