Java 无法使用“localhost:10.0”作为 DISPLAY 变量的值连接到 X11 窗口服务器
- 2024-10-14 08:40:00
- admin 原创
- 65
问题描述:
我有一个使用 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
解决方案 1:
您需要-Djava.awt.headless=true
在启动时指定该参数。
解决方案 2:
这个命令帮助我解决了这个问题:
export DISPLAY=:0
解决方案 3:
删除 DISPLAY 变量
unset DISPLAY
这在大多数情况下都有帮助(例如启动应用程序服务器或其他基于 Java 的工具),并避免修改所有那么多命令行。
将其添加到专用应用服务器/工具用户的 .bash_profile 中也会很方便。
解决方案 4:
我认为您正在使用 sudo 模式。请退出到用户模式并重试
解决方案 5:
如果有人尝试通过 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>
解决方案 6:
这将修复它:
/usr/bin/java -Djava.awt.headless=true $Your_program
解决方案 7:
对于我来说,以-Y而不是 -X登录是可行的。
如果您有不受信任的 X11(如下所示),请尝试使用 -Y 标志(如果您信任主机):
警告:不受信任的 X11 转发设置失败:未生成 xauth 密钥数据
解决方案 8:
这解决了我的问题
xhost +
但请注意,这xhost +
将完全停用身份验证并允许每个人访问您屏幕上的所有应用程序。
xhost +si:localuser:root
似乎与正确的身份验证类似。
解决方案 9:
如果您尝试使用 su 导出显示但仍然不起作用。这是对我有用的方法。请尝试为 sudo 用户进行 X11 转发。
使用 ssh 的 -X 选项连接远程主机。
# 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/
解决方案 10:
经过几天徒劳的努力,在装有 headless fedora 22 的 raspberry pi 2 上安装了 glassfish,下面的操作对我来说毫无问题
unset DISPLAY
java -Djava.awt.headless=true -jar glassfissh-installer-v2ur2-b04-linux.jar
从这里得到我的帮助
解决方案 11:
第一:启动XQuartz
第二步:ssh -X user@ip_address
...:开始您的流程
如果您 ssh 然后启动 XQuartz,您将收到该错误
解决方案 12:
首先在 Jenkins 的构建阶段执行此操作(如果使用)或在 /etc/profile 中设置:
unset DISPLAY
export DISPLAY=:0
然后在 java 代码中或使用 maven 设置此属性:-Djava.awt.headless=false
解决方案 13:
使用以下命令检查$DISPLAY
变量是否设置:
echo $DISPLAY
如果未设置显示变量,请运行以下命令进行设置,(即使已设置,您也可以在会话中使用下面的命令)
export DISPLAY=:0.0
在油灰也有x
显示位置:0.0
解决方案 14:
我使用 Xming 时也遇到了类似的错误。采取以下步骤来修复此问题:
在 Xming 启动中选中“无访问控制”复选框。
在 putty 中运行以下命令:
DISPLAY=XXX.XXX.XXX.XX:0.0; export DISPLAY
替换XXX.XXX.XXX.XX
为您的 IP 地址。
解决方案 15:
解决了。我只需注销并使用 xorg 登录!
解决方案 16:
Michael-O 给出了解决该问题的有用方法。另一种解决方法是使用 Putty Console 启动服务器。
解决方案 17:
就我的情况而言,我的机器上没有剩余空间,我也遇到了同样的问题。有时可能是空间问题。检查 Linux/Unix 环境中的空间,确保您的机器有足够的空间。
解决方案 18:
对于 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:
我已经通过使用 Xorg 登录解决了这个问题。默认情况下,我使用 Wayland。看起来 Wayland 消除了 Xorg 的大部分设计缺陷,但它也有自己的问题。
解决方案 20:
我在正在使用的 Linux 服务器上遇到了同样的问题。将 Java 连接到 X11 显示器在头节点上有效,但在其他节点上无效。联系管理员后,发现我们当前版本的作业调度系统 (SLURM) 不支持 X11 转发。他们必须更新 SLURM(较新版本的 SLURM 支持它)才能使其正常工作。
解决方案 21:
我让它工作的唯一方法是使用模板运行脚本。例如 sudo ./glassfish-3.1.2.2-unix.sh -s template
这将以静默模式安装 Glassfish。http: //docs.oracle.com/cd/E18930_01/html/821-2427/ghmva.html
解决方案 22:
我在远程运行jconsole命令时遇到了和你一样的错误。我想修改在远程Linux主机上运行的jconsole的一个参数,我可以使用secureCRT登录主机,终端会抛出这个错误信息。幸运的是,当我使用Putty时,一切正常。奇怪....
解决方案 23:
如果您在 Hudson 中看到此错误,请尝试从您的主目录中删除 .java 目录,它可能会对您有用。
解决方案 24:
如果您从 Jenkins 触发代码,启用选项“在构建之前启动 Xvfb,在构建之后关闭”可能会有所帮助。这对我很有帮助。
解决方案 25:
更改为另一个用户并尝试除 root 之外的其他用户。它对我有用。
解决方案 26:
我只是在运行 ./studio.sh 之前没有退出 root 权限,一切就绪。
解决方案 27:
就我而言,此错误与 DISPLAY 端口无关。我尝试将 XML 加载到 Windchill(PLM 软件)中,但终端上只收到上述错误。在日志文件中,我发现报告我的 XML 文件已损坏。也许有人遇到类似的问题,可以使用此答案。
解决方案 28:
我的问题出在防火墙上。暂时禁用它。
[编辑] 并且,服务器主机名指向另一个 IP。将其设置为简单的 localserver。strace xclock
有助于调试此问题。
解决方案 29:
对我来说,以上方法都不起作用,但经过长时间的搜索,这个对我有用。
export DISPLAY=localhost:20.0
解决方案 30:
导出本地主机:1
-Djava.awt.headless=true
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件