我如何放宽 jenkins 守护进程的 X 安全限制?

我如何放宽 jenkins 守护进程的 X 安全限制?

当我在命令行上这样做时,它工作得很好

xhost +  
su - jenkins  
emulator -avd myAVD.avd  

emulator -avd myAVD.avd

jenkins 守护进程执行失败

"SDL init failure: No available video device"  

我怎样才能放宽 jenkins 守护进程的 X 安全约束,
以便它可以emulator -avd myAVD.avd不失败地运行?

答案1

你得到错误最可能的原因是emulator不知道在哪里您的显示是。X11 程序使用$DISPLAY环境变量来发现 X11 服务器位置,并且大多数守护进程启动时不会接收环境变量。(大多数守护进程不需要 [也不应该] 运行 X11。)

你需要找到一种方法将当前的值传递$DISPLAY给守护进程——注意它可能登录之间进行更改。

至于安全,不要曾经使用过xhost +– 它提供完全访问权限每个人1.而是让其他账户访问您的权威机构数据。

$ xauth extract /dev/stdout $DISPLAY | su -c "xauth merge /dev/stdin" jenkins

实现所有这些自动化的一种可能方法是将一些命令放入您的~/.xprofile...您将需要启用 ACL 支持才能进行以下操作:

# 你的 .xprofile
如果 [ “$DISPLAY” ]; 那么
    触摸/tmp/jenkins-display
    setfacl -mu::rw,u:jenkins:r,g::-,o::- /tmp/jenkins-display
    { echo $DISPLAY; xauth nextract /dev/stdout $DISPLAY; } > /tmp/jenkins-display

并编写一个emulator-wrapper运行该emulator工具的脚本:

/bin/sh #!/bin/sh 复制代码
#“模拟器”的包装脚本
{ 读取 -r DISPLAY;导出 DISPLAY;xauth nmerge /dev/stdin;}}
执行模拟器“$@”

有点丑。


1 “每个人”通常指可以在计算机上运行程序的任何用户 - 但如果您的 X11 服务器正在监听 TCP 连接,则意味着“整个互联网”,尽管这在现代发行版中并不常见。

相关内容