X11 Inoltro su schermo Gnu, è possibile?


32

Uso costantemente lo schermo GNU. Ma ho cercato di capire se c'è qualche modo per fare in modo che le app X11 vengano inoltrate sullo schermo quando sto scrivendo (è una parola?). Attualmente, se provo a eseguire "gedit" attraverso lo schermo, questo si apre sul mio computer "server" e non sul mio client. Se faccio lo stesso fuori dallo schermo, allora va tutto bene. Ma voglio che tutto vada bene anche quando uso lo schermo!

Grazie!

PS: ho cercato su Google il problema e vedo la menzione di xmove, ma non riesco a trovare il pacchetto che contiene xmove sul mio Ubuntu. (ubuntu 10.10)


Non ho tempo per trovare una risposta completa ora, ma è necessario che alcune variabili di ambiente siano impostate correttamente. Probabilmente puoi scoprire quali di quelli che guardano l'ambiente esterno allo schermo.
JanC

Risposte:


32

Per fare questo manualmente, dopo aver inserito SSH, ma prima di ricollegarlo allo schermo, controlla la variabile di ambiente DISPLAY:

echo $DISPLAY

Dopo aver ricollegato allo schermo, impostare esplicitamente la variabile di ambiente:

export DISPLAY=:N.0

dove : N.0 è ciò che è stato echomostrato prima dell'allegato. Questo non sarà perfetto, dal momento che alcune applicazioni potrebbero aspettarsi di parlare con il D-Bus di sessione, che è un po 'più complesso da inviare tramite la connessione SSH.


1
Eccezionale! Questo sembra funzionare per la maggior parte delle app. Sto provando a far apparire il mio schermo 'fu'. Hai qualche idea o puoi almeno indicarmi la direzione generale di come posso automatizzare questo? Grazie!
Sandro,

Ho fatto cose strane come la sceneggiatura di qualcosa di simile: echo $DISPLAY > $HOME/.display.txt; screen -x -de poi un altro sullo schermo per farlo che lo faexport DISPLAY=$(cat $HOME/.display.txt)
Kees Cook,

questo è esattamente ciò che ho cercato di realizzare. Ma finora nessuna fortuna. Cercare di far sì che l'esportazione avvenga è piuttosto un ostacolo poiché eseguirlo in uno script non va bene, devo in qualche modo cercarlo ... e anche setenv non sembra avere il tocco magico.
Sandro,

Per trovare il tipo di script . /path/to/scriptdove si scripttrovaexport DISPLAY=$(cat $HOME/.display.txt)
Kees Cook,

Ciò presuppone che non si abbia l'avvio automatico dello schermo all'accesso (a la byobu)
A Student at a University

11

c'è un programma chiamato xpra nei repository, è come lo schermo gnu per x11. non è troppo difficile lavorare con:

X Applicazioni remote persistenti

Xpra ti offre la funzionalità di GNU Screen per applicazioni X.

Consente all'utente di visualizzare le applicazioni X remote sul proprio computer locale e di disconnettersi e riconnettersi dal computer remoto senza perdere lo stato delle applicazioni in esecuzione.


2
Ho scritto su come integrare effettivamente xpra con Screen per ottenere la persistenza sia della console che dell'applicazione X11: krlmlr.github.io/integrating-xpra-with-screen . Per me va bene.
krlmlr

7

Byobu ricollega automaticamente gli agenti ssh e gpg. Potrei farlo ricollegare la variabile di visualizzazione a, se ti è utile ...


Non sembra nemmeno passare lungo la variabile di visualizzazione nelle NUOVE sessioni create in una sessione ssh con inoltro X11. Sarebbe meraviglioso se lo facesse ... Ho smesso di usarlo a causa del mal di testa di dover disabilitare l'auto-avvio byobu in modo da poter utilizzare l'inoltro X11.
Uno studente all'università il

2

Ecco come l'ho fatto funzionare quando eseguivo byobu

Aggiungi questa riga in .bash_login prima della riga "_byobu_source ..":

echo $DISPLAY > $HOME/.display.env

E quindi aggiungi questa riga a .bashrc :

if [ ! -z ${SSH_CONNECTION+x} ]; then
  export DISPLAY=$(cat $HOME/.display.env) 
fi

1

Sembra che il problema sia che la variabile di ambiente XAUTHORITY non viene conservata nella sessione dello schermo. Ho risolto questo aggiungendo quanto segue al mio .bashrc. Non pensavo che questo dovesse essere necessario, ma immagino che tu faccia quello che devi:

# ensure X forwarding is setup correctly, even for screen
XAUTH=~/.Xauthority
if [[ ! -e "${XAUTH}" ]]; then
 # create new ~/.Xauthority file
 xauth
fi
if [[ -z "${XAUTHORITY}" ]]; then
 # export env var if not already available.
 export XAUTHORITY="${XAUTH}" 
fi

Non mi aspetto che questa sia la soluzione migliore o la più concisa, ma funziona.



0

Sulla base del suggerimento di @harre, ho scoperto che questa era la migliore soluzione funzionante, almeno per RHEL tramite Putty. So che c'è un modo migliore di creare un file che contiene il var, ma questo funziona fuori dal cancello X11per avere accesso al DISPLAYquando caricato tramite gnu screen.

Soluzione automatizzata

Aggiungi a .bashrc(o .bash_profile, a seconda del caso d'uso)

#.bashrc
if [ -f ~/etc/.bash-screen-x11 ]; then
   echo $DISPLAY > $HOME/.display.env
   source ~/etc/.bash-screen-x11
fi

Quindi aggiungi il seguente file (o la tua scelta del percorso)

#~/etc/.bash-screen-x11
# sets back display var.
if [ -z $STY ]; then
  export DISPLAY=$(cat $HOME/.display.env)
fi
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.