perché il display x11 non funziona tramite login ssh?


22

Ho effettuato l'accesso a un server remoto e sto provando a visualizzare un'applicazione x (ad esempio firefox). ma viene visualizzato un messaggio di errore. i seguenti sono i miei tentativi di aprire Firefox

Black@Black-PC ~
$ ssh -X kwagjj@$labserver -p 122
[kwagjj@James5 ~]$ firefox
Error: no display specified
[kwagjj@James5 ~]$ exit
logout
Connection to 143.248.146.204 closed.

Black@Black-PC ~
$ ssh -Y kwagjj@$labserver -p 122
[kwagjj@James5 ~]$ firefox
Error: no display specified
[kwagjj@James5 ~]$ 

Ho usato -X, -Y perché ho letto da qualche parte che queste due opzioni sono correlate con le credenziali relative a X11 e questi switch faranno il lavoro per me. Anche senza gli interruttori -X, -Y, il mio tentativo è fallito.

Che cosa significa l'errore "nessuna visualizzazione specificata"?

PS La cosa strana è che se mi collego al server remoto tramite il mio PUTTY e ripeto il comando 'firefox' funziona?!?! (Firefox viene visualizzato sul computer locale)

PS il mio computer locale è Windows 7, quindi ho Xming in esecuzione in background per consentire la visualizzazione di X11. Per quanto riguarda il tentativo scritto nella parte superiore, i comandi sono stati digitati sul terminale Cygwin.


Hai provato a visualizzare qualcosa localmente dal tuo terminale Cygwin? Ad esempio, potresti trovare un'utilità X locale come xclock ed eseguirla per vedere cosa succede. Se non è possibile visualizzare localmente, il display remoto non funzionerà. Potrebbe essere necessario anche il server X per Cygwin.
Unxnut

1
@unxnut come hai sottolineato, la mia DISPLAYvariabile non è stata impostata. così l'ho installato con export DISPLAY=:0.0' and executed xclock` e apparve xclock. Ma quando ho effettuato l'accesso al server remoto tramite ssh e xclockho riprovato, si diceError: Can't open display:
kwagjj

Risposte:


16

Assicurati di avere la variabile DISPLAY impostata nel tuo ambiente cygwin:

export DISPLAY=:0.0

dopo essersi connesso con SSH, verificare se quella shell conosce anche la variabile DISPLAY corretta con:

echo $DISPLAY

4
Ho impostato la variabile DISPLAY nel terminale cygwin del computer locale e successivamente ho inviato al server remoto e digitato echo $DISPLAY. Ma la variabile DISPLAY nel server remoto non è impostata su nulla ..
kwagjj

2
Error: Can't open display: :0.0
Ahmed,

2
Fai questo:export DISPLAY=localhost:0
trogne,

18

Ho appena riscontrato questo problema durante la connessione a un server RHEL7 senza testa.

È necessario che il pacchetto xorg-x11-xauth sia installato sul proprio host per consentire l'impostazione della variabile DISPLAY e la corretta autorizzazione.

Spero di aver salvato qualcuno un po 'di tempo.


3
esattamente quello che stavo cercando. Molto apprezzato!
josh-cain,

1
Bella risposta! Le altre soluzioni (impostazione DISPLAY manualmente tramite esportazione) comporteranno una trasmissione non crittografata tra client e server! Su Debian Squeeze era il pacchetto "xauth" che doveva essere installato per far funzionare tutto. Dopo un nuovo accesso per ssh -Xun echo $DISPLAYrestituito un URL + porta e una chiamata di xterm &aperto un terminale in una finestra locale.
Jpsy,

7

Grazie a @jensd, @unxnut per avermi aiutato. in base ai tuoi commenti sono stato in grado di capire il problema.

La soluzione ha richiesto due passaggi:

  1. la variabile DISPLAY deve essere impostata correttamente.
  2. quando si invia al server remoto, l'opzione -X deve essere attiva

i miei precedenti tentativi mancano di una o entrambe queste due condizioni.

Ad ogni modo, per gli utenti successivi che vedono questo qui ci sono esempi per mostrarti cosa sto cercando di dire.

caso 1

la mia macchina locale non avrà alcuna variabile DISPLAY impostata. E poi farò SSH al server remoto con l'opzione -X e poi proverò ad eseguire xclock.

Black@Black-PC ~
$ echo $DISPLAY

## the blank means that DISPLAY variable has not been specified##
Black@Black-PC ~
$ ssh -X kwagjj@$labserver -p 122
Last login: Tue Jun 24 22:23:13 2014 from 
[kwagjj@James5 ~]$ xclock
Error: Can't open display:
[kwagjj@James5 ~]$ setenv | grep $DISPLAY
DISPLAY: Undefined variable.

come puoi vedere, Error: Can't open display:viene visualizzato un errore sul terminale del server remoto.

case2

questa volta, sulla macchina locale, specificherò la variabile DISPLAY. Ma quando sto lanciando, non accenderò l'interruttore -X. Il risultato sarà un errore:

Black@Black-PC ~
$ export DISPLAY=:0.0

Black@Black-PC ~
$ echo $DISPLAY
:0.0

Black@Black-PC ~
$ ssh kwagjj@$labserver -p 122
Last login: Tue Jun 24 22:33:32 2014 from 
[kwagjj@James5 ~]$ xclock
Error: Can't open display:
[kwagjj@James5 ~]$ setenv | grep DISPLAY
[kwagjj@James5 ~]$ 

all'inizio puoi vedere che ho impostato correttamente la variabile DISPLAY. Ma anche così, dopo ssh'ing (senza l'opzione -X) l'xclock non viene eseguito.

* Un risultato diverso con setenv | grep DISPLAYpuò essere visto qui (confronta con case1). in case2, il risultato è semplicemente vuoto. d'altra parte, il risultato di case1 a questa riga di comando è DISPLAY: undefined variable.... Non sono sicuro di come sia causata questa differenza, ma ho la sensazione che sia correlata al fatto che tu abbia soddisfatto la condizione 1. o 2 .

case3

questa volta, specificherò correttamente la variabile DISPLAY sul computer locale e anche ssh sul server remoto con il mio switch -X attivato.

Black@Black-PC ~
$ echo $DISPLAY
:0.0

Black@Black-PC ~
$ ssh -X kwagjj@$labserver -p 122
Warning: untrusted X11 forwarding setup failed: xauth key data not generated
Warning: No xauth data; using fake authentication data for X11 forwarding.
Last login: Tue Jun 24 22:37:27 2014 from 
[kwagjj@James5 ~]$ xclock &
[1] 9174
[kwagjj@James5 ~]$ setenv | grep DISPLAY
DISPLAY=localhost:11.0
[kwagjj@James5 ~]$

con questa impostazione, xclockfunziona !! ecco uno screenshot per dimostrare che non sto mentendo. inserisci qui la descrizione dell'immagine l'xclock viene mostrato correttamente nel mio computer locale.

Ancora una volta, controlla il risultato setenv | grep DISPLAYin questo caso. Ora mostra DISPLAY=localhost:11.0. Da quello che so, questo è correlato a MIT-MAGIC-COOKIE nel file .Xauthority ma dato che non ne so molto, non andrò oltre.

Conclusione: dai tre casi precedenti, possiamo confermare che per visualizzare correttamente le finestre X remote, sia la variabile 1. DISPLAY della macchina locale sia 2. l' -Xinterruttore ssh devono essere impostati correttamente. Ovviamente, il server remoto dovrebbe consentire X11forwarding.

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.