从 systemd 服务文件设置 `xhost`

从 systemd 服务文件设置 `xhost`

我想DISPLAY=:0 xhost +在每次系统启动时运行。 (我知道 的安全隐患xhost +。)

这个命令在本地执行,效果很好:

username@hostname:`$ DISPLAY=:0 xhost +
access control disabled, clients can connect from any host

但是,当我想通过以下 systemd 服务文件运行它时,它失败了,如下所示。

username@hostname:/etc/systemd/system$ cat set-xhost.service 
[Unit]
Description=Set access control for X server

[Service]
Type=oneshot
Environment=DISPLAY=:0
ExecStart=/usr/bin/xhost +

[Install]
WantedBy=multi-user.target
username@hostname:~$ sudo systemctl start set-xhost.service
Job for set-xhost.service failed because the control process exited with error code. See "systemctl status set-xhost.service" and "journalctl -xe" for details.

username@hostname:~$ sudo journalctl -u set-xhost.service
Jun 09 12:09:28 hostname systemd[1]: Starting Set access control for X server...
Jun 09 12:09:28 hostname xhost[7067]: No protocol specified
Jun 09 12:09:28 hostname xhost[7067]: /usr/bin/xhost:  unable to open display ":0"
Jun 09 12:09:28 hostname systemd[1]: set-xhost.service: Main process exited, code=exited, status=1/FAILURE
Jun 09 12:09:28 hostname systemd[1]: Failed to start Set access control for X server.
Jun 09 12:09:28 hostname systemd[1]: set-xhost.service: Unit entered failed state.
Jun 09 12:09:28 hostname systemd[1]: set-xhost.service: Failed with result 'exit-code'.

这背后的原因是什么?据我所知,这应该有效。它不起作用表明我缺少该领域的一些重要知识。

答案1

由于您没有指定任何依赖项,例如After=<the service that starts your X11 server>,systemd 通常会在启动过程中尽快运行您的服务。

“尽快”很有可能是在实际的 X11 服务器启动之前。并且xhost仅当它可以联系正在运行的 X11 服务器时才有效。

相关内容