![systemctl 编辑问题“无法连接到总线”](https://linux22.com/image/1204080/systemctl%20%E7%BC%96%E8%BE%91%E9%97%AE%E9%A2%98%E2%80%9C%E6%97%A0%E6%B3%95%E8%BF%9E%E6%8E%A5%E5%88%B0%E6%80%BB%E7%BA%BF%E2%80%9D.png)
当我尝试创建一个新的 systemd 单元时(在 Ubuntu 16.04 上)
$ sudo systemctl edit --user --full --force wagoOpenhabBridge.service
Failed to connect to bus: No such file or directory
除了这个问题之外,我的 systemd 运行良好。
经过一些互联网研究,我检查了以下内容:
- 我没有使用docker,Ubuntu直接在Intel NUC x64硬件上运行
- systemd 正在以 PID=1 运行
环境中的 XDG 变量是
XDGSESSIONID=1790 XDGDATADIRS=/usr/local/share:/usr/share:/var/lib/snapd/desktop XDGRUNTIMEDIR=/run/user/1000
知道哪里出了问题吗?我还可以检查什么?
答案1
我刚刚遇到了类似的问题,这是由于尝试以未登录的用户身份运行服务引起的(该用户已禁用登录,而我正在使用su
并sg
假装它)。
为什么sudo
?
您可能已添加,sudo
因为该命令不起作用,您可以安全地将其删除。用户systemd 服务是普通用户拥有的常规文件。
定影Failed to connect to bus: No such file or directory
我找到了解决方案stackchange,DBUS_SESSION_BUS_ADDRESS
您的环境中似乎缺少了。
您的命令可以按如下方式运行:
export XDG_RUNTIME_DIR="/run/user/$UID"
export DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus"
systemctl edit --user --full --force wagoOpenhabBridge.service
登录前运行命令
如果您希望在用户登录之前启动服务,请不要忘记运行:
sudo loginctl enable-linger USERNAME
答案2
解决方案是安装dbus-user-session
包(sudo apt install dbus-user-session
),重新启动并再次登录。
答案3
还有另一种情况会发生这种情况,即用户“未正确登录”......即使您sudo
的命令前没有(不应该存在,请参阅其他答案),也会发生这种情况。
首先检查您的$UID
,然后检查目录是否/run/user/$UID
确实存在。例如,当通过一个用户登录远程计算机,然后通过例如切换到另一个用户(碰巧没有管理员权限)时,情况可能并非如此sudo su some-user
。
系统systemd
使用polkit
进行身份验证。要确保您以给定用户身份登录且所有设置均正确,您可以使用工具 ,machinectl
该工具可通过以下方式安装:
sudo apt install systemd-container
现在使用你的某个账户的密码登录以获取“some-user”的 shell(替换为正确的用户名):
machinectl shell some-user@
现在您将看到目录/run/user/$UID
存在,您可以在 shell 中找到 XDG 环境变量,并且可以运行命令systemctl --user
。
答案4
Failed to connect to bus: No such file or directory
在 Ubuntu 20.04 上运行以下命令时我遇到了同样的错误( ):
systemctl --user mask tracker-store.service tracker-miner-fs.service tracker-miner-rss.service tracker-extract.service tracker-miner-apps.service tracker-writeback.service
问题是由于别名引起的:
alias systemctl='sudo systemctl'
它用 sudo 替换了systemctl
,sudo systemctl
从而导致了错误。