在持续集成中(无头环境 -> mac os X 服务器),使用需要访问 GUI 的 tool/lib,xvfb/display emulator/X11 转发

In continuous integration (headless env -> mac os X server), use a tool/lib which needs access to GUI, xvfb/display emulator/X11 forwarding

我们有一个 Mac os x 服务器 (10.10.3),我们用它来 运行 使用 Jenkins 进行功能测试。

我们想使用(在我们的测试中)tool/lib(sikulix 用于信息),它在引擎盖下使用 java.awt.Robot class -java.awt.GraphicsEnvironment-。问题是:我们不能在无头环境中使用这个 java class,因为它需要访问 GUI。

所以我想知道是否有 solution/hack 可以让这个工具与 jenkins 一起工作。

考虑到我们有一个 USB-HDMI 模拟器(mac 无头加速器)可以模拟连接的显示器。

我们还安装了 Xquartz、X11、xauth,所以我认为它可以通过强制 java.awt.headless 属性 为 false 并使用一个Xwindow,但事实并非如此。

如果我错了请纠正我:我们不需要真正的屏幕来做到这一点,这是显示器的目标 emulator/simulator;不是吗?

我在测试中成功使用此库的尝试:

但我无法确定最后一个解决方案是否有用。虽然我已经通过 ssh 执行了脚本,但我连接了一个屏幕:它可能会影响某些东西。

(请记住,最终目标是使用 jenkins 执行测试)。

这让我尝试了这个:通过 ssh 和 -Y 标志或通过修改 ssh_config/sshd_config 文件 执行脚本(访问 mac -远程服务器-) 屏幕共享处于活动状态,但它不会自动识别 X-window :(

这是我的问题:

是的,我知道,这个问题很奇怪,但我的大脑在燃烧,我感到困惑...

顺便说一句,我宁愿做任何事情都没有头,但如果不是 possible 并且我必须使用屏幕共享,我很好。

目前我真的很想知道是否可以在无头环境中启动需要 X11 -on mac- 的 GUI 应用程序 os- 我认为答案是肯定的安装正确,但显然没那么简单...或者我一定是没理解正确。

对于 X11 转发,我设置了 $DISPLAY 变量,但我仍然得到

Error: Can't open display 'address'

即使我将显示设置为本地、远程或地址,我仍然被具有 GUI 访问权限的库阻止。

另一种解决方案可能是附加终端会话(屏幕共享 terminal/terminal 启动脚本),我明天会尝试使用 tmux。我仍然觉得服务器无法检测到它的共享会话很奇怪(我想下次再说!)...有一个打开的屏幕老兄:s

使用 xvfb :

export DISPLAY=:1
Xvfb :1 &

然后mvn命令还是不行

好吧,一种解决方案是在屏幕共享终端中启动 jenkins (war)(或者只打开 jenkins 会话)。这样,当您启动作业时,它会使用屏幕共享显示。

[其实不是这样,问题只是关于访问GUI,是否附加屏幕。因此,如果您在服务器上安装了适当的应用程序(X11、Xfvb、XQuartz mac 等),它就会工作。 编辑 : 仍然不确定]

我的问题是:首先我有 java headless 限制,其次我还有 -java GUI-/-mac ssh- 限制,Linux.

查看 atomicpirate 的回答:How to run a java GUI on mac osx after ssh

总而言之,默认情况下,它通过 mac 上的 ssh 使用 java 无头库,强制它使用 GUI 库:

java.awt.headless = false

加上(mac)

export AWT_TOOLKIT=CToolkit

如果您通过 Jenkins 启动您的测试,您也可以看看这个 - 如果您无法访问 WindowServer - : Build Unity project with Jenkins failed

编辑 : 虽然它对我不起作用,即使通过代理,无论如何也有必要用 jenkins 用户 (VNC) 打开会话。