22

我正在运行一个 java 应用程序,它创建了它正在做的一些事情的视觉显示,同时它正在做这件事。但是,我想在一个没有要附加的显示器的脚本中运行它。在当前环境中,甚至没有设置 DISPLAY 环境变量。我试图简单地将我的 DISPLAY 设置为:0.0。但这不存在。我真的不关心显示器。我只想让应用程序静默处理文件。

因为我不能只关闭显示器(不是我的应用程序),所以我只能试图绕过显示器的需要。

有没有我可以将 DISPLAY 发送到的黑洞?相当于 /dev/null?

我在网上搜索了一下,但我能想到使用的词:“显示”“空”“忽略”等都是让我得到答案的两个通用词。

这是一个较大脚本的中间部分,因此我希望输出到 stdout 的其余部分可用。

4

6 回答 6

17

有一个名为Xvfb的无头 X 服务器。它基本上是您所需要的,因为它接受 X 客户端,但基本上对来自它们的数据不做任何事情。从那个链接的页面(稍微解释一下):

XvfbX虚拟帧缓冲区,是一个实现X11显示服务器协议的显示服务器。

与其他显示服务器相比,Xvfb在内存中执行所有图形操作而不显示任何屏幕输出。

从客户端的角度来看,它的行为与任何其他 X 显示服务器完全一样,为请求提供服务并根据需要发送事件和错误。但是,没有显示输出。

此虚拟服务器不需要运行它的计算机具有屏幕或任何输入设备。只需要一个网络层。

如果您找不到,那么另一种可能性是使用安装了完整 CygWin 的备用 PC。CygWin 带有一个成熟的 X 服务器,您可以将应用程序连接到它(并且忽略它)。您甚至可以将其设置为企业 /dev/null DISPLAY。

但我会先研究 Xvfb。

于 2009-05-07T13:58:42.230 回答
3

简短的回答,使用:

xvfb-run JAVA_COMMAND_LINE

根据您的 Linux 版本和风格,您可能需要在 xvfb-run 中更改一行代码才能运行所有内容。

于 2017-04-07T20:48:20.160 回答
2

如果它是一个 java 程序,您可以使用无头模式来运行应用程序。

尝试使用-Djava.awt.headless=true参数运行它,如果它是 jar 文件,则如下所示:

java -Djava.awt.headless=true -jar jarfile.jar

更多关于无头模式...

于 2009-05-07T14:16:09.007 回答
1

如上所述,您可以使用 Xvfb。这样,您将永远看不到输出(不过,您可以使用工具截屏)。

http://en.wikipedia.org/wiki/Xvfb http://packages.debian.org/sid/xvfb

或者你可以设置一个 VNC 服务器。在 Linux 下,VNC 服务器被实现为可以通过 VNC 访问的特殊 X 服务器,而不是显示在本地监视器上。这为您提供了一个无头 X 服务器,另外还有一个好处是您可以通过 VNC 连接到它,以防万一您确实需要查看正在发生的事情。

http://www.tightvnc.com/vncserver.1.html

vncserver 是(紧密)VNC 的一个很好的包装脚本,它使启动 VNC 服务器变得轻而易举。大多数发行版应该默认安装它。

于 2009-05-07T14:11:52.323 回答
1

我一直在使用 Xvfb,并且可以很好地运行需要在 ssh 会话中使用 X 服务器的应用程序。

为了补充之前的答案,我使用两种主要方式来运行 Xvfb:

  1. Xvfb在特定端口中运行并配置终端以使用此端口:

    Xvfb :10
    export DISPLAY=:10 
    YOUR_COMMAND
    
  2. 使用xvfb-run

    xvfb-run YOUR_COMMAND
    
于 2021-10-06T17:41:25.607 回答
0

你能在目标机器上运行虚拟机吗?然后你可以将你的 DISPLAY 设置为那个。或者您可以尝试 vnc (目前在不允许这样做的机器上,或者我会尝试......)。

于 2009-05-07T14:07:13.160 回答