“没有 X11 DISPLAY 变量” - 这是啥意思?
Posted
技术标签:
【中文标题】“没有 X11 DISPLAY 变量” - 这是啥意思?【英文标题】:"No X11 DISPLAY variable" - what does it mean?“没有 X11 DISPLAY 变量” - 这是什么意思? 【发布时间】:2010-10-14 07:52:35 【问题描述】:我正在尝试在我的 Linux 机器 (Slackware) 上安装 Java 应用程序。
我收到以下错误,我不明白。
你能告诉我如何解决这个问题吗?谢谢。
这是我得到的:(我看到需要设置一些 X11 DISPLAY 变量,但是我应该给它什么值以及如何给它?)
~$ java -jar gate-5.0-beta1-build3048-installer.jar
- ERROR -
java.awt.HeadlessException:
No X11 DISPLAY variable was set, but this program performed an operation which requires it.
java.awt.HeadlessException:
No X11 DISPLAY variable was set, but this program performed an operation which requires it.
at java.awt.GraphicsEnvironment.checkHeadless(Graphic sEnvironment.java:159)
at java.awt.Window.<init>(Window.java:407)
at java.awt.Frame.<init>(Frame.java:402)
at net.sourceforge.mlf.metouia.borders.MetouiaDotsBuf fer.<init>(MetouiaDotsBuffer.java:105)
at net.sourceforge.mlf.metouia.borders.MetouiaDots.<i nit>(MetouiaDots.java:66)
at net.sourceforge.mlf.metouia.borders.MetouiaToolBar Border.<init>(MetouiaToolBarBorder.java:49)
at net.sourceforge.mlf.metouia.MetouiaLookAndFeel.ini tComponentDefaults(MetouiaLookAndFeel.java:241)
at javax.swing.plaf.basic.BasicLookAndFeel.getDefault s(BasicLookAndFeel.java:130)
at javax.swing.plaf.metal.MetalLookAndFeel.getDefault s(MetalLookAndFeel.java:1591)
at javax.swing.UIManager.setLookAndFeel(UIManager.jav a:537)
at javax.swing.UIManager.setLookAndFeel(UIManager.jav a:581)
at com.izforge.izpack.installer.GUIInstaller.loadLook AndFeel(GUIInstaller.java:373)
at com.izforge.izpack.installer.GUIInstaller.<init>(G UIInstaller.java:116)
at sun.reflect.NativeConstructorAccessorImpl.newInsta nce0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInsta nce(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newI nstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Construc tor.java:513)
at java.lang.Class.newInstance0(Class.java:355)
at java.lang.Class.newInstance(Class.java:30
at com.izforge.izpack.installer.Installer.main(Instal ler.java:62)
【问题讨论】:
我遇到了同样的问题,它在控制台上完美运行,但是当我使用 eclipse 时,它抛出了同样的异常,我什至把代码行放在了:Process proc_exporting =Runtime.getRuntime().exec(" sudo 导出显示 =:0.0");还是不行 当通过 puTTY 远程连接到控制台时,没有一个答案提供解决此问题所需的信息。任何解决 SSH 的答案实际上并没有解释如何使其工作。有人知道解决这个问题的问题吗? 【参考方案1】:如果你在主显示屏上,那么
export DISPLAY=:0.0
或者如果您使用的是 csh 或 tcsh
setenv DISPLAY :0.0
在运行您的应用之前。
实际上,我很惊讶它没有自动设置。您是否尝试从非图形终端启动此应用程序?如果没有,您是否修改了默认的 .profile、.login、.bashrc 或 .cshrc?
请注意,如我所说,将 DISPLAY 设置为 :0.0 前提是您正坐在主显示屏上,或者至少主显示屏已登录到您的用户 ID。如果它没有登录,或者它是不同的用户 ID,这将失败。
如果你是从另一台机器进来的,并且你在那台机器的主显示屏上并且它正在运行 X,那么你可以使用“ssh -X hostname”连接到该主机,ssh 将转发X 显示回来。 ssh 还将确保正确设置了 DISPLAY 环境变量(前提是它没有在我上面提到的各种点文件中被弄乱)。在“ssh -X”会话中,DISPLAY 环境变量将具有类似“localhost:11.0”的值,它将指向 ssh 正在通过隧道连接到本地机器的套接字。
【讨论】:
嗨,非常感谢,第一个对我有用。是的,我从非图形终端启动它。 听起来好像它想访问图形显示。请注意不要在图形显示不可用时运行它,或者它属于其他用户 ID。 请注意,这很有效,因为您在/曾经在控制台上。如果您在另一个终端上,则必须在终端上运行 X 服务器,然后将环境设置为指向您的机器(例如,export DISPLAY='hostname of pauls terminal':0.0) @kevindtimm,好点子 - 我将把@Mikeage 关于 ssh -X 的信息合并到我的答案中。 如果您需要运行需要连接到 X 服务器的自动化任务,您可以查看创建虚拟 X 服务器的 xvfb。这对于一些批处理测试或运行测试非常有用。【参考方案2】:您是在 X11 环境中运行它吗?您可以使用终端窗口,但它必须在 X 内(在图形登录之后,或通过运行 startx)。
如果您已经在图形环境中,请尝试 export DISPLAY=:0 用于类似 bash 的 shell(bash、sh 等)或 setenv DISPLAY :0 用于基于 C shell 的 shell(csh、tcsh 等)
如果您通过 SSH 从另一台机器连接,您可以使用 -X 选项在您所在的机器上显示图形界面(前提是那里运行着 X 服务器(例如用于 windows 的 xming,并且您的标准 Linux X 服务器)。
【讨论】:
哦,对了,Slackware。它是否仍然像 10 年前我上次使用它时一样准系统? 默认情况下它仍以运行级别 3 启动。当然,如果您告诉它以运行级别 5 启动,假设您安装了 KDE,您将获得一个漂亮的 KDM 登录菜单。 谢谢!在 CentOS 和 SSH (putty) 上使用:export DISPLAY=:0
【参考方案3】:
您必须在 PuTTy 中启用 X11 转发
为此打开 PuTTy,转到 Connection => SSH => Tunnels 并勾选 Enable X11 forwarding
还 sudo 到服务器并导出以下变量,此处 IP 是您本地机器的 IP
export DISPLAY=10.75.75.75:0.0
【讨论】:
它也适用于通过 MobaXTerm 进行连接【参考方案4】:有很多方法可以做到这一点。我做了一些对我来说很方便的事情,而且总是很好。
-
确保在您的远程服务器上安装 xorg-x11-xauth、xorg-x11-font-utils、xorg-x11-fonts。
在本地桌面上运行 Xming 服务器
在putty上,在ssh到服务器之前,启用X11转发并将显示位置设置为localhost:0.0
在服务器上,生成 .Xauthority 文件,并注意 DISPLAY 变量已设置。
$ xauth 列表
$ xauth 添加
要测试它,输入 xclock 或 xeyes
注意:要切换用户,请将 .Xauthority 文件复制到相应用户的主目录,并从该用户导出 DISPLAY 变量。
【讨论】:
【参考方案5】:在与描述的情况类似的情况下,还有一点可能是问题 - 当远程端未安装“xauth”程序时,未转发 X 并且未设置 $DISPLAY。当您运行“ssh -Xv ip_address”时,您可以看到它正在搜索它,如果未找到,则会失败,除非您打开详细模式(IMO 失败),否则不会看到它。您通常可以在同名的包中找到“xauth”。
【讨论】:
【参考方案6】:非常简单,遇到了同样的问题,然后我所做的是下载并安装一个有助于显示然后修复错误的应用程序。
下载这个应用xming:
http://sourceforge.net/project/downloading.php?
安装,然后使用此链接上的设置:
http://www.geo.mtu.edu/geoschem/docs/putty_install.html 或按照以下步骤操作:
安装/配置 PuTTy 和 Xming
将 PuTTy 和 Xming 下载到 PC 后,根据各自的说明进行安装。
配置 Xming
安装 Xming 后,运行名为“XLaunch”的应用程序并验证设置是否如图所示:
在显示设置窗口中选择默认条目,点击下一步 在会话类型窗口中单击下一步。 在附加参数窗口中单击下一步(注意剪贴板复选框为真) 保存配置并点击完成。配置 PuTTy
安装PuTTy后,双击桌面上的PuTTy图标,如图配置:
这显示了创建登录配置文件然后保存它。
在 ssh -> X11 上,单击复选框以启用 X11 转发。 在 X 显示位置文本框中,输入 localhost:0.0保存配置文件,然后远程连接到服务器进行测试。
干杯!!!
【讨论】:
请在答案本身中包含链接中的基本信息,因为它们最终可能会失效,从而使答案无用。【参考方案7】:对于那些试图让 X Window 应用程序在 Windows 上从 Linux 运行的人:
对我有用的是在我的 windows 机器上设置 xming 服务器,当我连接到 linux 主机时在 putty 中设置 X11 转发选项,然后输入我的 windows ip 地址和显示端口,然后输入我的 windows IP 显示变量地址:0.0
不要忘记将 linux 主机 IP 地址添加到 X0.hosts 文件中,以确保 xming 服务器接受来自该主机的流量。我花了一段时间才弄明白。
【讨论】:
【参考方案8】:如果我在 Byobu 终端内启动脚本,我在 Ubuntu 14.04.01 中尝试安装 JDK 8 和 Netbeans 时遇到了同样的问题(可能与 Screens 发生的情况相同)。
退出 Byobu 并(在图形终端中)运行脚本。
【讨论】:
【参考方案9】:初步检查。
1) 当您将 DISPLAY 导出到其他机器时,请确保您在该机器上输入了命令 xhost +
。该命令允许其他机器在这台机器上导出他们的 DISPLAY。可能存在安全限制,只需了解即可。需要检查ssh -X MachineIP
不需要xhost +
吗?
2) 有时JCONSOLE
不会显示其所有进程,因为这些 JVM 进程可能与不同的用户一起运行,而您正在与另一个用户一起导出 DISPLAY。所以最好关注CD_DIR>sudo ./jconsole
3) 在 WAS (WEBSPHERE) 中; jconsole 将无法连接它的java server 进程,那个时候只要到链接,然后尝试连接它。这对我有用。可能是这个页面正在初始化一些变量以使 jconsole 能够连接到该服务器。
WAS 控制台 > 应用服务器 > server1 > 进程定义 > Java 虚拟机
我在 AIX(仅命令行界面可用,没有 DISPLAY UI)机器上也遇到过同样的问题。我通过安装解决了
适用于 Windows 的 NX 客户端
第 1 步:通过那台 Windows 机器,我连接到具有 GUI 控制台的 unix box。 第 2 步:从 UNIX 机器通过 SSH 连接到 AIX 机器。 第 3 步:将 DISPLAY 设置为“export DISPLAY=UNIXMACHINE:NXClientPORTConnectedMentionedOnTitle” 第 4 步:现在,如果我们启动任何需要 DISPLAY 的程序;它将在这个 UNIX 机器上启动。
VNC
如果您在显示可用的 UNIX 机器上安装了 VNC;则不需要 Windows 和 NX 客户端。 第 1 步:使用 VNC 连接具有 GUI 控制台的 Unix box。 第 2 步:从 UNIX 机器通过 SSH 连接到 AIX 机器。 第 3 步:将 DISPLAY 设置为“export DISPLAY=UNIXMACHINE:VNCPORT” 第 4 步:现在,如果我们启动任何需要 DISPLAY 的程序;它将在这个 UNIX 机器上启动。
否则
第 1 步:从 UNIX 机器通过 SSH 连接到 AIX 机器。 第 2 步:将 DISPLAY 设置为“export DISPLAY=UNIXMACHINE:VNCPORT” 第 3 步:现在,如果我们启动任何需要 DISPLAY 的程序;它将在这个 UNIX 机器上启动。
【讨论】:
【参考方案10】:不要忘记在“home”显示机器上执行“host +”,当你 ssh 到机器时,你正在执行“ssh -x hostname”
【讨论】:
我强烈建议不要使用“xhost +”,因为这样会有效地禁用 X 服务器上的所有安全性。 ssh 足够聪明,可以使用 xauth 自动设置 X11 身份验证,因此不需要使用 xhost。 这应该是评论,而不是帖子。不能发表评论并不意味着你应该发一个糟糕的帖子。以上是关于“没有 X11 DISPLAY 变量” - 这是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章