systemctl 编辑问题“无法连接到总线”

systemctl 编辑问题“无法连接到总线”

当我尝试创建一个新的 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

我刚刚遇到了类似的问题,这是由于尝试以未登录的用户身份运行服务引起的(该用户已禁用登录,而我正在使用susg假装它)。

为什么sudo

您可能已添加,sudo因为该命令不起作用,您可以安全地将其删除。用户systemd 服务是普通用户拥有的常规文件。

定影Failed to connect to bus: No such file or directory

我找到了解决方案stackchangeDBUS_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 替换了systemctlsudo systemctl从而导致了错误。

相关内容