为本地用户启用 X 显示访问

为本地用户启用 X 显示访问

我正在使用 GitLab CI 在 Ubuntu 14.04 设置上运行自动化测试。GitLab CI 运行器创建了一个新用户,用于执行所有测试。现在这些测试包括 GUI 组件,所以我需要一个 X 显示器 - 即使没有物理显示器,我也会通过中的和选项gitlab-runner强制启用它。ConnectedMonitorCustomEDIDxorg.conf

问题是,当用户gitlab-runner通过DISPLAY=:0.0 ./runTestApp“无法连接到显示器:0.0”错误。我可以通过以普通用户身份登录工作站并运行来修复它sudo DISPLAY=:0.0 xhost +

然而:

  1. 我还没有找到成功在启动时自动运行的方法xhost +(尝试将其放入/etc/rc.local
  2. 手册页说这xhost +实际上非常不安全,但我还没有找到替代方法。感觉这可能与文件有关.Xauthority(我的普通用户有,但gitlab-runner没有)

gitlab-runner永久访问 X 显示器的最佳方法是什么?

答案1

首先,为了仅授予 Gitlab CI 运行器的访问权限,您需要使用更受限制的命令:

xhost +SI:localuser:gitlab-runner

其次,/etc/rc.local此命令运行得太早,无法生效,而且您需要进行设置$DISPLAY才能使其起作用。

这取决于您的 X 服务器如何启动。如果您使用的是 LightDM,我认为您可以通过将以下行添加到来使其工作/etc/lightdm/lightdm.conf

greeter-setup-script=xhost +SI:localuser:gitlab-runner

答案2

如果您执行此操作,ps alxww|grep X您应该会看到您的 X 服务器正在运行,并且选项-auth后跟某个文件名。此文件包含一个名为 MIT-MAGIC-COOKIE-1 的随机数。只有在协议启动时可以将此数字提供给 X11 服务器的 X11 客户端才允许连接。由启动服务器的同一用户运行的应用程序将在 ~/.Xauthority 文件中找到 cookie 值,其他人通常无法读取该文件。

您可以-auth通过查看所使用的 xdm、gdm 等启动机制的配置来从服务器启动中删除该选项,或者您可以将 cookie 从登录用户复制到其他用户,或者您可以授予他们对 .Xauthority 文件的读取权限。

例如,以用户 pholz 的身份复制 cookie:

xauth list :0 >/tmp/toadd
chmod a+r /tmp/toadd

并以用户 gitlab-runner 的身份执行:

xauth add $(</tmp/toadd)

或者允许读取访问:

chmod a+r /home/pholz/.Xauthority
chmod a+rx /home/pholz/

然后在 gitlab-runner 环境设置:

export XAUTHORITY=/home/pholz/.Xauthority

当然,如果你真的不需要显示器,你可以启动一个单独的 X11 服务器,它将显示器显示到内存中,并且完全独立于任何用户登录和屏幕。你只需要执行以下操作:

sudo apt-get install xvfb
Xvfb :1 -noreset &
export DISPLAY=:1

然后,您的所有应用都将显示在此虚拟帧缓冲区中。如果您想检查屏幕上的内容,可以使用屏幕转储、远程桌面或 Xnest。

相关内容