122 votes

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

J'ai un script utilisant java pour se connecter à l'affichage X11 dans le port 10.0 sur 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, par exemple :

export DISPLAY=:10.0
export DISPLAY=localhost:10.0

J'ai également essayé 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 ? J'ai pensé que le serveur X ne fonctionnait pas et j'ai donc essayé de le faire. startx Il indique qu'il fonctionne à ce port

Mon système est Ubuntu server edition 10.04

8voto

CPU 100 Points 2269

Cela permettra d'y remédier :

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

7voto

loknath Points 133

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

Dans le cas où vous avez un X11 non fiable comme indiqué ci-dessous, essayez le drapeau -Y à la place (si vous faites confiance à l'hôte) :

Avertissement échec de la mise en place d'une redirection X11 non approuvée : les données de la clé xauth n'ont pas été générées

6voto

Overflow Points 15

Si vous essayez d'exporter l'affichage en utilisant su et que cela ne fonctionne toujours pas. Voici ce qui a fonctionné pour moi. Essayez la redirection X11 pour les utilisateurs sudo.

Connectez-vous à l'hôte distant en utilisant l'option -X de ssh.

# ssh -X root@remote-host

Lister maintenant l'ensemble des cuisines de l'utilisateur actuel.

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

Passez à un autre compte d'utilisateur en utilisant sudo. Ajoutez le cookie de la 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 du 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/

5voto

Bercove Points 348

Ceci a résolu mon problème

xhost +

mais sachez que 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 correcte.

4voto

Aleks Tkachenko Points 399

Premièrement : démarrer XQuartz

Deuxièmement : ssh -X user@ip_address

... : démarrer votre processus

Si vous vous connectez et que vous démarrez XQuartz, vous obtiendrez l'erreur suivante

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X