Java无法使用“localhost:10.0”作为DISPLAY变量的值连接到X11窗口服务器

123
我有一个使用Java连接本地端口10.0的X11显示屏的脚本,但是我一直遇到这个错误。
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)

我已经尝试了各种方法来解决这个问题,例如:

export DISPLAY=:10.0
export DISPLAY=localhost:10.0

我尝试使用端口0.0,但是仍然遇到了相同的错误。在尝试xhost之后。
xhost +local:all
xhost:  unable to open display ""
xhost:  unable to open display ":10.0"

我该如何解决这个问题?

我认为X Server没有运行,因此我尝试了startx,但它显示该端口正在运行。

我的系统是Ubuntu服务器版10.04。


如果您还通过ssh使用VNC查看器:在修改了xhost访问列表之后,有必要重新打开SSH连接。至少在我的当前设置(从VNC到Debian),我推断需要获取更新的xhost访问列表。 - Technophile
34个回答

0
当我在远程运行jconsole命令时,遇到了与您相同的错误。我想在运行在远程Linux主机上的jconsole中修改一个参数,我可以使用secureCRT登录主机,但终端会抛出此错误信息。幸运的是,当使用Putty时,一切正常。很奇怪...

0

0
我的问题与防火墙有关。暂时禁用它。
[编辑] 此外,服务器主机名指向另一个IP地址。将它设置为简单的localserver。strace xclock有助于调试此问题。

0
如果您在Hudson中看到此错误,请尝试从您的主目录中删除.java目录,这可能适用于您。

0

如果您在通过ssh登录的远程服务器上启动应用程序,则另一种方法是使用-x参数启动ssh,或者在您的/etc/ssh/ssh_config中添加ForwardX11 no。在这种情况下,ssh将不会创建DISPLAY环境变量。


0

我只是在运行./studio.sh之前没有退出root。一切都设置好了。


0
在我的情况下,这个错误与DISPLAY端口无关。我试图将一个XML文件加载到Windchill(一种PLM软件)中,但终端上只收到了上述错误信息。在日志文件中,我发现了报告,指出我的XML文件已损坏。也许有人遇到类似的问题,可以参考这个答案。

0
  1. 导出 localhost:1

  2. -Djava.awt.headless=true


0
运行下面的命令解决了我的问题。对我的情况有效。 unset DISPLAY

0
如果您正在从Jenkins触发代码,则启用选项“在构建之前启动Xvfb,并在之后关闭它”可能会有所帮助。这对我很有帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接