"Keine X11 DISPLAY-Variable" - was bedeutet das?


101

Ich versuche, eine Java-Anwendung auf meinem Linux-Computer (Slackware) zu installieren.

Ich habe den folgenden Fehler erhalten und verstehe ihn nicht.

Können Sie mir raten, wie ich das Problem angehen soll? Danke dir.

Folgendes bekomme ich: (Ich sehe, dass eine X11 DISPLAY- Variable festgelegt werden muss, aber welchen Wert soll ich geben und wie?)

~$ 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)

Ich habe das gleiche Problem, es funktioniert perfekt auf der Konsole, aber wenn ich Eclipse benutze, löst es die gleiche Ausnahme aus. Ich habe sogar die folgenden Codezeilen eingefügt: Process proc_exporting = Runtime.getRuntime (). exec ("sudo export DISPLAY =: 0.0") ;; funktioniert immer noch nicht
hb.Sara

3
Keine der Antworten enthält die Informationen, die zur Lösung dieses Problems erforderlich sind, wenn über puTTY eine Remoteverbindung zu einer Konsole hergestellt wird. Jede Antwort, die sich mit SSH befasst, erklärt nicht wirklich, wie es funktioniert. Kennt jemand eine Frage, die dies anspricht?

Antworten:


119

Wenn Sie sich auf dem Hauptdisplay befinden, dann

export DISPLAY=:0.0

oder wenn Sie csh oder tcsh verwenden

setenv DISPLAY :0.0

bevor Sie Ihre App ausführen.

Eigentlich bin ich überrascht, dass es nicht automatisch eingestellt wird. Versuchen Sie, diese Anwendung von einem nicht grafischen Terminal aus zu starten? Wenn nicht, haben Sie das Standardprofil, .login, .bashrc oder .cshrc geändert?

Beachten Sie, dass das Setzen von DISPLAY auf: 0.0 voraussetzt, dass Sie wie gesagt am Hauptdisplay sitzen oder dass das Hauptdisplay zumindest mit Ihrer Benutzer-ID angemeldet ist. Wenn es nicht angemeldet ist oder eine andere Benutzer-ID hat, schlägt dies fehl.

Wenn Sie von einem anderen Computer kommen und sich auf der Hauptanzeige dieses Computers befinden und dort X ausgeführt wird, können Sie mit "ssh -X Hostname" eine Verbindung zu diesem Host herstellen, und ssh leitet die X-Anzeige zurück . ssh stellt außerdem sicher, dass die Umgebungsvariable DISPLAY korrekt eingestellt ist (vorausgesetzt, sie wird in den verschiedenen oben genannten Punktdateien nicht durcheinander gebracht). In einer "ssh -X" -Sitzung hat die Umgebungsvariable DISPLAY einen Wert wie "localhost: 11.0", der auf den Socket verweist, den ssh zu Ihrer lokalen Box tunnelt.


Hallo, vielen Dank, der erste hat für mich funktioniert. Ja, ich starte es von einem nicht grafischen Terminal aus.
user42155

Es hört sich jedoch so an, als ob es auf das Grafikdisplay zugreifen möchte. Achten Sie darauf, dass Sie es nicht ausführen, wenn die Grafikanzeige nicht verfügbar ist oder zu einer anderen Benutzer-ID gehört.
Paul Tomblin

3
Beachten Sie, dass dies funktioniert hat, weil Sie sich auf der Konsole befinden / befanden. Wenn Sie sich auf einem anderen Terminal befinden, müssen Sie einen X-Server auf dem Terminal ausführen und dann die Umgebung so einstellen, dass sie auf Ihren Computer verweist (Export DISPLAY = 'Hostname des Paul-Terminals': z. B. 0.0)
KevinDTimm

@kevindtimm, Guter Punkt - Ich werde die Informationen von @ Mikeage über ssh -X in meine Antwort aufnehmen.
Paul Tomblin

1
Wenn Sie eine automatisierte Aufgabe ausführen müssen, für die eine Verbindung zu einem X-Server hergestellt werden muss, können Sie sich xvfb ansehen, mit dem ein virtueller X-Server erstellt wird. Dies ist sehr nützlich für einige Batch-Tests oder laufende Tests.
Wichert Akkerman

10

Führen Sie dies in einer X11-Umgebung aus? Sie können ein Terminalfenster verwenden, das sich jedoch innerhalb von X befinden muss (entweder nach einer grafischen Anmeldung oder durch Ausführen von startx).

Wenn Sie sich bereits in einer grafischen Umgebung befinden, versuchen Sie, DISPLAY =: 0 für bash-ähnliche Shells (bash, sh usw.) oder setenv DISPLAY: 0 für C-Shell-basierte Shells (csh, tcsh usw.) zu exportieren.

Wenn Sie über SSH eine Verbindung von einem anderen Computer aus hergestellt haben, verwenden Sie die Option -X, um die grafische Oberfläche auf dem Computer anzuzeigen, auf dem Sie sitzen (vorausgesetzt, dort wird ein X-Server ausgeführt (z. B. xming für Windows und Ihr Standard-Linux X) Server).


Hallo, ich laufe startx.
user42155

Oh, richtig, Slackware. Ist es immer noch so barebones wie damals, als ich es vor 10 Jahren das letzte Mal benutzt habe?
Paul Tomblin

Es startet immer noch standardmäßig in Runlevel 3. Wenn Sie es anweisen, in Runlevel 5 zu starten, erhalten Sie natürlich ein hübsches KDM-Anmeldemenü, vorausgesetzt, Sie haben KDE installiert.
Adam Jaskiewicz

Vielen Dank! auf CentOS und SSH (Kitt) verwendet: export DISPLAY=:0
Jacktrades

8

Sie müssen die X11-Weiterleitung in Ihrem PuTTy aktivieren

Öffnen Sie dazu PuTTy, gehen Sie zu Verbindung => SSH => Tunnel und aktivieren Sie das Kontrollkästchen X11-Weiterleitung aktivieren

Auch sudo to server und exportiere die folgende Variable hier IP ist die IP deines lokalen Rechners

export DISPLAY=10.75.75.75:0.0

Geben Sie hier die Bildbeschreibung ein


4

Eine weitere Sache, die in einem ähnlichen Fall wie beschrieben das Problem sein könnte: X wird nicht weitergeleitet und $ DISPLAY wird nicht gesetzt, wenn das Programm 'xauth' nicht auf der Remote-Seite installiert ist. Sie können sehen, dass es danach sucht, wenn Sie "ssh -Xv ip_address" ausführen und, falls es nicht gefunden wird, fehlschlägt. Dies wird nur angezeigt, wenn Sie den ausführlichen Modus aktivieren (eine fehlgeschlagene IMO). Normalerweise finden Sie 'xauth' in einem Paket mit demselben Namen.


3

Sehr einfach, hatte das gleiche Problem, dann habe ich eine App heruntergeladen und installiert, die bei der Anzeige helfen würde, und dann den Fehler behoben.

Laden Sie diese App herunter xming:

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

Installieren Sie und verwenden Sie die Einstellungen unter diesem Link:

http://www.geo.mtu.edu/geoschem/docs/putty_install.html oder folgen Sie diesen Schritten:

Installieren / Konfigurieren von PuTTy und Xming

Nachdem PuTTy und Xming auf den PC heruntergeladen wurden, installieren Sie sie gemäß den entsprechenden Anweisungen.

Xming konfigurieren

Führen Sie nach der Installation von Xming die Anwendung "XLaunch" aus und überprüfen Sie, ob die Einstellungen wie folgt sind:

  • Wählen Sie Standardeinträge in den Fenstern Anzeigeeinstellungen und klicken Sie auf Weiter
  • Klicken Sie im Fenster Sitzungstyp auf Weiter.
  • Klicken Sie auf Weiter im Fenster Zusätzliche Parameter (Kontrollkästchen Zwischenablage beachten ist wahr)
  • Speichern Sie die Konfiguration und klicken Sie zum Abschluss.

PuTTy konfigurieren

Doppelklicken Sie nach der Installation von PuTTy auf das PuTTy-Symbol auf dem Desktop und konfigurieren Sie es wie folgt:

Dies zeigt, wie Sie ein Anmeldeprofil erstellen und dann speichern.

  • Aktivieren Sie unter ssh -> X11 das Kontrollkästchen, um die X11-Weiterleitung zu aktivieren.
  • Geben Sie im Textfeld X-Anzeigestandort localhost ein: 0.0

Speichern Sie das Profil und stellen Sie dann eine Remoteverbindung zum Server her, um es zu testen.

Prost!!!


Bitte fügen Sie die wesentlichen Informationen aus den Links in die Antwort selbst ein, da sie möglicherweise irgendwann tot sind und die Antwort unbrauchbar wird.
Plamut

1

Es gibt viele Möglichkeiten, dies zu tun. Ich habe unten etwas Bequemes für mich getan und funktioniert immer gut.

  1. Stellen Sie sicher, dass Sie auf Ihrem Remote-Server xorg-x11-xauth, xorg-x11-font-utils und xorg-x11-fonts installieren.
  2. Führen Sie den Xming-Server auf Ihrem lokalen Desktop aus
  3. Aktivieren Sie auf Putty vor ssh zum Server die X11-Weiterleitung und setzen Sie den Anzeigeort auf localhost: 0.0
  4. Auf dem Server wird eine .Xauthority-Datei generiert, und Sie müssen beachten, dass die Variable DISPLAY bereits festgelegt ist.

    $ xauth Liste

    $ xauth hinzufügen

Geben Sie zum Testen xclock oder xeyes ein

Hinweis : Um den Benutzer zu wechseln, kopieren Sie die .Xauthority-Datei in das Ausgangsverzeichnis des jeweiligen Benutzers und exportieren Sie auch die DISPLAY-Variable von diesem Benutzer.


0

Ich hatte das gleiche Problem in Ubuntu 14.04.01, als ich versuchte, JDK 8 und Netbeans zu installieren, wenn ich das Skript in einem Byobu-Terminal starte (möglicherweise passiert bei Screens dasselbe).

Beenden Sie einfach Byobu und führen Sie das Skript (in einem grafischen Terminal) aus.


0

Erstprüfung.

1) Wenn Sie das DISPLAY auf einen anderen Computer exportieren, stellen Sie sicher, dass Sie den Befehl xhost +auf diesem Computer eingegeben haben . Mit diesem Befehl kann ein anderer Computer sein DISPLAY auf diesem Computer exportieren. Es kann Sicherheitsbeschränkungen geben, wissen Sie es einfach. Notwendigkeit zu überprüfen ssh -X MachineIPwird nicht erforderlichxhost + ?

2) Manchmal JCONSOLE Manchmal wird nicht der gesamte Prozess angezeigt, da diese JVM-Prozesse möglicherweise mit einem anderen Benutzer ausgeführt werden und Sie das DISPLAY mit einem anderen Benutzer exportieren. also besser folgenCD_DIR>sudo ./jconsole

3) In WAS (WEBSPHERE); jconsole kann seinen Java-Server-Prozess nicht verbinden. In diesem Fall müssen Sie nur die Verbindung herstellen und dann versuchen, eine Verbindung herzustellen. Das hat bei mir funktioniert. Möglicherweise werden auf dieser Seite einige Variablen initialisiert, damit sich jconsole mit diesem Server verbinden kann.

WAS-Konsole> Anwendungsserver> Server1> Prozessdefinition> Java Virtual Machine


Ich habe das gleiche Problem mit der AIX-Maschine (wo nur die Befehlszeilenschnittstelle verfügbar ist, gibt es keine DISPLAY-Benutzeroberfläche) festgestellt. Ich habe durch die Installation gelöst

NX Client für Windows

Schritt 1: Über diesen Windows-Computer habe ich eine Verbindung mit der Unix-Box hergestellt, auf der die GUI-Konsole verfügbar ist.
Schritt 2: SSH zur AIX-Box von dieser UNIX-Box.
Schritt 3: Setzen Sie DISPLAY wie "export DISPLAY = UNIXMACHINE: NXClientPORTConnectedMentionedOnTitle".
Schritt 4: Wenn wir nun Programme starten, für die DISPLAY erforderlich ist; Es wird auf dieser UNIX-Box gestartet.

VNC

Wenn Sie VNC auf einer UNIX-Box installiert haben, auf der eine Anzeige verfügbar ist; dann ist Windows und NX Client nicht erforderlich. Schritt 1: Verwenden Sie VNC, um eine Verbindung mit der Unix-Box herzustellen, in der die GUI-Konsole verfügbar ist.
Schritt 2: SSH zur AIX-Box von dieser UNIX-Box.
Schritt 3: Setzen Sie DISPLAY wie "export DISPLAY = UNIXMACHINE: VNCPORT".
Schritt 4: Wenn wir nun Programme starten, für die DISPLAY erforderlich ist; Es wird auf dieser UNIX-Box gestartet.

SONST

Schritt 1: SSH zur AIX-Box von dieser UNIX-Box.
Schritt 2: Setzen Sie DISPLAY wie "export DISPLAY = UNIXMACHINE: VNCPORT".
Schritt 3: Wenn wir nun Programme starten, für die DISPLAY erforderlich ist; Es wird auf dieser UNIX-Box gestartet.


0

Für diejenigen, die versuchen, eine X Window-Anwendung unter Linux unter Windows zum Laufen zu bringen:

Was für mich funktioniert hat, war, den xming-Server auf meinem Windows-Computer einzurichten, die X11-Weiterleitungsoption in putty zu setzen, wenn ich eine Verbindung zum Linux-Host herstelle, und meine Windows-IP-Adresse mit dem Anzeigeport und dann die Anzeigevariable mit meiner Windows-IP-Adresse einzugeben: 0.0

Vergessen Sie nicht, die IP-Adresse des Linux-Hosts zur Datei X0.hosts hinzuzufügen, um sicherzustellen, dass der xming-Server Datenverkehr von diesem Host akzeptiert. Ich habe eine Weile gebraucht, um das herauszufinden.


-3

Vergessen Sie nicht, "host +" auf Ihrem "Heim" -Anzeigemaschinen auszuführen, und wenn Sie ssh zum Computer ausführen, führen Sie "ssh -x Hostname" aus.


14
Ich würde dringend empfehlen, "xhost +" nicht zu verwenden, da die Sicherheit auf Ihrem X-Server effektiv deaktiviert wird. ssh ist intelligent genug, um mit xauth die X11-Authentifizierung automatisch einzurichten, sodass xhost nicht verwendet werden muss.
Wichert Akkerman

Dies sollte ein Kommentar sein, kein Beitrag. Nur weil du keinen Kommentar abgeben kannst, heißt das nicht, dass du einen schlechten Beitrag schreiben solltest.
Elliot A.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.