"Nessuna variabile DISPLAY X11" - cosa significa?


102

Sto cercando di installare un'applicazione Java sulla mia macchina Linux (Slackware).

Ho ricevuto il seguente errore e non lo capisco.

Mi consiglieresti come affrontare il problema? Grazie.

Ecco cosa ottengo: (vedo che alcune variabili DISPLAY X11 devono essere impostate, ma quale valore dovrei darle e come?)

~$ java -jar gate-5.0-beta1-build3048-installer.jar
- ERROR -

java.awt.HeadlessException:
No X11 DISPLAY variable was set, but this program performed an operation which requires it.
java.awt.HeadlessException:
No X11 DISPLAY variable was set, but this program performed an operation which requires it.
at java.awt.GraphicsEnvironment.checkHeadless(Graphic sEnvironment.java:159)
at java.awt.Window.<init>(Window.java:407)
at java.awt.Frame.<init>(Frame.java:402)
at net.sourceforge.mlf.metouia.borders.MetouiaDotsBuf fer.<init>(MetouiaDotsBuffer.java:105)
at net.sourceforge.mlf.metouia.borders.MetouiaDots.<i nit>(MetouiaDots.java:66)
at net.sourceforge.mlf.metouia.borders.MetouiaToolBar Border.<init>(MetouiaToolBarBorder.java:49)
at net.sourceforge.mlf.metouia.MetouiaLookAndFeel.ini tComponentDefaults(MetouiaLookAndFeel.java:241)
at javax.swing.plaf.basic.BasicLookAndFeel.getDefault s(BasicLookAndFeel.java:130)
at javax.swing.plaf.metal.MetalLookAndFeel.getDefault s(MetalLookAndFeel.java:1591)
at javax.swing.UIManager.setLookAndFeel(UIManager.jav a:537)
at javax.swing.UIManager.setLookAndFeel(UIManager.jav a:581)
at com.izforge.izpack.installer.GUIInstaller.loadLook AndFeel(GUIInstaller.java:373)
at com.izforge.izpack.installer.GUIInstaller.<init>(G UIInstaller.java:116)
at sun.reflect.NativeConstructorAccessorImpl.newInsta nce0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInsta nce(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newI nstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Construc tor.java:513)
at java.lang.Class.newInstance0(Class.java:355)
at java.lang.Class.newInstance(Class.java:30
at com.izforge.izpack.installer.Installer.main(Instal ler.java:62)

Ho lo stesso problema, funziona perfettamente su console ma quando uso eclipse genera la stessa eccezione ho persino inserito le righe di codice: Process proc_exporting = Runtime.getRuntime (). exec ("sudo export DISPLAY =: 0.0") ; ancora non funziona
hb

3
Nessuna delle risposte fornisce le informazioni necessarie per risolvere questo problema quando ci si connette a una console in remoto tramite puTTY. Qualsiasi risposta che indirizzi SSH in realtà non spiega come farlo funzionare. Qualcuno sa di una domanda che affronta questo?

Risposte:


121

Se ti trovi nel display principale, allora

export DISPLAY=:0.0

o se stai usando csh o tcsh

setenv DISPLAY :0.0

prima di eseguire la tua app.

In realtà, sono sorpreso che non sia impostato automaticamente. Stai tentando di avviare questa applicazione da un terminale non grafico? In caso contrario, hai modificato l'impostazione predefinita .profile, .login, .bashrc o .cshrc?

Nota che l'impostazione del DISPLAY su: 0.0 presuppone che tu sia seduto al display principale, come ho detto, o almeno che il display principale sia connesso al tuo ID utente. Se non è stato effettuato l'accesso o è un ID utente diverso, l'operazione fallirà.

Se stai entrando da un'altra macchina, e sei nel display principale di quella macchina e sta eseguendo X, allora puoi usare "ssh -X hostname" per connetterti a quell'host, e ssh inoltrerà il display X indietro . ssh si assicurerà anche che la variabile d'ambiente DISPLAY sia impostata correttamente (a condizione che non venga modificata nei vari file punto che ho menzionato sopra). In una sessione "ssh -X", la variabile d'ambiente DISPLAY avrà un valore come "localhost: 11.0", che punterà al socket su cui ssh sta effettuando il tunneling al tuo box locale.


Ciao, grazie mille, il primo ha funzionato per me. Sì, lo sto iniziando da un terminale non grafico.
user42155

Sembra però che voglia accedere al display grafico. Fare attenzione a non eseguirlo quando il display grafico non è disponibile o appartiene a qualche altro ID utente.
Paul Tomblin,

3
nota che ha funzionato perché sei / eri sulla console. se tu fossi su un altro terminale, dovresti avere un server X in esecuzione sul terminale e quindi impostare l'ambiente in modo che punti alla tua macchina (export DISPLAY = 'hostname of pauls terminal': 0.0 per esempio)
KevinDTimm

@kevindtimm, buon punto - incorporerò le informazioni di @ Mikeage su ssh -X nella mia risposta.
Paul Tomblin,

1
Nel caso in cui sia necessario eseguire un'attività automatizzata che richiede la connessione a un server X, è possibile guardare xvfb, che crea un server X virtuale. Questo è molto utile per alcuni test batch o per l'esecuzione di test.
Wichert Akkerman

10

Lo stai eseguendo da un ambiente X11? Puoi usare una finestra di terminale, ma deve essere all'interno di X (o dopo un login grafico o eseguendo startx).

Se sei già in un ambiente grafico, prova a esportare DISPLAY =: 0 per bash come shell (bash, sh, ecc.) O setenv DISPLAY: 0 per shell basate su shell C (csh, tcsh, ecc.)

Se ti sei connesso da un'altra macchina tramite SSH, usi l'opzione -X per visualizzare l'interfaccia grafica sulla macchina su cui sei seduto (a condizione che ci sia un server X in esecuzione lì (come xming per Windows e il tuo Linux X standard server).


Ciao, sto eseguendo startx.
user42155

Oh giusto, Slackware. È ancora così nudo come lo era l'ultima volta che l'ho usato 10 anni fa?
Paul Tomblin

Si avvia ancora di default nel runlevel 3. Ovviamente, se gli dici di avviarsi nel runlevel 5, otterrai un bel menu di login di KDM assumendo che tu abbia installato KDE.
Adam Jaskiewicz

Grazie! su CentOS e SSH (mastice) utilizzati: export DISPLAY=:0
jacktrades

8

devi abilitare l' inoltro X11 in te PuTTy

per farlo apri PuTTy, vai su Connection => SSH => Tunnels e spunta la casella Enable X11 forwarding

Inoltre sudo al server ed esporta la variabile sottostante qui IP è l'IP della tua macchina locale

export DISPLAY=10.75.75.75:0.0

inserisci qui la descrizione dell'immagine


4

Un'altra cosa che potrebbe essere il problema in un caso simile a quello descritto - X non viene inoltrato e $ DISPLAY non è impostato quando il programma 'xauth' non è installato sul lato remoto. Puoi vedere che lo cerca quando esegui "ssh -Xv ip_address" e, se non viene trovato, fallisce, il che non viene visto a meno che non attivi la modalità dettagliata (un IMO fallito). Di solito puoi trovare "xauth" in un pacchetto con lo stesso nome.


3

Molto facile, ho avuto lo stesso problema, quindi quello che ho fatto è stato scaricare e installare un'app che mi avrebbe aiutato a visualizzare, quindi ho risolto l'errore.

Scarica questa app xming:

http://sourceforge.net/project/downloading.php ?

Installa, quindi usa le impostazioni su questo link:

http://www.geo.mtu.edu/geoschem/docs/putty_install.html o segui questi passaggi:

Installazione / configurazione di PuTTy e Xming

Una volta che PuTTy e Xming sono stati scaricati sul PC, installare secondo le rispettive istruzioni.

Configurazione di Xming

Una volta installato Xming, esegui l'applicazione chiamata 'XLaunch' e verifica che le impostazioni siano come mostrato:

  • selezionare le voci predefinite nelle finestre Impostazioni di visualizzazione, fare clic su Avanti
  • fare clic su Avanti nella finestra Tipo di sessione.
  • fare clic su Avanti nella finestra Parametri aggiuntivi (la casella di controllo Appunti avviso è vera)
  • salvare la configurazione e fare clic per terminare.

Configurazione di PuTTy

Dopo aver installato PuTTy, fare doppio clic sull'icona PuTTy sul desktop e configurare come mostrato:

Questo mostra la creazione di un profilo di accesso e il salvataggio.

  • Su ssh -> X11, fai clic sulla casella di controllo per abilitare l'inoltro X11.
  • nella casella di testo della posizione di visualizzazione di X, digitare localhost: 0.0

salvare il profilo quindi connettersi in remoto al server per eseguire il test.

Saluti!!!


Si prega di includere le informazioni essenziali dai collegamenti nella risposta stessa, perché alla fine potrebbero scomparire, rendendo la risposta inutile.
plamut

2

Ci sono molti modi per farlo. Ho fatto qualcosa di seguito conveniente per me e funziona sempre bene.

  1. Sul tuo server remoto, assicurati di installare xorg-x11-xauth, xorg-x11-font-utils, xorg-x11-fonts.
  2. Esegui Xming Server sul tuo desktop locale
  3. Su putty, prima di ssh sul server, abilitare l'inoltro X11 e impostare la posizione di visualizzazione su localhost: 0.0
  4. Sul server, viene generato il file .Xauthority e si noti che la variabile DISPLAY è già impostata.

    $ xauth elenco

    $ xauth add

Per provarlo, digita xclock o xeyes

Nota : per cambiare utente, copiare il file .Xauthority nella directory home del rispettivo utente ed esportare anche la variabile DISPLAY da quell'utente.


0

Ho avuto lo stesso problema in Ubuntu 14.04.01 quando ho provato a installare JDK 8 e Netbeans se avvio lo script all'interno di un terminale Byobu (forse con Screens succede lo stesso).

Basta uscire da Byobu e (in un terminale grafico) eseguire lo script.


0

Controllo iniziale.

1) Quando si esporta il DISPLAY su un'altra macchina, assicurarsi di aver immesso il comando xhost +su quella macchina. Questo comando permette ad altre macchine di esportare il proprio DISPLAY su questa macchina. Potrebbero esserci vincoli di sicurezza, basta saperlo. Hai bisogno di controllare ssh -X MachineIPnon richiederà xhost +?

2) Alcune volte JCONSOLEnon mostrerà tutto il suo processo, poiché quei processi JVM potrebbero essere eseguiti con utenti diversi e stai esportando il DISPLAY con un altro utente. quindi meglio seguireCD_DIR>sudo ./jconsole

3) In WAS (WEBSPHERE); jconsole non sarà in grado di connettere il suo processo del server java, quella volta vai fino al collegamento, quindi prova a collegarlo. Questo ha funzionato per me. Potrebbe essere che questa pagina stia inizializzando alcune variabili per consentire a jconsole di connettersi con quel server.

Console WAS> Server delle applicazioni> server1> Definizione processo> Java Virtual Machine


Ho riscontrato lo stesso problema con la macchina AIX (dove è disponibile solo l'interfaccia della riga di comando, non è presente l'interfaccia utente DISPLAY). Ho risolto installando

Client NX per Windows

Passaggio 1: tramite quella macchina Windows, mi sono collegato con la scatola unix in cui è disponibile la console GUI.
Passaggio 2: SSH alla casella AIX da quella casella UNIX.
Passaggio 3: impostare DISPLAY come "export DISPLAY = UNIXMACHINE: NXClientPORTConnectedMentionedOnTitle"
Passaggio 4: Ora, se lanciamo programmi che richiedono DISPLAY; sarà lanciato su questa scatola UNIX.

VNC

Se hai installato VNC su UNIX box in cui è disponibile la visualizzazione; quindi Windows e NX Client non sono necessari. Passaggio 1: utilizzare VNC per connettersi con la scatola Unix in cui è disponibile la console GUI.
Passaggio 2: SSH alla casella AIX da quella casella UNIX.
Step 3: imposta DISPLAY come "export DISPLAY = UNIXMACHINE: VNCPORT"
Step 4: Ora se lanciamo programmi che richiedono DISPLAY; sarà lanciato su questa scatola UNIX.

ALTRO

Passaggio 1: SSH alla casella AIX da quella casella UNIX.
Fase 2: impostare DISPLAY come "export DISPLAY = UNIXMACHINE: VNCPORT"
Fase 3: Ora se lanciamo programmi che richiedono DISPLAY; sarà lanciato su questa scatola UNIX.


0

Per coloro che stanno cercando di far funzionare un'applicazione X Window da Windows da Linux:

Quello che ha funzionato per me è stato impostare il server xming sulla mia macchina Windows, impostare l'opzione di inoltro X11 in putty quando mi collego all'host linux e inserire il mio indirizzo IP di Windows con la porta di visualizzazione e quindi la variabile di visualizzazione con il mio indirizzo IP di Windows: 0.0

Non dimenticare di aggiungere l'indirizzo IP degli host linux al file X0.hosts per assicurarti che il server xming accetti il ​​traffico da quell'host. Mi ci è voluto un po 'per capirlo.


-3

Non dimenticare di eseguire "host +" sulla tua macchina di visualizzazione "home", e quando esegui ssh sulla macchina stai facendo "ssh -x hostname"


14
Consiglio vivamente di non usare "xhost +" poiché disabilita efficacemente tutta la sicurezza sul tuo server X. ssh è abbastanza intelligente da usare xauth per configurare automaticamente l'autenticazione X11, quindi non dovrebbe essere necessario usare xhost.
Wichert Akkerman

Questo dovrebbe essere un commento, non un post. Solo perché non puoi commentare non significa che dovresti scrivere un brutto post.
Elliot A.
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.