Java Mit 'localhost: 10.0' als Wert der Variablen DISPLAY kann keine Verbindung zum X11-Fensterserver hergestellt werden


93

Ich habe ein Skript, das Java verwendet, um eine Verbindung herzustellen und X11 in Port 10.0 bei localhost anzuzeigen

aber ich bekomme immer diesen fehler

java.lang.InternalError: Can't connect to X11 window server using 'localhost:10.0' as the value of the DISPLAY variable.
    at sun.awt.X11GraphicsEnvironment.initDisplay(Native Method)
    at sun.awt.X11GraphicsEnvironment.access$200(X11GraphicsEnvironment.java:62)
    at sun.awt.X11GraphicsEnvironment$1.run(X11GraphicsEnvironment.java:178)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.awt.X11GraphicsEnvironment.<clinit>(X11GraphicsEnvironment.java:142)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:186)
    at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:82)
    at sun.awt.X11.XToolkit.<clinit>(XToolkit.java:112)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:186)
    at java.awt.Toolkit$2.run(Toolkit.java:849)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.awt.Toolkit.getDefaultToolkit(Toolkit.java:841)
    at ij.io.Opener.openJpegOrGif(Opener.java:367)
    at ij.io.Opener.openImage(Opener.java:220)
    at ij.io.Opener.openImage(Opener.java:249)
    at ij.io.Opener.open(Opener.java:116)
    at ij.IJ.open(IJ.java:1112)
    at ij.macro.Functions.open(Functions.java:2006)
    at ij.macro.Functions.doFunction(Functions.java:129)
    at ij.macro.Interpreter.doStatement(Interpreter.java:205)
    at ij.macro.Interpreter.doBlock(Interpreter.java:515)
    at ij.macro.Interpreter.runUserFunction(Interpreter.java:278)
    at ij.macro.Interpreter.getFactor(Interpreter.java:1200)
    at ij.macro.Interpreter.getTerm(Interpreter.java:1162)
    at ij.macro.Interpreter.getExpression(Interpreter.java:1145)
    at ij.macro.Interpreter.getBooleanExpression(Interpreter.java:881)
    at ij.macro.Interpreter.getLogicalExpression(Interpreter.java:857)
    at ij.macro.Interpreter.getBoolean(Interpreter.java:850)
    at ij.macro.Interpreter.doIf(Interpreter.java:829)
    at ij.macro.Interpreter.doStatement(Interpreter.java:217)
    at ij.macro.Interpreter.doBlock(Interpreter.java:515)
    at ij.macro.Interpreter.doStatement(Interpreter.java:241)
    at ij.macro.Interpreter.doIf(Interpreter.java:831)
    at ij.macro.Interpreter.doStatement(Interpreter.java:217)
    at ij.macro.Interpreter.doStatements(Interpreter.java:195)
    at ij.macro.Interpreter.run(Interpreter.java:99)
    at ij.macro.Interpreter.run(Interpreter.java:65)
    at ij.macro.Interpreter.run(Interpreter.java:75)
    at ij.plugin.Macro_Runner.runMacro(Macro_Runner.java:127)
    at ij.plugin.Macro_Runner.runMacroFile(Macro_Runner.java:112)
    at ij.IJ.runMacroFile(IJ.java:103)
    at ij.ImageJ.main(ImageJ.java:517)

Ich habe alles versucht, um dieses Problem zu lösen, wie:

export DISPLAY=:10.0
export DISPLAY=localhost:10.0

Ich habe auch den Port 0.0 ausprobiert, aber ich bekomme immer den gleichen Fehler

nach dem Versuch xhost

xhost +local:all
xhost:  unable to open display ""
xhost:  unable to open display ":10.0"

Wie kann ich das beheben? Ich dachte, dass der X-Server nicht läuft, also habe ich versucht startx, zu sagen, dass er an diesem Port läuft

Mein System ist Ubuntu Server Edition 10.04

Antworten:


35

Dieser Befehl hat mir geholfen, das Problem zu lösen:

export DISPLAY=:0

39
unset DISPLAYhalf mir (mit export DISPLAY=:0bekam ich den FehlerCan't connect to X11 window server using ':0'
Beluchin

1
Wo hast du es
hingelegt

1
Nun, irgendwann - es wird unter Linux nicht funktionieren, dann ist es gut, Xvfb mit apt zu installieren und es auf einem beliebigen Bildschirm wie Xvfb: 1 auszuführen und dann die Variable in der Erstellungsphase zu setzen - export DISPLAY =: 1 -> das funktioniert perfekt.
Pankaj Kumar Katiyar


56

Sie müssen den -Djava.awt.headless=trueParameter beim Start angeben .


Vielen Dank, aber wo muss ich das genau angeben?
Elteroooo

1
Ausnahme im Thread "main" java.awt.He adlessException bei java.awt.GraphicsEnvironment.checkHeadless (GraphicsEnvironment.java:1 73)
Elteroooo

Führen Sie einen Sicherheitsmanager aus? Wenn ja, müssen Sie möglicherweise die Erlaubnis erteilen.
Michael-O

1
Dank des Problems war, dass der X Server in einem anderen Port ausgeführt wird
Elteroooo

1
Das Programm des Fragestellers möchte dies tun ij.io.Opener.openJpegOrGif, wir können davon ausgehen, dass dies wahrscheinlich eine grafische Benutzeroberfläche erfordert. Headless würde also zu einem weiteren Fehler führen : java.awt.HeadlessException.
Nicolas Raoul

40

Entfernen Sie die Variable DISPLAY

unset DISPLAY

Dies hilft in den meisten Fällen (z. B. beim Starten von Anwendungsservern oder anderen Java-basierten Tools) und vermeidet das Ändern all der vielen Befehlszeilen.

Es kann auch bequem sein, es dem .bash_profile für einen dedizierten App-Server / Tools-Benutzer hinzuzufügen.


1
es hat mir überhaupt nicht geholfen. Ich habe folgendes: AWT Kann keine Verbindung zum X11-Fensterserver herstellen mit ...
Pankaj Kumar Katiyar

Wenn Ihre App awt verwendet, müssen Sie DISPLAY richtig einstellen. Dies gilt für Apps, die awt nicht verwenden.
Bebbo

Wenn Sie damit herumspielen, stellen Sie sicher, dass Sie mobaXterm neu starten, nachdem Sie den Befehl unset in Ihre Bash-Datei eingefügt haben. Da die Anzeigevariable von zuvor festgelegt wird und nur das Ausführen Ihrer Bash-Datei dies nicht ändert.
Mrk


9

Falls jemand versucht, die automatisierten Komponententests über das Maven-Surefire-Plugin auf CI (Jenkins, ..) auszuführen und den oben genannten Fehler erhält, muss die Konfiguration des todsicheren Plugins aktualisiert werden:

<plugin>
     <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-surefire-plugin</artifactId>
     <version>${maven-surefire-plugin.version}</version>
     <configuration>
            <systemPropertyVariables>
                <java.awt.headless>true</java.awt.headless>
            </systemPropertyVariables>
      </configuration>
</plugin>

1
wie man es in gradle macht und wie man den Eigenschaftswert darin setzt.
Sobhit Sharma

7

Dies wird es beheben:

/usr/bin/java -Djava.awt.headless=true $Your_program

Habe meine nicht repariert
Alex Shnyrov

1
Das hat bei mir funktioniert. Danke dir. Ich habe den Fehler erhalten, weil ich Poi verwende.
dev4life

6

Für mich hat die Anmeldung als -Y statt -X funktioniert.

Wenn Sie X11 nicht vertrauenswürdig haben, wie unten gezeigt, versuchen Sie stattdessen das Flag -Y (wenn Sie dem Host vertrauen):

Warnung : Nicht vertrauenswürdiges X11-Weiterleitungssetup fehlgeschlagen: Xauth-Schlüsseldaten wurden nicht generiert


4

Nach mehreren Tagen vergeblicher Anstrengung, Glasfisch auf Himbeer-Pi 2 mit kopflosem Fedora 22 zu installieren, funktionierte Below für mich ohne Probleme

 unset DISPLAY
java -Djava.awt.headless=true -jar glassfissh-installer-v2ur2-b04-linux.jar

habe meine Hilfe von hier bekommen


3

Zuerst: Starten Sie XQuartz

Zweitens: ssh -X user @ ip_address

...: Starten Sie Ihren Prozess

Wenn Sie ssh und dann XQuartz starten, wird dieser Fehler angezeigt


3

Tun Sie dies zuerst entweder in der Erstellungsphase von Jenkins, wenn Sie / etc / profile verwenden oder festlegen:

unset DISPLAY
export DISPLAY=:0

Setzen Sie diese Eigenschaft dann entweder im Java-Code oder mit maven: -Djava.awt.headless = false


3

Dies hat mein Problem behoben

xhost +

Beachten Sie jedoch, dass xhost +die Authentifizierung vollständig deaktiviert wird und jeder auf alle Anwendungen auf Ihrem Bildschirm zugreifen kann.

xhost +si:localuser:root scheint bei ordnungsgemäßer Authentifizierung ähnlich zu funktionieren.


2

Ich habe Xming verwendet und einen ähnlichen Fehler erhalten. Folgende Schritte wurden unternommen, um das Problem zu beheben:

  1. Aktivieren Sie beim Start von Xming das Kontrollkästchen Keine Zugriffskontrolle.
  2. In Putty wurde der folgende Befehl ausgeführt: DISPLAY=XXX.XXX.XXX.XX:0.0; export DISPLAY

Ersetzen Sie XXX.XXX.XXX.XXdurch Ihre IP-Adresse.


Ich bin in der gleichen Konfiguration, aber es hat nicht funktioniert. Ich musste die IP, die X11 ausführt, in die Datei X0.hosts einfügen
Christophe Moine

2

Gelöst. Ich melde mich einfach ab und logge mich mit xorg ein!


1
export DISPLAY =: 0 oder export DISPLAY =: 1 hat bei mir nicht funktioniert. Das Abmelden und Anmelden hat es für mich gelöst.
Optimus

1

Michael-O gab einen nützlichen Ansatz zur Lösung des Problems. Eine andere Möglichkeit, dies zu lösen, besteht darin, den Server mit Putty Console zu starten.


Kannst du vielleicht ein bisschen mehr erklären, wie das funktionieren würde? (Ich habe noch nie Kitt verwendet)
mrk

1

In meinem Fall war kein Platz mehr in meiner Maschine und ich hatte das gleiche Problem. Manchmal könnte es das Platzproblem sein. Überprüfen Sie den Speicherplatz in Ihrer Linux / Unix-Umgebung und stellen Sie sicher, dass auf Ihrem Computer genügend Speicherplatz vorhanden ist.


1

Überprüfen Sie mit dem folgenden Befehl, ob die Variable $ DISPLAY gesetzt ist oder nicht:

echo $ DISPLAY

Wenn die Anzeigevariable nicht festgelegt ist, führen Sie den folgenden Befehl zum Festlegen aus (auch wenn sie festgelegt ist, können Sie für Ihre Sitzung einen untergeordneten Befehl verwenden).

export DISPLAY =: 0.0

im Kitt haben Sie auch die x-Anzeigeposition als: 0.0



0

Ich habe den gleichen Fehler bei Ihnen, wenn ich den Befehl jconsole auf remote ausführe. Ich möchte einen Parameter an jconsole ändern, der auf einem Remote-Linux-Host ausgeführt wird. Ich kann den Host mithilfe der SecureCRT anmelden. Das Terminal gibt diese Fehlerinformationen aus. Glücklicherweise ist es in Ordnung, wenn Sie den Kitt verwenden. Seltsam....


0

Wenn dieser Fehler in Hudson angezeigt wird, versuchen Sie, das Java-Verzeichnis aus Ihrem Home-Verzeichnis zu entfernen. Möglicherweise funktioniert es für Sie.


0

Wenn Sie die Anwendung auf einem Remote-Server starten, während Sie von ssh angemeldet sind, können Sie ssh auch mit einem -xParameter starten oder ForwardX11 noin Ihrem hinzufügen /etc/ssh/ssh_config. In diesem Fall erstellt ssh keine Umgebungsvariable DISPLAY.


0

Wenn Sie Ihren Code von Jenkins aus auslösen, kann es hilfreich sein, die Option "Xvfb vor dem Build starten und danach herunterfahren" zu aktivieren. Es hat mir geholfen.


0

Wechseln Sie zu einem anderen Benutzer und versuchen Sie es mit Ausnahme von root. Für mich geht das.



0

Installieren Sie für Ubuntu 17.10 X Virtual Frame Buffer (xvfb)

apt install xvfb

Und diese Zeilen zur Datei / etc / profile hinzugefügt ...

# Start the X virtual frame buffer (Xvfb)
if [ -f /usr/X11R6/bin/Xvfb ]; then
/usr/X11R6/bin/Xvfb :1 -screen 0 1366x768x32
fi

# Set the DISPLAY variable for the X virtual frame buffer (Xvfb)
export DISPLAY=localhost:1.0

2
Jetzt erhalte ich nur noch "Ausnahme im Thread" main "java.awt.AWTError: Es kann keine Verbindung zum X11-Fensterserver hergestellt werden, wobei 'localhost: 1.0' als Wert der DISPLAY-Variablen verwendet wird." unter Ubuntu 16.04. Die Xvfb-Binärdatei scheint sich jetzt unter / usr / bin zu befinden, nicht unter / usr / X11R6 / bin, gibt mir jedoch die Meldung "Bildschirm 0 (EE) konnte nicht hinzugefügt werden".
Chris Jenks

0

In meinem Fall hing dieser Fehler nicht mit dem DISPLAY-Port zusammen. Ich habe versucht, ein XML in Windchill (eine PLM-Software) zu laden und habe nur den obigen Fehler auf dem Terminal erhalten. In einer Protokolldatei fand ich den Bericht, dass meine XML-Datei beschädigt war . Vielleicht hat jemand ein ähnliches Problem und kann diese Antwort verwenden.


0

Mein Problem war mit der Firewall. Vorübergehend deaktiviert.

[BEARBEITEN] Und der Server-Hostname zeigte auf eine andere IP. Stellen Sie es einfach auf localsererver ein. strace xclockhalf beim Debuggen dieses Problems.


0

Ich habe dieses Problem behoben, indem ich mich mit Xorg angemeldet habe. Standardmäßig habe ich Wayland verwendet. Es sieht so aus, als ob Wayland die meisten Designfehler des Xorg beseitigt, der seine eigenen Probleme hat.Geben Sie hier die Bildbeschreibung ein


0

Wenn Sie versuchen, die Anzeige mit su zu exportieren, funktioniert dies immer noch nicht. Das hat bei mir funktioniert. Versuchen Sie die X11-Weiterleitung für Sudo-Benutzer.

Verbinden Sie den Remote-Host mit der Option -X mit ssh.

# ssh -X root@remote-host

Listen Sie nun das Coockie-Set für den aktuellen Benutzer auf.

# xauth list $DISPLAY
    node01.thegeekdiary.com/unix:10  MIT-MAGIC-COOKIE-1  dacbc5765ec54a1d7115a172147866aa
# echo $DSIPLAY
    localhost:10.0

Wechseln Sie mit sudo zu einem anderen Benutzerkonto. Fügen Sie dem sudo-Benutzer das Cookie aus der obigen Befehlsausgabe hinzu.

# sudo su - [user]
# xauth add node01.thegeekdiary.com/unix:10  MIT-MAGIC-COOKIE-1  dacbc5765ec54a1d7115a172147866aa

Exportieren Sie die Anzeige aus Schritt 2 erneut für den Sudo-Benutzer. Versuchen Sie den Befehl xclock, um zu überprüfen, ob die x Clientanwendungen wie erwartet funktionieren.

# export DISPLAY=localhost:10.0

Quelle: https://www.thegeekdiary.com/how-to-set-x11-forwarding-export-remote-display-for-users-who-switch-accounts-using-sudo/


-1

Für mich war das Problem, dass xorg-x11-xauth nicht installiert war. Ich habe es installiert und dann hat es funktioniert.

Die Pakete, die ich jetzt habe, sind:

  • libX11-common-1.6.3-2.el6.noarch
  • libX11-1.6.3-2.el6.i686
  • libX11-1.6.3-2.el6.x86_64
  • xorg-x11-drv-ati-firware-7.6.1-2.el6.noarch
  • xorg-x11-xauth-1.0.9-1.el6.x86_64
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.