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

时间:2012-04-15 20:26:54

标签: java linux x11 xserver

我有一个脚本使用java连接到localhost

端口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服务器没有运行所以我试过startx它说它在那个端口运行

我的系统是Ubuntu服务器版10.04

31 个答案:

答案 0 :(得分:49)

您需要在启动时指定-Djava.awt.headless=true参数。

答案 1 :(得分:34)

删除DISPLAY变量

unset DISPLAY

这在大多数情况下都有帮助(例如,启动应用程序服务器或其他基于java的工具),并避免修改所有那么多命令行。

将它添加到专用的app-server / tools用户的.bash_profile中也很舒服。

答案 2 :(得分:32)

这个命令帮助我解决了这个问题:

export DISPLAY=:0

答案 3 :(得分:13)

我认为您正在使用sudo模式。请检查用户模式并再试一次

答案 4 :(得分:9)

如果有人试图通过CI上的maven-surefire-plugin运行自动单元测试(jenkins,..),并且得到上述错误,请务必更新您的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>

答案 5 :(得分:6)

这将解决它:

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

答案 6 :(得分:4)

经过几天徒劳的努力,用无头软呢帽22在覆盆子pi 2上安装玻璃鱼,下面为我工作顺利

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

here

获得了我的帮助

答案 7 :(得分:3)

我以 -Y 而非-X工作方式登录。

如果您有不受信任的X11,如下所示,请尝试使用-Y标志(如果您信任主机):

警告:不受信任的X11转发设置失败:未生成xauth密钥数据

答案 8 :(得分:3)

如果您尝试使用su导出显示,但仍然不起作用。 这对我有用。尝试对sudo用户进行X11转发。

使用-X选项和ssh连接远程主机。

# ssh -X root@remote-host

现在列出为当前用户设置的coockie。

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

使用sudo切换到另一个用户帐户。将上述命令输出中的cookie添加到sudo用户。

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

再次为sudo用户导出步骤2中的显示。尝试使用命令xclock验证x客户端应用程序是否按预期工作。

# export DISPLAY=localhost:10.0

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

答案 9 :(得分:3)

首先:启动XQuartz

第二名:ssh -X user @ ip_address

...:开始你的过程

如果您使用ssh然后启动XQuartz,您将收到该错误

答案 10 :(得分:2)

已解决。我只是注销并使用xorg登录!

答案 11 :(得分:1)

我在使用的Linux服务器上遇到了同样的问题。将Java连接到X11显示器只能在头节点上工作,而不能在其他任何节点上工作。与管理员联系后,事实证明我们的作业计划系统(SLURM)的当前版本不支持X11转发。他们必须更新SLURM(新版本的SLURM支持它)才能正常工作。

答案 12 :(得分:1)

在我的情况下,我的机器中没有剩余空间,我遇到了同样的问题。 有时可能是空间问题。检查Linux / Unix环境中的空间,确保您的计算机有足够的空间。

答案 13 :(得分:1)

我正在使用Xming并遇到类似的错误。采取以下步骤来解决问题:

  1. 在Xming启动时选中该框没有访问控制。
  2. 在putty中运行以下命令:XXX.XXX.XXX.XX
  3. foreach ($rowData as $row) : $id = $row->_kpnID; ?> <tr class="editable details-control collapsed" data-values="action" id="{{ $id }}"... 替换为您的IP地址。

答案 14 :(得分:1)

这解决了我的问题

xhost +

但是请注意,xhost +会完全停用身份验证,并允许所有人访问屏幕上的所有应用程序。

xhost +si:localuser:root似乎与正确的身份验证相似。

答案 15 :(得分:1)

使用以下命令检查是否设置了$ DISPLAY变量:

回显$ DISPLAY

如果未设置显示变量,请运行以下命令进行设置(即使已设置,会话中的变量也可以低于1)

export DISPLAY =:0.0

腻子中的

的x显示位置也为:0.0

答案 16 :(得分:1)

Michael-O提供了解决问题的有用方法。另一种解决方法是使用Putty Console启动服务器。

答案 17 :(得分:1)

首先在Jenkins的构建阶段(如果使用)或在/ etc / profile中进行设置:

unset DISPLAY
export DISPLAY=:0

然后使用Java代码或使用Maven设置此属性: -Djava.awt.headless = false

答案 18 :(得分:0)

对于Ubuntu 17.10 安装X虚拟帧缓冲区(xvfb)

apt install xvfb

并将这些行添加到/ 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

答案 19 :(得分:0)

对我来说,以上方法均无效,但经过长时间的搜索,该方法对我有效。

export DISPLAY=localhost:20.0

答案 20 :(得分:0)

我让它工作的唯一方法是使用模板运行脚本。例如sudo ./glassfish-3.1.2.2-unix.sh -s template

这将以无提示模式安装Glassfish。 http://docs.oracle.com/cd/E18930_01/html/821-2427/ghmva.html

答案 21 :(得分:0)

我已通过使用Xorg登录来解决此问题。默认情况下,我使用过Wayland。看起来Wayland消除了Xorg自身存在问题的大多数设计缺陷。enter image description here

答案 22 :(得分:0)

我的问题出在防火墙上。暂时禁用它。

[编辑]并且,服务器主机名指向另一个IP。将其设置为简单的localserver。 strace xclock帮助调试了这个问题。

答案 23 :(得分:0)

就我而言,此错误与DISPLAY端口无关。我试图将XML加载到Windchill(一种PLM软件)中,并且在终端上仅收到上述错误。在一个日志文件中,我找到了我的XML文件已损坏的报告。也许有人遇到类似的问题,可以使用此答案。

答案 24 :(得分:0)

我在运行之前没有注销root ./studio.sh所有设置。

答案 25 :(得分:0)

更改为其他用户并尝试除root。它对我有用。

答案 26 :(得分:0)

如果您从Jenkins触发代码,启用选项“在构建之前启动Xvfb,并在之后将其关闭”可能有所帮助。它帮助了我。

答案 27 :(得分:0)

当我在远程运行jconsole命令时,我遇到了同样的错误。我想修改一个在远程Linux主机上运行的jconsole的参数,我可以登录主机使用secureCRT,终端抛出这个错误信息。幸运的是,当使用Putty时,没关系。奇怪的...

答案 28 :(得分:0)

如果您在Hudson中看到此错误,请尝试从主目录中删除.java目录,它可能适合您。

答案 29 :(得分:0)

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

答案 30 :(得分:-1)

对我来说,问题是 xorg-x11-xauth 没有安装。我安装它然后它工作。

我现在拥有的包裹是:

  • 的libx11-共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