为什么除非我使用“su”运行“systemctl --user”,否则它会损坏?

为什么除非我使用“su”运行“systemctl --user”,否则它会损坏?

在最近的 Lubuntu 22.04 安装中,当systemctl --user使用用户 1000 运行时,我得到:

❯ systemctl status --user
Failed to connect to bus: $DBUS_SESSION_BUS_ADDRESS and $XDG_RUNTIME_DIR not defined (consider using --machine=<user>@.host --user to connect to bus of other user)
❯ eval $(dbus-launch --sh-syntax)
❯ systemctl status --user
Failed to read server status: Process org.freedesktop.systemd1 exited with status 1

但是,当使用另一个用户(1001)或同一用户时,viasu $user工作systemctl status --user得很好。

数据:

  • 当用户 1001 有一个活动的 tty 会话时(通过suls /run/user显示1001systemctl status user-1001.slice显示其处于活动状态。
  • journalctl -u user-1000.slice显示没有错误。
  • 对于新创建的用户来说,问题是相同的。
  • 用户 1000 是“delta”,正在执行su delta(从 delta 的 ssh 会话),然后systemclt --user,一切正常。不知何故,su创建了所需的环境,但不是 ssh。

我还能做什么来调试问题?我可以将 systemd 状态配置恢复到新状态吗?或者将某些内容从 1002 复制到 1001?

答案1

借用自:

无法获得 D-Bus 连接:连接被拒绝

你会得到Failed to connect to buswhen $XDG_RUNTIME_DIRis not equal to $UID。如果您先以一个用户身份登录,然后再su以另一用户身份登录,则可能会发生这种情况。

我怀疑您以 user 身份登录1000。然后你就su可以使用了1001。您正在尝试以systemctl --useruser 身份使用总线,但是直到您再次执行了equal to操作1001后,这才起作用。su 1000 ...$UID$XDG_RUNTIME_DIR

可能还有其他方法可以让您陷入这种情况。

su解决方案是完全避免使用。根据系统开发人员:

“su”是一种用于临时更改用户身份和极少数其他进程凭据的工具。它不是用于打开全新登录会话的工具。新的登录会话具有定义良好的原始设置,不会从任何其他会话继承任何内容,但“su”uid 更改实际上并非如此:大多数执行环境都是继承的,以大量且不明显的方式继承方式,例如 MAC 上下文、审计上下文、cgroup 上下文、命名空间上下文、调度、计时器粒度、

相反,请确保您以完整会话登录。一些方法可以做到这一点:

答案2

UsePAM yes我的 sshd 配置中丢失了。

相关内容