Systemd,使用 sudo 访问启动用户级单元

Systemd,使用 sudo 访问启动用户级单元

我有一个安装软件的 Debian 软件包,它需要在安装后脚本中启动两个应用程序。第一个是守护进程,第二个是后台进程,两者都由 管理systemd。问题是我运行sudo dpkg -i ...,它无法启动用户级单元,并出现以下错误:Failed to connect to bus: No such file or directory.安装后启动脚本是一种正常做法,但 sudo 权限允许我启动我的脚本。也许我遗漏了什么。有人知道如何解决这个问题吗?

用于启动脚本的命令:systemctl --user start test.service。当从安装程序执行时,它实际上变成sudo systemctl --user start test.service。(从终端执行时不起作用)。

答案1

好的,我已经设法解决了这个问题。这本来就不是什么问题,只是我对 DBus 会话及其工作原理缺乏了解。希望我的回答能对某人有所帮助。

当您打开终端并执行时,systemctl --user command unit 一切都会很好,但是当您尝试sudo使用命令执行或切换到另一个用户时su,您将失败并出现我遇到的错误:

Failed to connect to bus: No such file or directory.

问题在于,systemctl连接到用户会话需要使用在DBUS_SESSION_ADDRESS环境变量中设置的 dbus 会话地址。当您这样做sudosu获得非常有限的环境时,您只会缺少DBUS_SESSION_ADDRESS其他环境变量。因此,当您遇到类似错误时,请检查您的环境,也许缺少一些重要的东西。

相关内容