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


93

我有一个脚本使用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

Answers:


35

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

export DISPLAY=:0

39
unset DISPLAY帮助了我(export DISPLAY=:0出现错误Can't connect to X11 window server using ':0'
beluchin 2015年

1
您在哪里放置了它
Spektakulatius

1
好的时候-它不能在linux上运行,那么最好用apt安装Xvfb并在任何屏幕上运行它,例如:Xvfb:1,然后在构建阶段设置变量-export DISPLAY =:1->完美地工作。
Pankaj Kumar Katiyar


56

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


非常感谢,但是我必须在哪里准确指定呢?
Elteroooo 2012年

1
线程“主” java.awt.He中的异常java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:1 73)的
adlessException

您正在运行安全管理器吗?如果是这样,您可能必须授予许可。
Michael-O

1
谢谢,问题是X服务器正在另一个端口上运行
Elteroooo 2012年

1
asker的程序想做ij.io.Opener.openJpegOrGif,我们可以猜测可能需要一个GUI。因此,无头会导致另一个错误:java.awt.HeadlessException
Nicolas Raoul '18

40

删除DISPLAY变量

unset DISPLAY

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

也可以将其添加到专用的app-server / tools用户的.bash_profile中。


1
它根本没有帮助我。我得到了:AWT无法使用...连接到X11窗口服务器
Pankaj Kumar Katiyar

如果您的应用使用awt,则必须正确设置DISPLAY。这适用于不使用awt的应用程序。
bebbo

解决此问题时,请确保在bash文件中添加了unset命令后,重新启动mobaXterm。由于Display变量将在之前设置,因此只要运行bash文件就不会改变它。
mrk


9

如果有人尝试通过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>

1
如何在gradle中做到这一点,以及如何在其中设置属性值。
Sobhit Sharma

7

这将解决它:

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

没有解决我的问题
Alex Shnyrov

1
这对我有用。谢谢。我收到错误是因为我正在使用poi。
dev4life

6

对我来说,以-Y(而不是-X)登录有效。

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

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


4

经过几天的徒劳努力,在无头软呢帽22的覆盆子pi 2上安装了玻璃鱼,下面的工作对我来说毫无障碍

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

这里得到我的帮助


3

首先:启动XQuartz

第二个:ssh -X user @ ip_address

...:开始您的过程

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


3

这解决了我的问题

xhost +

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

xhost +si:localuser:root 正确的身份验证似乎可以正常工作。


2

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

  1. 在Xming启动中,选中无访问权限框。
  2. 在腻子中运行以下命令: DISPLAY=XXX.XXX.XXX.XX:0.0; export DISPLAY

替换XXX.XXX.XXX.XX为您的IP地址。


我的配置相同,但是没有用。我需要在X0.hosts文件中添加执行X11的IP
Christophe Moine

2

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

unset DISPLAY
export DISPLAY=:0

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


2

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


1
export DISPLAY =:0或export DISPLAY =:1对我不起作用。注销并登录对我来说解决了。
Optimus

1

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


您能否再解释一下这将如何工作?(我从未使用过腻子)
mrk

1

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


1

如果您尝试使用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

再次从步骤2中为sudo用户导出显示。尝试使用命令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/


1

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

回声$ DISPLAY

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

出口DISPLAY =:0.0

油灰中的x显示位置也为:0.0



0

我在远程运行jconsole命令时遇到与您相同的错误。我想在远程Linux主机上运行的jconsole上修改参数,我可以使用secureCRT登录主机,终端会抛出此错误信息。幸运的是,使用腻子时还可以。奇怪的....


0

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


0

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





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

2
现在,我仅收到“线程“主”中的异常java.awt.AWTError:无法使用'localhost:1.0'作为DISPLAY变量的值连接到X11窗口服务器。在Ubuntu 16.04上。Xvfb二进制文件现在似乎位于/ usr / bin,而不是/ usr / X11R6 / bin,但显示“无法添加屏幕0(EE)”。
克里斯·詹克斯

0

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


0

我的问题是防火墙。暂时禁用它。

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


0

我已经通过使用Xorg登录修复了此问题。默认情况下,我使用过Wayland。看起来Wayland消除了Xorg的大多数设计缺陷,它有其自身的问题。在此处输入图片说明


-1

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

我现在拥有的软件包是:

  • libX11-common-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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.