Java Can';t使用';localhost:10.0';作为显示变量的值

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连接的脚本,用于在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)
我也尝试了端口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 localserver
    strace 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