在最近的 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 会话时(通过
su
、ls /run/user
显示1001
并systemctl status user-1001.slice
显示其处于活动状态。 journalctl -u user-1000.slice
显示没有错误。- 对于新创建的用户来说,问题是相同的。
- 用户 1000 是“delta”,正在执行
su delta
(从 delta 的 ssh 会话),然后systemclt --user
,一切正常。不知何故,su
创建了所需的环境,但不是 ssh。
我还能做什么来调试问题?我可以将 systemd 状态配置恢复到新状态吗?或者将某些内容从 1002 复制到 1001?
答案1
借用自:
你会得到Failed to connect to bus
when $XDG_RUNTIME_DIR
is not equal to $UID
。如果您先以一个用户身份登录,然后再su
以另一用户身份登录,则可能会发生这种情况。
我怀疑您以 user 身份登录1000
。然后你就su
可以使用了1001
。您正在尝试以systemctl --user
user 身份使用总线,但是直到您再次执行了equal to操作1001
后,这才起作用。su 1000 ...
$UID
$XDG_RUNTIME_DIR
可能还有其他方法可以让您陷入这种情况。
su
解决方案是完全避免使用。根据系统开发人员:
“su”是一种用于临时更改用户身份和极少数其他进程凭据的工具。它不是用于打开全新登录会话的工具。新的登录会话具有定义良好的原始设置,不会从任何其他会话继承任何内容,但“su”uid 更改实际上并非如此:大多数执行环境都是继承的,以大量且不明显的方式继承方式,例如 MAC 上下文、审计上下文、cgroup 上下文、命名空间上下文、调度、计时器粒度、
相反,请确保您以完整会话登录。一些方法可以做到这一点:
- 打开新的 TTY 并登录
machinectl login
或者machinectl shell [email protected]
ssh [email protected]
- 退出显示管理器并重新登录。
答案2
UsePAM yes
我的 sshd 配置中丢失了。