Domanda

Uso lo schermo per mantenere la mia sessione di lavoro e collegarmi alla stessa sessione da più macchine. Come posso impostare SSH e schermare in modo tale che la variabile XDISPLAY dentro la mia sessione di schermo persistente sia sempre impostata sulla macchina da cui mi sto attualmente connettendo?

es. Inizio la sessione dello schermo al lavoro e utilizzo gvim, che utilizza il server X in esecuzione sulla mia macchina di lavoro. Successivamente, mi collego alla stessa sessione da casa e voglio anche usare gvim. Ma questa volta, voglio che gvim usi il server X sul mio computer di casa. Mi rendo conto di poter aggiornare manualmente XDISPLAY ogni volta che mi collego da una macchina diversa, ma preferirei avere un sistema automatizzato.

Punti bonus se posso effettivamente spostare gvim dalla mia macchina di lavoro alla mia macchina di casa mentre è in esecuzione. Ho provato xmove ma non sono mai riuscito a farlo funzionare bene.

È stato utile?

Soluzione

La seguente è una soluzione manuale, ma non c'è motivo per cui non sia possibile usa un alias o uno script per farlo in modo automatico quando esegui l'accesso in remoto.

Supponendo che la shell locale imposti correttamente la variabile DISPLAY, potresti usare screen -X per inviare prima i seguenti comandi al tuo schermo remoto collegamento.

# set future remote shells started by screen to have the correct XDISPLAY
% screen -X "setenv XDISPLAY $DISPLAY" #...

# set up the keystroke F1 to update the XDISPLAY in current shells
% screen -X "bindkey -k k1 stuff export XDISPLAY=$DISPLAY\015" #...

Se sai che tutte le tue finestre sono state lasciate in una shell (non un editor in esecuzione o qualcosa del genere), puoi usare : at per cambiare il XDISPLAY anziché un'associazione chiave:

# update the XDISPLAY in all current windows
% screen -X "at % stuff export XDISPLAY=$DISPLAY\015" #...

In alternativa, se si conosce un modo per acquisire il valore della variabile di ambiente di un processo genitore, è possibile utilizzarlo insieme al prompt hook della shell per acquisire il valore di XDISPLAY di SCREEN (come impostato da setenv) e aggiornarlo per la shell.

Altri suggerimenti

Non esiste un "triviale" modo per modificare le variabili di ambiente in processi esteri.

Una soluzione semplice potrebbe essere quella di rendere persistente il tuo XDISPLAY in un file all'accesso e utilizzare un PROMPT_COMMAND per leggere questo file prima di stampare il prossimo prompt.


Per spostare le applicazioni X in giro, guarda qualcosa come X11vnc o Xvnc .

Sono anche interessato alla risposta per questo. Non dovrebbe essere possibile elencare i processi SSH per il tuo utente ordinati per ora e forse creare un ambiente per quel processo?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top