我有一个安装软件的 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 会话地址。当您这样做sudo
或su
获得非常有限的环境时,您只会缺少DBUS_SESSION_ADDRESS
其他环境变量。因此,当您遇到类似错误时,请检查您的环境,也许缺少一些重要的东西。