![](/img/trans.png)
[英]Java: Can't connect to X11 window server using 'localhost:1.0' as the value of the DISPLAY variable
[英]Java Can't connect to X11 window server using 'localhost:10.0' as the value of the DISPLAY variable
我有一个脚本使用 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 服务器没有运行所以我尝试了startx
它说它在那个端口运行
我的系统是 Ubuntu 服务器版本 10.04
您需要在启动时指定-Djava.awt.headless=true
参数。
删除 DISPLAY 变量
unset DISPLAY
这在大多数情况下都有帮助(例如启动应用程序服务器或其他基于 Java 的工具)并避免修改所有那么多命令行。
也可以很方便地将它添加到 .bash_profile 以供专用的 app-server/tools 用户使用。
这个命令帮我解决了这个问题:
export DISPLAY=:0
我认为您在 sudo 模式下工作。请检查到用户模式并重试
如果有人试图通过 CI(jenkins,..) 上的 maven-surefire-plugin 运行自动化单元测试,并收到上述错误,请务必更新您的 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>
这将修复它:
/usr/bin/java -Djava.awt.headless=true $Your_program
对我来说,以-Y而不是 -X 的身份登录有效。
如果您的 X11 不受信任,如下所示,请尝试使用 -Y 标志(如果您信任主机):
警告:不受信任的 X11 转发设置失败:未生成 xauth 密钥数据
如果您尝试使用 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/
在使用无头软呢帽 22 在 raspberry pi 2 上安装 glassfish 的几天徒劳无功之后,下面对我来说没有任何问题
unset DISPLAY
java -Djava.awt.headless=true -jar glassfissh-installer-v2ur2-b04-linux.jar
从这里得到我的帮助
第一:启动XQuartz
第二个:ssh -X user@ip_address
...:开始你的过程
如果你 ssh 然后启动 XQuartz 你会得到那个错误
我正在使用 Xming 并遇到类似的错误。 采取了以下步骤来解决该问题:
DISPLAY=XXX.XXX.XXX.XX:0.0; export DISPLAY
DISPLAY=XXX.XXX.XXX.XX:0.0; export DISPLAY
将XXX.XXX.XXX.XX
替换为您的 IP 地址。
如果在 /etc/profile 中使用或设置,首先在 Jenkins 的构建阶段执行此操作:
unset DISPLAY
export DISPLAY=:0
然后在 java 代码中或使用 maven 设置此属性:-Djava.awt.headless=false
解决了。 我只是注销并使用 xorg 登录!
这解决了我的问题
xhost +
但请注意, xhost +
完全停用身份验证并允许每个人访问您屏幕上的所有应用程序。
xhost +si:localuser:root
似乎与正确的身份验证类似。
Michael-O 给出了解决问题的有用方法。 解决此问题的另一种方法是使用 Putty Console 启动服务器。
就我而言,我的机器中没有剩余空间,我遇到了同样的问题。 有时可能是空间问题。 检查 Linux/Unix 环境中的空间并确保您的机器有足够的空间。
使用以下命令检查是否设置了 $DISPLAY 变量:
回声 $DISPLAY
如果未设置显示变量,请运行以下命令进行设置,(即使设置了,您的会话也可以使用以下一个)
出口显示=:0.0
在腻子中也有 x 显示位置为:0.0
我在我正在处理的 Linux 服务器上遇到了同样的问题。 将 java 连接到 X11 显示器在头节点上工作,但在任何其他节点上都不起作用。 联系管理员后,发现我们的作业调度系统(SLURM)当前版本不支持X11转发。 他们必须更新 SLURM(新版本的 SLURM 支持它)才能工作。
我让它工作的唯一方法是使用模板运行脚本。 例如 sudo ./glassfish-3.1.2.2-unix.sh -s 模板
这将在静默模式下安装 Glassfish。http://docs.oracle.com/cd/E18930_01/html/821-2427/ghmva.html
当我在远程运行 jconsole 命令时,我遇到了同样的错误。 我想修改运行在远程Linux主机上的jconsole的一个参数,我可以使用secureCRT登录主机,终端抛出这个错误信息。 幸运的是,当使用Putty时,没关系。 奇怪的....
如果您在 Hudson 中看到此错误,请尝试从您的主目录中删除 .java 目录,它可能对您有用。
如果您在通过 ssh 登录时在远程服务器上启动应用程序,则另一种方法是使用-x
参数启动 ssh 或在您的/etc/ssh/ssh_config
添加ForwardX11 no
。 在这种情况下,ssh 不会创建环境变量 DISPLAY。
如果您从 Jenkins 触发代码,启用选项“在构建之前启动 Xvfb,然后关闭它”可能会有所帮助。 它帮助了我。
更改为另一个用户并尝试除 root 之外。 这个对我有用。
我只是在运行 ./studio.sh All set 之前没有注销 root。
对于 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
就我而言,此错误与 DISPLAY 端口无关。 我试图将 XML 加载到 Windchill(PLM 软件)中,但在终端上仅收到上述错误。 在日志文件中,我发现我的 XML 文件已损坏的报告。 也许有人有类似的问题,可以使用这个答案。
我的问题是防火墙。 暂时禁用它。
[编辑] 而且,服务器主机名指向另一个 IP。 将其设置为简单的本地服务器。 strace xclock
帮助调试了这个问题。
对我来说,以上都没有奏效,但经过长时间的搜索,这对我有用。
export DISPLAY=localhost:20.0
导出本地主机:1
-Djava.awt.headless=true
对我来说,问题是未安装xorg-x11-xauth 。 我安装了它,然后它起作用了。
我现在拥有的软件包是:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.