Java Impossible de se connecter au serveur de fenêtres X11 en utilisant 'localhost: 10.0' comme valeur de la variable DISPLAY


93

J'ai un script utilisant java pour me connecter pour afficher X11 dans le port 10.0 à localhost

mais j'obtiens toujours cette erreur

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)

J'ai tout essayé pour résoudre ce problème comme:

export DISPLAY=:10.0
export DISPLAY=localhost:10.0

J'ai essayé aussi le port 0.0 mais j'obtiens toujours la même erreur

après avoir essayé xhost

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

comment puis-je résoudre ce problème? Je pensais que le serveur X ne fonctionnait pas, alors j'ai essayé startxqu'il s'exécute sur ce port

mon système est l'édition 10.04 du serveur Ubuntu

Réponses:


35

Cette commande m'a aidé à résoudre le problème:

export DISPLAY=:0

40
unset DISPLAYm'a aidé (avec export DISPLAY=:0j'ai eu l'erreurCan't connect to X11 window server using ':0'
beluchin

1
Où l'avez-vous mis
Spektakulatius

1
bien parfois - cela ne fonctionnera pas sous Linux, alors il est bon d'installer Xvfb avec apt et de l'exécuter sur n'importe quel écran comme: Xvfb: 1, puis définissez la variable en phase de construction - export DISPLAY =: 1 -> cela fonctionne parfaitement.
Pankaj Kumar Katiyar


57

Vous devez spécifier le -Djava.awt.headless=trueparamètre au démarrage.


Merci beaucoup mais où dois-je spécifier cela exactement?
Elteroooo

1
Exception dans le thread "main" java.awt.He adlessException à java.awt.GraphicsEnvironment.checkHeadless (GraphicsEnvironment.java:1 73)
Elteroooo

Exécutez-vous un gestionnaire de sécurité? Si tel est le cas, vous devrez peut-être accorder la permission.
Michael-O

1
merci, le problème était que le serveur X fonctionne dans un autre port
Elteroooo

1
Le programme du demandeur veut faire ij.io.Opener.openJpegOrGif, on peut deviner que cela nécessite probablement une interface graphique. Donc sans tête se traduirait par une autre erreur: java.awt.HeadlessException.
Nicolas Raoul

40

Supprimer la variable DISPLAY

unset DISPLAY

Cela aide dans la plupart des cas (par exemple le démarrage de serveurs d'applications ou d'autres outils basés sur Java) et évite de modifier autant de lignes de commande.

Il peut également être confortable de l'ajouter au .bash_profile pour un utilisateur dédié du serveur d'applications / des outils.


1
cela ne m'a pas aidé du tout. J'ai eu ceci: AWT ne peut pas se connecter au serveur de fenêtre X11 en utilisant ...
Pankaj Kumar Katiyar

Si votre application utilise awt, vous devez définir correctement DISPLAY. Ceci est pour les applications n'utilisant pas awt.
bebbo

Lorsque vous jouez avec cela, assurez-vous de redémarrer mobaXterm après avoir ajouté la commande unset dans votre bashfile. Étant donné que la variable Display sera définie à partir d'avant et que le simple fait d'exécuter votre fichier bash ne changera rien.
mrk


9

Si quelqu'un essaie d'exécuter les tests unitaires automatisés via maven-surefire-plugin sur CI (jenkins, ..), et obtient l'erreur mentionnée ci-dessus, assurez-vous de mettre à jour la configuration de votre plugin infaillible:

<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
comment le faire dans gradle et aussi comment y définir la valeur de la propriété.
Sobhit Sharma

7

Cela résoudra le problème:

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

N'a pas réparé le mien
Alex Shnyrov

1
Cela a fonctionné pour moi. Je vous remercie. J'obtenais l'erreur parce que j'utilise poi.
dev4life le

6

Pour moi, la connexion en tant que -Y au lieu de -X a fonctionné.

Si vous avez un X11 non approuvé comme indiqué ci-dessous, essayez plutôt l'option -Y (si vous faites confiance à l'hôte):

Avertissement : la configuration du transfert X11 non approuvée a échoué: les données de clé xauth ne sont pas générées


4

Après plusieurs jours d'efforts vains d'installation de Glassfish sur Raspberry Pi 2 avec fedora sans tête 22, ci-dessous a travaillé pour moi sans accroc

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

obtenu mon aide d' ici


3

Premièrement: démarrez XQuartz

Deuxième: ssh -X utilisateur @ adresse_ip

...: démarrez votre processus

si vous ssh puis démarrez XQuartz, vous obtiendrez cette erreur


3

Cela a résolu mon problème

xhost +

mais sachez que cela xhost +désactive complètement l'authentification et permet à tout le monde d'accéder à toutes les applications sur votre écran.

xhost +si:localuser:root semble fonctionner de la même manière avec une authentification appropriée.


2

J'utilisais Xming et j'ai eu une erreur similaire. Les étapes suivantes ont été prises pour résoudre le problème:

  1. Au lancement de Xming, cochez la case pas de contrôle d'accès.
  2. Dans putty a exécuté la commande suivante: DISPLAY=XXX.XXX.XXX.XX:0.0; export DISPLAY

Remplacez XXX.XXX.XXX.XXpar votre adresse IP.


Je suis dans la même configuration, mais cela n'a pas fonctionné. J'avais besoin d'ajouter l'IP exécutant X11 dans le fichier X0.hosts
Christophe Moine

2

Commencez par faire ceci soit dans la phase de construction de Jenkins si vous utilisez, soit dans / etc / profile:

unset DISPLAY
export DISPLAY=:0

puis définissez cette propriété en code java ou en utilisant maven: -Djava.awt.headless = false


2

Résolu. Je viens de me déconnecter et de me connecter avec xorg!


1
export DISPLAY =: 0 ou export DISPLAY =: 1 n'a pas fonctionné pour moi. La déconnexion et la connexion ont résolu le problème pour moi.
Optimus

1

Michael-O a donné une approche utile pour résoudre le problème. Une autre façon de résoudre ce problème consiste à démarrer le serveur avec Putty Console.


pouvez-vous peut-être expliquer un peu plus comment cela fonctionnerait? (Je n'ai jamais utilisé de mastic)
mrk

1

Dans mon cas, il n'y avait plus d'espace dans ma machine et j'ai été confronté au même problème. Parfois, cela pourrait être le problème de l'espace. Vérifiez l'espace dans votre environnement Linux / Unix et assurez-vous que votre machine dispose de suffisamment d'espace.


1

Si vous essayez d'exporter l'affichage à l'aide de su et que cela ne fonctionne toujours pas. C'est ce qui a fonctionné pour moi. Essayez le transfert X11 pour les utilisateurs sudo.

Connectez l'hôte distant à l'aide de l'option -X avec ssh.

# ssh -X root@remote-host

Maintenant, listez le jeu de coockie pour l'utilisateur actuel.

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

Basculez vers un autre compte utilisateur en utilisant sudo. Ajoutez le cookie de la sortie de commande ci-dessus à l'utilisateur sudo.

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

Exportez à nouveau l'affichage de l'étape 2 pour l'utilisateur sudo. Essayez la commande xclock pour vérifier si les applications client x fonctionnent comme prévu.

# export DISPLAY=localhost:10.0

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


1

vérifiez si la variable $ DISPLAY est définie ou non, avec la commande ci-dessous:

echo $ DISPLAY

si la variable d'affichage n'est pas définie, exécutez la commande ci-dessous pour définir, (même si elle est définie, vous pouvez en avoir en dessous pour votre session)

export DISPLAY =: 0.0

dans le mastic ont également l'emplacement d'affichage x comme: 0.0



0

Je rencontre la même erreur avec vous lorsque j'exécute la commande jconsole à distance. Je souhaite modifier un paramètre sur jconsole qui s'exécute sur un hôte Linux distant, je peux me connecter à l'hôte en utilisant secureCRT, le terminal jette ces informations d'erreur. Heureusement, lorsque vous utilisez le mastic, tout va bien. Bizarre....


0

Si vous voyez cette erreur dans Hudson, essayez de supprimer le répertoire .java de votre répertoire personnel, cela peut fonctionner pour vous.


0

Si vous démarrez l'application sur un serveur distant alors que vous êtes connecté par ssh, une autre façon serait de démarrer ssh avec le -xparamètre ou d'ajouter ForwardX11 novotre fichier /etc/ssh/ssh_config. Dans ce cas, ssh ne créera pas la variable d'environnement DISPLAY.


0

Si vous déclenchez votre code à partir de Jenkins, l'activation de l'option «Démarrer Xvfb avant la compilation et l'arrêter après» peut aider. Ça m'a aidé.


0

passez à un autre utilisateur et essayez sauf root. ça marche pour moi.


0

Je ne me suis tout simplement pas déconnecté de root avant de lancer ./studio.sh Tout est réglé.


0

Pour Ubuntu 17.10, installez le tampon de trame virtuel X (xvfb)

apt install xvfb

Et ajouté ces lignes au fichier / 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
Maintenant, j'obtiens juste "Exception dans le thread" main "java.awt.AWTError: Impossible de se connecter au serveur de fenêtres X11 en utilisant 'localhost: 1.0' comme valeur de la variable DISPLAY." sur Ubuntu 16.04. Le binaire Xvfb semble maintenant se trouver dans / usr / bin, pas dans / usr / X11R6 / bin, mais me donne "Impossible d'ajouter l'écran 0 (EE)".
Chris Jenks

0

Dans mon cas, cette erreur n'était pas liée au port DISPLAY. J'essayais de charger un XML dans Windchill (un logiciel PLM) et je n'ai reçu que l'erreur ci-dessus sur le terminal. Dans un fichier journal, j'ai trouvé le rapport indiquant que mon fichier XML était corrompu . Peut-être que quelqu'un a un problème similaire et peut utiliser cette réponse.


0

Le mien problème était avec le pare-feu. Désactivé temporairement.

[EDIT] Et, le nom d'hôte du serveur pointait vers une autre adresse IP. Réglez-le simplement sur localserver. strace xclockaidé à déboguer ce problème.


0

J'ai résolu ce problème en me connectant à l'aide de Xorg. Par défaut, j'ai utilisé Wayland. Il semble que Wayland élimine la plupart des défauts de conception du Xorg, il a ses propres problèmes.entrez la description de l'image ici


-1

Pour moi, le problème était que xorg-x11-xauth n'était pas installé. Je l'ai installé et cela a fonctionné.

Les packages que j'ai maintenant sont:

  • 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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.