Come posso correggere un errore "Impossibile aprire il display" quando apro un programma X dopo lo ssh'ing con l'inoltro X11 abilitato?


111

Dopo aver avviato l'app X11 (XQuartz 2.3.6, xorg-server 1.4.2-apple56) sul mio Mac (OS X 10.6.8), aprendo un terminale in X11 e in esecuzione xhost +, ho quindi il ssh -Ymio Ubuntu 10.04 VM (in esecuzione su VMware Fusione). Quando corro gedit .bashrc(per esempio), ottengo:

(gedit:9510): Gtk-WARNING **: cannot open display: 

set | grep DISPLAY non restituisce nulla.

Ma se io ssh -Ynella mia macchina Ubuntu 11.04, gedit .bashrcfunziona. echo $DISPLAYrestituisce "localhost: 10.0".

Ho provato export DISPLAY=localhost:10.0mentre ero spinto nella mia macchina virtuale e poi in esecuzione gedit .bashrc, ma ottengo:

(gedit:9625): Gtk-WARNING **: cannot open display: localhost:10.0

Cosa potrebbe esserci di diverso nella configurazione delle due macchine Ubuntu che spiegherebbero perché uno funziona e l'altro no?

Aggiornamento: come suggerito da Zoredache nel commento qui sotto, ho corso sudo apt-get install xbase-clients, ma continuo ad avere lo stesso problema.


2
Ubuntu 10.04 box ha gli strumenti adeguati per X11 installato? Installa xbase-client, se non è già installato.
Zoredache,

L'ho installato ma ho ancora lo stesso problema. (Vedi sopra.)
Daryl Spitzer il

3
Forse prova a passare l'opzione -vv a ssh quando ti connetti, questo stampa messaggi dettagliati di debug, dovresti vedere diversi commenti sull'inoltro X11 durante la connessione.
Zoredache,

1
@jcrawfordor Hai controllato X11Forwardingsu Ubuntu, che hai xbase-clientsinstallato e che puoi avviare Xapps sul Mac sul terminale dal quale stai effettuando la connessione ssh. (Verificare che $DISPLAYè impostato sul terminale si esegue ssh da .
Manwe

1
Nel mio caso si trattava solo di aggiornare la versione XQuartz di MacOS
Waruna Ranasinghe il

Risposte:


47

Controlla il server sshd_config (normalmente /etc/ssh/sshd_config) e assicurati che l'opzione X11Forwarding sia abilitata con la linea

X11Forwarding yes

Se X11Forwarding non è specificato, il default è no sui computer Debian che ho a disposizione per controllare.


4
Ho scoperto dopo aver configurato un'altra macchina virtuale Ubuntu, che ho bisogno sia di installare client xbase sia di abilitare X11Forwarding. Aggiorna la tua risposta per includere entrambi e lo accetterò.
Daryl Spitzer,

1
Interessante. Almeno sulla nuova installazione di 10.04 che ho fatto stamattina X11Forwarding era abilitato di default. I ragazzi di Ubuntu devono fare di nuovo casino con le impostazioni predefinite.
Zoredache,

28
@DerfK, nel mio sistema "X11Inoltro sì" c'era già sto ancora ricevendo un errore come, (gedit: 8381): Gtk-ATTENZIONE **: impossibile aprire il display: in questi casi
AJ

1
Su Debian potresti dover installare il pacchetto xauth, quindi accedere di nuovo.
comte

$ ssh username @ hostname -Y questo ha funzionato per me
MarcoZen

60

Da xhost +: Come risolvere l'errore "Impossibile aprire il display" durante l'avvio della GUI sul server remoto :

Risposta : È possibile correggere l'errore "Impossibile aprire il display" seguendo la procedura xhost menzionata in questo articolo.

Consenti ai client di connettersi da qualsiasi host utilizzando xhost +

Eseguire il comando seguente per disabilitare il controllo di accesso, mediante il quale è possibile consentire ai client di connettersi da qualsiasi host.

$ xhost +

controllo accessi disabilitato, i client possono connettersi da qualsiasi host

Abilita inoltro X11

Mentre fai ssh usa l'opzione -X per abilitare l'inoltro X11.

$ ssh username@hostname -X

Abilita l'inoltro X11 affidabile, utilizzando l'opzione -Y,

$ ssh username@hostname -Y

Apri le applicazioni della GUI in quell'host

Dopo aver aperto la connessione ssh all'host remoto come spiegato sopra, è possibile aprire qualsiasi applicazione GUI che la aprirà senza alcun problema.

Se viene ancora visualizzato l'errore "Impossibile aprire il display", impostare la variabile DISPLAY come mostrato di seguito.

$ export DISPLAY='IP:0.0'

Nota: IP è l'IP della workstation locale in cui si desidera visualizzare l'applicazione GUI.


11
+1 per la nota che IP = è l'IP della workstation locale in cui si desidera ottenere la GUI
PCoder

3
Per coloro che hanno problemi simili su OS X, assicurati anche di aver installato XQuartz, altrimenti nessuna di queste correzioni aiuta. (La domanda di OP mostra che ha XQuartz, quindi questa è più una nota a margine di coloro che hanno problemi simili a me)
Dolan Antenucci,

3
Nota che la corsa non xhost +è molto sicura e non dovrebbe essere usata! Come ha detto Stefan Rogin, l'attaccante può quindi dall'host connettersi alla tua XSession, leggere tutto ciò che scrivi o persino modificare lo schermo che vedi.
jirislav,

l'ultimo l'ha export Display=IP:0.0fatto per me
javadba,

18

Ho avuto questo problema anche quando accedevo a una macchina virtuale Ubuntu da Mac OS X: per qualche motivo, non mi piace 'localhost' nella variabile di visualizzazione. Quindi imposta manualmente l'IP, come suggerisce harrymc:

export DISPLAY="127.0.0.1:10.0"

Quindi i programmi X11 dovrebbero andare bene. Non sembra che dovrebbe essere necessario dire al sistema operativo che localhost e 127.0.0.1 sono equivalenti, ma funziona almeno.


Questo ha funzionato per me. Qualche idea sul perché localhost non funzionasse?
Alex,

2
BINGO! Sono stato bloccato da quel problema per un po 'di tempo ... Mi sono collegato tramite SSH e non sono riuscito a lanciare programmi Gtk (il semplice X11, come "xeyes", ha funzionato comunque). DISPLAY era corretto. In realtà, la risoluzione di "localhost" non era! Se imposto manualmente DISPLAY = 127.0.0.1: 10.0 o DISPLAY = :: 1: 10.0 funziona. La modifica di / etc / hosts sembra non avere alcun effetto; e DNS è configurato correttamente (rapporto di correzione "dig localhost" sia 127.0.0.1 e :: 1) Quindi, sembra essere un bug in qualunque cosa la risoluzione DNS per le connessioni X11 in Gtk (gtk? gdk? glib? altro?).
Pablo Saratxaga,

1
Su un'installazione Debian per Beagle Bone Black, / etc / host non era impostato come leggibile da chiunque tranne che da root. Ciò ha causato i sintomi riportati qui. Reso / etc / hosts leggibile da tutti, e ha funzionato bene.
Daniel

13

Ho avuto questo problema con il mio server CentOS KVM, mi mancava il programma "xauth".


1
Questo mi ha aiutato nella mia installazione debian minima, grazie mille!
binOr

9

Se si riscontra questo problema dopo qualche tempo durante l'esecuzione con -Xarg. o semplicemente ForwardX11in / etc / ssh / ssh_config, quindi esegui $ ssh username@hostname -Y, per abilitare l' inoltro X11 di fiducia , non conosco la causa esatta, ma immagino che -Xalcune funzionalità scadano dopo qualche tempo, probabilmente per aumentare la sicurezza.

Ecco cosa ho trovato online:

Se si utilizza la macchina remota ssh -X, la macchina remota viene considerata come un client non attendibile. Quindi il client locale invia un comando al computer remoto e riceve l'output grafico. Se il tuo comando viola alcune impostazioni di sicurezza, riceverai invece un errore.

Ma se si utilizza la macchina remota ssh -Y, la macchina remota viene trattata come client attendibile. Quest'ultima opzione può aprire problemi di sicurezza. Perché un altro client grafico (X11) potrebbe annusare i dati dalla macchina remota (fare screenshot, fare keylogging e altre cose cattive) ed è persino possibile alterare quei dati.

Se vuoi saperne di più su queste cose ti suggerisco di leggere la manpage di Xsecurity o le specifiche dell'estensione di X Security. Inoltre puoi controllare le opzioni ForwardX11 e ForwardX11Trusted nel tuo / etc / ssh / ssh_config.

fonti:


6

Appena testato sul mio Mac, altri sistemi potrebbero essere a posto :

  1. Consenti ai client di connettersi da qualsiasi host utilizzando xhost +

    $ xhost +

  2. Dovresti avere un ambiente che supporti il ​​display X11

    [Sistema Mac] Installa X11 per mac https://www.xquartz.org/

  3. Dovresti lasciare che il tuo server ssh inoltri il display x11

    aggiornare /etc/ssh/sshd_confige impostare X11Forwarding yes, quindi riavviare il server SSH

  4. Si dovrebbe lasciare che la sessione ssh in avanti x11 venga visualizzata con il -Xparametro

    $ ssh -X utente @ ip

  5. Come aprire l'app X11 in PyCharm?
    • aprire una sessione ssh che supporti il ​​display X11 (ricordarsi di mantenere questa sessione)
    • eseguire echo $DISPLAYin quella sessione SSH
    • imposta DISPLAYla variabile d'ambiente per il tuo PyCharm

1
Perché è diverso o perché dovrebbe essere preferito rispetto a qualsiasi altra risposta? Spiega se puoi con una semplice modifica . Puoi farlo!!
Pimp Juice IT

@ Grazie McDonald, aggiornato con maggiori dettagli.
Colore

4

Quando esegui UXTERM o XTERM basta emettere

export $DISPLAY 

La variabile sarà lì. Quindi basta impostarlo ed esportarlo.


4

Ho dovuto inserire /etc/ssh/sshd_configquanto segue:

X11UseLocalhost no

Piuttosto, impostarlo su "sì". Strano se il valore predefinito è "NO" Gli utenti che usano putty con XMing in Windows. Uso straight ssh su Fedora. Di tanto in tanto inizia a darci

error can't open display localhost

Il riavvio del server di solito lo risolveva, ma questo è stupido. Fatto quanto sopra, riavviato il servizio sshdsul server e presto nuove connessioni funzioneranno di nuovo bene.


2

Ho anche avuto questo problema con Solaris 10 e ho scoperto che l'ascoltatore non era impostato.

svccfg –s /application/x11/x11-server listprop options/tcp_listen
svccfg –s /application/x11/x11-server setprop  options/tcp_listen = true

1

Su CentOS 6.5, improvvisamente ho perso l'accesso ai programmi X remoti dopo aver incasinato / etc / hosts. Stesso sintomo della variabile $ DISPLAY vuota (nessuna guida per l'impostazione / esportazione manuale).

È necessaria la voce 127.0.0.1 che punta al nome host effettivo; infatti l'ordine sembra essere anche rilevante (metti l'ultimo e non funzionerà ...)

[root@poseidon /etc]$ cat hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1       localhost.localdomain localhost
::1     localhost6.localdomain6 localhost6
127.0.0.1 poseidon.mycampus.edu poseidon
1XX.XXX.XXX.208 poseidon.mycampus.edu poseidon

Dopo aver risolto questo problema, xeyes, xclock e altri giocattoli di prova X funzionano di nuovo, quindi anche il mio virt-manager necessario è di nuovo in linea.


1

Ho appena trovato un bel singhiozzo nella mia configurazione che ha impedito l'inoltro x: il mio firewall stava bloccando tutte le connessioni da localhost, impedendo così di raggiungere il tunnel


1

Se usi Konsole, passa a un altro emulatore di terminale come Xfce Terminal e riprova usando root.


1

aprire il terminale $ ssh username @ hostname -X

$ ssh username@hostname -Y

$ export DISPLAY='IP:0.0'

export DISPLAY = "127.0.0.1:10.0" tutto dovrebbe funzionare.


Grazie. Funziona per il mio caso speciale quando DISPLAY='localhost:10.0'non funziona.
xpt,

1

Questa configurazione funziona per me:

Locale (Cygwin a 64 bit su Windows 10) DISPLAY=:0

Server (Amazon EC2 RHEL 7.6) DISPLAY=:10.0

Queste impostazioni sono state trovate facendo clic su "X menu applicazioni su: 0" nella barra delle applicazioni e selezionando Strumenti di sistema> Terminale


0

Dopo molte frustrazioni ho scoperto che la voce per il nome host del server nel suo file / etc / host era errata.

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.