“没有 X11 DISPLAY 变量”——这是什么意思?

2024-10-10 09:29:00
admin
原创
89
摘要:问题描述:我正在尝试在我的 Linux 机器(Slackware)上安装 Java 应用程序。我收到了以下错误,但我不明白。您能告诉我该如何解决这个问题吗?谢谢。这是我得到的结果:(我看到需要设置一些X11 DISPLAY变量,但我应该给它什么值以及如何设置?)~$ java -jar gate-5.0-be...

问题描述:

我正在尝试在我的 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)

解决方案 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 正在隧道传输到您的本地机器的套接字。

解决方案 2:

如果你的应用程序有 GUI,则有两种可能:

1-)如果你的 Java 应用程序有 GUI

首先确保你已经正常安装了 jdk 包(非 headless)。例如,如果你安装了这个:

sudo apt install openjdk-19-jre-headless

删除它:

sudo apt remove openjdk-19-jre-headless

然后安装普通版本:

sudo apt install openjdk-19-jre

简单来说,headless 是用于无 GUI 应用程序。更多信息可以在这里查看:openjdk-6-jre、openjdk-6-jre-headless、openjdk-6-jre-lib 之间的区别

然后,尝试将DISPLAY变量设置为:

export DISPLAY=:0

或者如果它不起作用(那么,可能你有多个屏幕),设置为:

export DISPLAY=:1

或者如果仍然不起作用,请尝试2、等等。(这取决于屏幕数量以及运行应用程序时使用的屏幕的屏幕编号。34

然后运行你的jar文件:

java -jar gate-5.0-beta1-build3048-installer.jar

2-)如果你的 Java 应用没有GUI

在运行应用程序时,您可以尝试java.awt.headless=true标记为:

java -Djava.awt.headless=true -jar gate-5.0-beta1-build3048-installer.jar

附加说明

您还可以尝试在运行文件之前设置JAVA_TOOL_OPTIONS变量,.jar例如带有 GUI 的应用程序(1)

export JAVA_TOOL_OPTIONS='-Djava.awt.headless=false'

或者对于无 GUI 应用程序(2)

export JAVA_TOOL_OPTIONS='-Djava.awt.headless=true'

如果问题仍然存在,删除所有可能干扰的软件包可能是一个根本的解决方案。列出所有已安装的软件包:

sudo apt list --installed

然后删除其中所有、、相关且命名的javajdkjre

sudo apt remove <app-names-needed-to-remove-put-spaces-between>

然后安装所需的 java 包,例如(1)中给出的示例。

解决方案 3:

您必须在 PuTTy 中启用X11 转发

打开 PuTTy,转到连接 => SSH => 隧道,然后选中启用 X11 转发

同时使用 sudo 连接到服务器并导出以下变量,这里的 IP 是你本地机器的 IP

export DISPLAY=10.75.75.75:0.0

在此处输入图片描述

解决方案 4:

您是在 X11 环境中运行此程序吗?您可以使用终端窗口,但必须在 X 中(图形登录后或通过运行 startx)。

如果您已处于图形环境中,请尝试对类似 bash 的 shell(bash、sh 等)使用 export DISPLAY=:0 或对基于 C shell 的 shell(csh、tcsh 等)使用 setenv DISPLAY :0

如果您通过 SSH 从另一台机器连接,则可以使用 -X 选项在您所在的机器上显示图形界面(前提是那里正在运行 X 服务器(例如 Windows 的 xming 和标准 Linux X 服务器)。

解决方案 5:

有很多方法可以做到这一点。我做了一些对我来说很方便的事情,而且总是能正常工作。

  1. 在您的远程服务器上,确保安装 xorg-x11-xauth、xorg-x11-font-utils 和 xorg-x11-fonts。

  2. 在本地桌面上运行 Xming 服务器

  3. 在 putty 上,在 ssh 到服务器之前,启用 X11 转发并将显示位置设置为 localhost:0.0

  4. 在服务器上,生成 .Xauthority 文件,并注意 DISPLAY 变量已设置。

$ xauth 列表

$ xauth 添加

要测试它,请输入 xclock 或 xeyes

注意:要切换用户,请将 .Xauthority 文件复制到相应用户的主目录,并从该用户导出 DISPLAY 变量。

解决方案 6:

在与所述情况类似的情况下,可能存在问题的另一件事是 - 当远程端未安装“xauth”程序时,X 未转发且 $DISPLAY 未设置。您可以看到,当您运行“ssh -Xv ip_address”时,它会搜索它,如果未找到,则失败,除非您打开详细模式(在我看来是失败),否则不会出现这种情况。您通常可以在同名的包中找到“xauth”。

解决方案 7:

非常简单,遇到了同样的问题,然后我所做的就是下载并安装一个有助于显示的应用程序,然后修复了错误。

下载这个应用程序 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

保存配置文件然后远程连接到服务器进行测试。

干杯!!!

解决方案 8:

对于那些尝试在 Linux 上让 X Window 应用程序在 Windows 上运行的人来说:

对我有用的是在我的 Windows 机器上设置 xming 服务器,当我连接到 Linux 主机时在 Putty 中设置 X11 转发选项,并使用显示端口输入我的 Windows IP 地址,然后使用我的 Windows IP 地址输入显示变量:0.0

不要忘记将 Linux 主机的 IP 地址添加到 X0.hosts 文件中,以确保 xming 服务器接受来自该主机的流量。我花了一段时间才弄清楚。

解决方案 9:

export DISPLAY=172.16.1.148:0.0

172.16.1.148是你的电脑ip。

解决方案 10:

当我在 Ubuntu 14.04.01 中尝试安装 JDK 8 和 Netbeans 时,如果我在 Byobu 终端内启动脚本,也会遇到同样的问题(也许 Screens 也会发生同样的情况)。

只需退出 Byobu 并(在图形终端中)运行脚本。

解决方案 11:

初步检查。

1) 当您将 DISPLAY 导出到其他机器时,请确保xhost +在该机器上输入了该命令。此命令允许其他机器将其 DISPLAY 导出到此机器。可能存在安全限制,只需了解即可。需要检查ssh -X MachineIP是否需要xhost +

2)有时JCONSOLE不会显示所有进程,因为这些 JVM 进程可能以不同的用户身份运行,而你正在以另一个用户身份导出 DISPLAY。所以最好遵循CD_DIR>sudo ./jconsole

3) 在 WAS(WEBSPHERE)中;jconsole 将无法连接其 java 服务器进程,此时只需转到链接,然后尝试连接它。这对我来说很有效。可能是此页面正在初始化一些变量以使 jconsole 能够连接到该服务器。

WAS 控制台 > 应用程序服务器 > server1 > 进程定义 > Java 虚拟机


我在 AIX(仅提供命令行界面,没有 DISPLAY UI)机器上遇到了同样的问题。我通过安装解决了这个问题

适用于 Windows 的 NX 客户端

步骤 1:通过该 Windows 计算机,我连接到具有 GUI 控制台的 UNIX 计算机。

步骤 2:从该 UNIX 计算机通过 SSH 连接到 AIX 计算机。

步骤 3:设置 DISPLAY,如“export DISPLAY=UNIXMACHINE:NXClientPORTConnectedMentionedOnTitle”

步骤 4:现在,如果我们启动任何需要 DISPLAY 的程序,它将在此 UNIX 计算机中启动。

虚拟网络计算机

如果您在具有显示功能的 UNIX 机器上安装了 VNC,则无需 Windows 和 NX 客户端。步骤 1:使用 VNC 连接具有 GUI 控制台的 Unix 机器。步骤

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 机器上启动。

解决方案 12:

设置显示模式就可以了,同时还要确保 apache Jmeter 从 USER 模式启动,不要在 ROOT 用户下运行。

$ cd /home/USER/apache-jmeter-5.5/
$ ./jmeter

解决方案 13:

不要忘记在“主”显示机上执行“host +”,并且当您 ssh 到您正在执行的机器时“ssh -x hostname”

相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   601  
  华为IPD与传统研发模式的8大差异在快速变化的商业环境中,产品研发模式的选择直接决定了企业的市场响应速度和竞争力。华为作为全球领先的通信技术解决方案供应商,其成功在很大程度上得益于对产品研发模式的持续创新。华为引入并深度定制的集成产品开发(IPD)体系,相较于传统的研发模式,展现出了显著的差异和优势。本文将详细探讨华为...
IPD流程是谁发明的   7  
  如何通过IPD流程缩短产品上市时间?在快速变化的市场环境中,产品上市时间成为企业竞争力的关键因素之一。集成产品开发(IPD, Integrated Product Development)作为一种先进的产品研发管理方法,通过其结构化的流程设计和跨部门协作机制,显著缩短了产品上市时间,提高了市场响应速度。本文将深入探讨如...
华为IPD流程   9  
  在项目管理领域,IPD(Integrated Product Development,集成产品开发)流程图是连接创意、设计与市场成功的桥梁。它不仅是一个视觉工具,更是一种战略思维方式的体现,帮助团队高效协同,确保产品按时、按质、按量推向市场。尽管IPD流程图可能初看之下显得错综复杂,但只需掌握几个关键点,你便能轻松驾驭...
IPD开发流程管理   8  
  在项目管理领域,集成产品开发(IPD)流程被视为提升产品上市速度、增强团队协作与创新能力的重要工具。然而,尽管IPD流程拥有诸多优势,其实施过程中仍可能遭遇多种挑战,导致项目失败。本文旨在深入探讨八个常见的IPD流程失败原因,并提出相应的解决方法,以帮助项目管理者规避风险,确保项目成功。缺乏明确的项目目标与战略对齐IP...
IPD流程图   8  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用