我正在运行一个已经可以从命令行运行的 java 程序,但前提是 ax 服务器已启动并正在运行。
实际上在我的 ubuntu 16.04 x64 VPS 上我得到了这个 java 异常
原因:java.awt.HeadlessException:未设置 X11 DISPLAY 变量,但该程序执行了需要该变量的操作。
如何解决这个问题?
我尝试过了
sudo apt-get install ubuntu-desktop
当然它对我来说没用,但我认为它足以满足 X 服务器的需求......
我现在能做什么?
更新:
经过大量的谷歌搜索后,我尝试这样做
root@ziff-01:~# X -configure
(EE)
Fatal server error:
(EE) Server is already active for display 0
If this server is no longer running, remove /tmp/.X0-lock
and start again.
因此,如果 X 处于活动状态,我必须在哪里/如何配置它“显示变量”?
答案1
安装 ubuntu-desktop 是不够的。问题是,在这种情况下,该程序是在 X 服务器之外运行的。
您可以尝试在调用 DISPLAY 变量之前声明它,使其使用您(新安装的)X 服务器...但您可能会遇到权限问题。这看起来像:export DISPLAY=:0.0
,这是默认值(但当您从控制台访问计算机时未设置)。
您可以在此处查看有关 DISPLAY 变量的详细信息以及如何设置它: 什么是 $DISPLAY 环境变量
编辑:从问题中的附加信息来看,您的服务器似乎确实在使用“display 0”,然后export DISPLAY=:0.0
应该可以工作。它不起作用的原因可能是访问权限 - 您需要登录 X 才能在其上显示任何内容。这就是我在谈论权限时的意思。
推荐的解决方案
另一种(可能更好)的解决方法是我很久以前就用过的,那就是使用像 Xvfb 这样的虚拟 X 服务器(https://en.wikipedia.org/wiki/Xvfb) 它充当 X 服务器,但不执行任何操作。那么您的应用程序应该会很满意。它实际上是 Wikipedia 条目中列出的用例之一。
要使用它,您需要执行以下操作:
sudo apt-get install xvfb
xvfb-run [your command]
不过需要注意的是:您的程序可能需要 X 服务器,这是有原因的。它实际上可能需要通过它进行某种程度的用户交互,如果是这样的话,无法看到正在发生的事情将使程序变得毫无用处...
我建议向该程序的制作者或该程序的其他用户而不是 Ubuntu 社区寻找信息。