Java no se puede conectar al servidor de ventanas X11 usando 'localhost: 10.0' como el valor de la variable DISPLAY


94

Tengo un script que usa java para conectarme para mostrar X11 en el puerto 10.0 en localhost

pero siempre obtengo este error

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)

He intentado todo para resolver este problema como:

export DISPLAY=:10.0
export DISPLAY=localhost:10.0

Probé también el puerto 0.0 pero siempre obtengo el mismo error

después de probar xhost

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

¿Cómo puedo solucionar esto? Pensé que el servidor X no se está ejecutando, así que lo intenté, startxdice que está funcionando en ese puerto

mi sistema es Ubuntu Server Edition 10.04

Respuestas:


36

Este comando me ayudó a resolver el problema:

export DISPLAY=:0

40
unset DISPLAYme ayudó (con export DISPLAY=:0recibí el errorCan't connect to X11 window server using ':0'
beluchin

1
¿Dónde lo pusiste
Spektakulatius

1
bueno, en algún momento, no funcionará en Linux, entonces es bueno instalar Xvfb con apt y ejecutarlo en cualquier pantalla como: Xvfb: 1 y luego establecer la variable en la fase de compilación - exportar DISPLAY =: 1 -> esto funciona perfectamente.
Pankaj Kumar Katiyar


57

Debe especificar el -Djava.awt.headless=trueparámetro en el momento del inicio.


Muchas gracias, pero ¿dónde tengo que especificar esto exactamente?
Elteroooo

1
Excepción en el hilo "main" java.awt.He adlessException en java.awt.GraphicsEnvironment.checkHeadless (GraphicsEnvironment.java:1 73)
Elteroooo

¿Tiene un administrador de seguridad? Si es así, quizás tenga que otorgar permiso para.
Michael-O

1
gracias el problema fue que el servidor X se está ejecutando en otro puerto
Elteroooo

1
El programa del autor de la pregunta quiere hacer ij.io.Opener.openJpegOrGif, podemos adivinar que probablemente requiera una GUI. Así que sin cabeza daría lugar a otro error: java.awt.HeadlessException.
Nicolas Raoul

41

Eliminar la variable DISPLAY

unset DISPLAY

Esto ayuda en la mayoría de los casos (por ejemplo, iniciar servidores de aplicaciones u otras herramientas basadas en Java) y evita modificar tantas líneas de comando.

También puede ser cómodo agregarlo al .bash_profile para un usuario de herramientas / servidor de aplicaciones dedicado.


1
no me ayudó en absoluto. Tengo esto: AWT no se puede conectar al servidor de ventana X11 usando ...
Pankaj Kumar Katiyar

Si su aplicación usa awt, entonces debe configurar DISPLAY correctamente. Esto es para aplicaciones que no usan awt.
bebbo

Cuando juegue con esto, asegúrese de reiniciar mobaXterm después de agregar el comando unset en su archivo bash. Dado que la variable Display se establecerá desde antes y solo ejecutar su archivo bash no cambiará eso.
mrk


9

En caso de que alguien intente ejecutar las pruebas unitarias automatizadas a través de maven-surefire-plugin en CI (jenkins, ..) y obtenga el error mencionado anteriormente, asegúrese de actualizar la configuración de su complemento surefire:

<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
cómo hacerlo en gradle y también cómo establecer el valor de la propiedad en él.
Sobhit Sharma

8

Esto lo arreglará:

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


1
Esto funcionó para mí. Gracias. Recibí el error porque estoy usando poi.
dev4life

6

Para mí, iniciar sesión como -Y en lugar de -X funcionó.

En caso de que tenga X11 que no es de confianza como se muestra a continuación, intente con la marca -Y en su lugar (si confía en el host):

Advertencia : la configuración de reenvío X11 no confiable falló: los datos de la clave xauth no se generaron


5

Después de varios días de esfuerzo inútil de instalar glassfish en raspberry pi 2 con fedora 22 sin cabeza, Below funcionó para mí sin problemas

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

obtuve mi ayuda de aqui


4

Primero: inicie XQuartz

Segundo: ssh -X user @ ip_address

...: inicie su proceso

si ssh y luego inicia XQuartz obtendrá ese error


3

Primero haga esto en la fase de compilación de Jenkins si usa o configura en / etc / profile:

unset DISPLAY
export DISPLAY=:0

luego configure esta propiedad en código java o usando maven: -Djava.awt.headless = false


3

Esto solucionó mi problema

xhost +

pero tenga en cuenta que xhost +desactiva completamente la autenticación y permite que todos accedan a todas las aplicaciones en su pantalla.

xhost +si:localuser:root parece funcionar de manera similar con la autenticación adecuada.


2

Estaba usando Xming y obtuve un error similar. Se tomaron los siguientes pasos para solucionar el problema:

  1. En el lanzamiento de Xming, marque la casilla sin control de acceso.
  2. En masilla ejecutó el siguiente comando: DISPLAY=XXX.XXX.XXX.XX:0.0; export DISPLAY

Reemplace XXX.XXX.XXX.XXcon su dirección IP.


Estoy en la misma configuración, sin embargo, no funcionó. Necesitaba agregar la IP que ejecuta X11 en el archivo X0.hosts
Christophe Moine

2

Resuelto. ¡Acabo de cerrar la sesión e iniciar sesión con xorg!


1
exportar DISPLAY =: 0 o exportar DISPLAY =: 1 no funcionó para mí. Cerrar sesión e iniciar sesión me resolvió.
Optimus

2

Si está intentando exportar la pantalla con su y aún no funciona. Esto es lo que funcionó para mí. Pruebe el reenvío X11 para usuarios de sudo.

Conecte el host remoto usando la opción -X con ssh.

# ssh -X root@remote-host

Ahora enumere el juego de coockie para el usuario actual.

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

Cambie a otra cuenta de usuario usando sudo. Agregue la cookie del resultado del comando anterior al usuario sudo.

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

Vuelva a exportar la pantalla del paso 2 para el usuario de sudo. Pruebe el comando xclock para verificar si las aplicaciones cliente x funcionan como se esperaba.

# export DISPLAY=localhost:10.0

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


1

Si ve este error en Hudson, intente eliminar el directorio .java de su directorio de inicio, puede funcionar para usted.


1

Michael-O dio un enfoque útil para resolver el problema. Otra forma de resolver esto es iniciando el servidor con Putty Console.


¿Puedes explicar un poco más cómo funcionaría eso? (Nunca he usado masilla)
mrk

1

En mi caso, no quedaba espacio en mi máquina y me enfrenté al mismo problema. Algunas veces podría ser el problema del espacio. Verifique el espacio en su entorno Linux / Unix y asegúrese de que su máquina tenga suficiente espacio.


1

verifique si la variable $ DISPLAY está configurada o no, con el siguiente comando:

echo $ DISPLAY

si la variable de visualización no está configurada, ejecute el siguiente comando para configurarla (incluso si está configurada, puede tener una debajo para su sesión)

exportar DISPLAY =: 0.0

en masilla también tienen la ubicación de visualización x como: 0.0



0

Me encuentro con el mismo error con usted cuando ejecuto el comando jconsole en el control remoto. Quiero modificar un parámetro en jconsole que se ejecuta en un host Linux remoto, puedo iniciar sesión en el host, usar secureCRT, el terminal arroja esta información de error. Afortunadamente, cuando se usa Putty, está bien. Extraño....


0

Si inicia la aplicación en un servidor remoto mientras está conectado con ssh, otra forma sería iniciar ssh con el -xparámetro o agregar ForwardX11 nosu archivo /etc/ssh/ssh_config. En este caso, ssh no creará la variable de entorno DISPLAY.


0

Para mí, el problema fue que xorg-x11-xauth no estaba instalado. Lo instalé y luego funcionó.

Los paquetes que tengo ahora son:

  • 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

0

Si está activando su código desde Jenkins, habilitar la opción "Iniciar Xvfb antes de la compilación y apagarlo después" podría ayudar. Me ayudó.


0

cambie a otro usuario e intente excepto root. esto funciona para mi.



0

Para Ubuntu 17.10 Instale X virtual frame buffer (xvfb)

apt install xvfb

Y agregué estas líneas al archivo / etc / profile ...

# 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
Ahora acabo de obtener "Excepción en el hilo" principal "java.awt.AWTError: No se puede conectar al servidor de ventanas X11 usando 'localhost: 1.0' como el valor de la variable DISPLAY". en Ubuntu 16.04. El binario Xvfb ahora parece estar ubicado en / usr / bin, no en / usr / X11R6 / bin, pero me da "No se pudo agregar la pantalla 0 (EE)".
Chris Jenks

0

En mi caso, este error no estaba relacionado con el puerto DISPLAY. Estaba intentando cargar un XML en Windchill (un software PLM) y solo recibí el error anterior en la terminal. En un archivo de registro encontré el informe de que mi archivo XML estaba dañado . Quizás alguien tenga un problema similar y pueda usar esta respuesta.


0

El problema mío era el cortafuegos. Lo desactivó temporalmente.

[EDITAR] Y, el nombre de host del servidor apuntaba a otra IP. Configúrelo simplemente como servidor local. strace xclockayudó a depurar este problema.


0

He solucionado este problema al iniciar sesión con Xorg. Por defecto, he usado Wayland. Parece que Wayland elimina la mayoría de los defectos de diseño del Xorg, tiene sus propios problemas.ingrese la descripción de la imagen aquí


0

Para mí, nada de lo anterior funcionó, pero después de una larga búsqueda, esto funcionó para mí.

export DISPLAY=localhost:20.0
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.