Java Can';t使用';localhost:10.0';作为显示变量的值
我有一个使用java连接的脚本,用于在localhost的端口10.0中显示X11 但我总是犯这样的错误Java Can';t使用';localhost:10.0';作为显示变量的值,java,linux,x11,xserver,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.
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)
我也尝试了端口0.0,但总是出现同样的错误
在尝试xhost之后
xhost +local:all
xhost: unable to open display ""
xhost: unable to open display ":10.0"
我怎样才能解决这个问题
我认为X服务器没有运行,所以我尝试了startx
its,它说它在该端口运行
我的系统是Ubuntu server edition 10.04您需要在启动时指定参数。这将修复它:
/usr/bin/java -Djava.awt.headless=true $Your_program
删除显示变量
unset DISPLAY
这在大多数情况下都有帮助(例如启动应用程序服务器或其他基于java的工具),并避免修改所有那么多的命令行
将其添加到专用应用服务器/工具用户的.bash_配置文件中也很方便。此命令帮助我解决了此问题:
export DISPLAY=:0
我让它工作的唯一方法是使用模板运行脚本。e、 g.sudo./glassfish-3.1.2.2-unix.sh-s模板
这将以静默模式安装Glassfish 我在远程运行jconsole命令时遇到了与您相同的错误。我想修改在远程Linux主机上运行的jconsole上的一个参数,我可以使用secureCRT登录主机,终端会抛出此错误信息。幸运的是,当使用腻子,它是好的。奇怪的…如果您在Hudson中看到此错误,请尝试从主目录中删除.java目录,它可能适合您 如果有人试图通过CI上的maven surefire插件(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>
org.apache.maven.plugins
maven surefire插件
${maven surefire plugin.version}
真的
如果您在通过ssh登录时在远程服务器上启动应用程序,那么另一种方法是使用-x
参数启动ssh,或者在/etc/ssh/ssh\u配置中添加ForwardX11 no
。在这种情况下,ssh不会创建环境变量显示。Michael-O给出了解决该问题的有用方法。解决这个问题的另一种方法是用Putty控制台启动服务器。在用无头软呢帽22在覆盆子pi 2上安装glassfish的几天徒劳无功后,下面的工作对我来说没有任何问题
unset DISPLAY
java -Djava.awt.headless=true -jar glassfissh-installer-v2ur2-b04-linux.jar
首先从获得我的帮助:启动XQuartz
第二:ssh-Xuser@ip_address
…:开始你的过程
如果您使用ssh,然后启动XQuartz,您将得到该错误在我的情况下,我的机器中没有剩余空间,我面临同样的问题。
有时可能是空间问题。请检查Linux/Unix环境中的空间,确保您的计算机有足够的空间。我使用的是Xming,但遇到了类似的错误。已采取以下步骤解决此问题:
在Xming启动中,选中“无访问控制”框
在putty中运行以下命令:DISPLAY=XXX.XXX.XXX.XX:0.0;导出显示
用您的IP地址替换XXX.XXX.XXX.XX
。对于我来说,以-Y而不是-X登录
如果您获得了如下所示的不受信任的X11,请尝试使用-Y标志(如果您信任主机):
警告:不受信任的X11转发设置失败:未生成xauth密钥数据我认为您正在sudo模式下工作。如果您从Jenkins触发代码,请签出到用户模式并重试,启用“在生成之前启动Xvfb,在生成之后关闭”选项可能会有所帮助。它帮助了我。切换到另一个用户,然后尝试除root以外的其他用户。它对我很有用。我只是在运行/studio.sh之前没有注销root。适用于Ubuntu 17.10
安装X虚拟帧缓冲区(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
在我的情况下,此错误与显示端口无关。我试图将XML加载到Windchill(一个PLM软件)中,但在终端上只收到上述错误。在一个日志文件中,我发现报告说我的XML文件已损坏。可能有人有类似的问题,可以使用此答案。如果使用或设置在/etc/profile中,请首先在Jenkins的构建阶段执行此操作:
unset DISPLAY
export DISPLAY=:0
然后在java代码中或使用maven设置此属性:
-Djava.awt.headless=错误已解决。我只是注销并使用xorg登录 我的问题是防火墙。暂时禁用它
[编辑]并且,服务器主机名指向另一个IP。将其设置为simply localserverstrace xclock
帮助调试了此问题。我已通过使用Xorg登录解决了此问题。默认情况下,我使用了Wayland。看起来Wayland消除了Xorg的大部分设计缺陷,但它也有自己的问题。如果您尝试使用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
来源:使用以下命令检查是否设置了$DISPLAY变量:
echo$显示器
如果未设置显示变量,请运行以下命令进行设置(即使已设置,也可以在会话中设置以下变量)
导出显示=:0.0
在putty中,x显示位置也为:0.0这解决了我的问题
xhost +
但请注意,xhost+
会完全禁用身份验证,并允许所有人访问屏幕上的所有应用程序
xhost+si:localuser:root
似乎与正确的身份验证类似<
# export DISPLAY=localhost:10.0
xhost +
export DISPLAY=localhost:20.0