如何在服务器环境中运行Java awt Hedless程序?

如何在服务器环境中运行Java awt Hedless程序?

我正在运行一个已经可以从命令行运行的 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 社区寻找信息。

相关内容