科技 · 实用指南
systemctl --user 提示“Failed to connect to bus”?导出变量前先证明会话上下文
核对有效用户、运行时目录、总线套接字和用户管理器,再按交互登录、远程管理或持久服务选择修复。

用户总线错误通常来自执行身份与登录会话归属不一致;先保存上下文,不要直接套用一行命令。
安全流程是证明四个关联层、判断所需生命周期、只改一个原因,并从原失败入口重新验证。
先把提示视为上下文不匹配
`systemctl --user` 连接某个登录用户的服务管理器。No medium found、No such file or directory 与环境未定义都是传输症状,不证明 unit 文件错误或 D-Bus 整体损坏。
记录原命令、有效 UID、目标用户、启动器、XDG_RUNTIME_DIR、DBUS_SESSION_BUS_ADDRESS 与完整错误,并标明 SSH、sudo、su、cron、CI、Ansible、容器或交互登录。
在不创建对象的前提下核对四层
核对目标 UID,并从外部检查 `/run/user/UID` 及其 `bus` 的存在、属主、模式与类型;用 loginctl 读取用户和会话状态。
不要因为路径常见就盲目导出变量。身份、运行时目录、套接字和用户管理器必须一致。
区分三种执行模型
交互登录应在真实用户会话中复现,不能使用 `sudo systemctl --user`;一次性管理应明确寻址目标用户管理器;长期无人值守服务才评估 linger。
`loginctl enable-linger` 会让用户管理器跨退出存活并可能在开机启动,这是需要批准的生命周期政策变更。
先分类故障层再改包
错误 UID 指向 sudo、su 或自动化身份;缺运行时目录或管理器指向 login/PAM/logind;套接字缺失或属主错误指向会话创建或陈旧状态。
安装包、重启、开启 linger 或修改 shell 启动文件可能碰巧改变别的层;每次只做一个有证据的改动。
通过同一启动器复测
修复后从原 SSH、自动化、cron 或管理命令重跑,并再次确认四层一致。
先用只读用户管理器命令验证,再检查目标 unit;只在另一 shell 成功不算闭环。
明确本审计的边界
本流程不决定服务应使用 user unit 还是 system unit,也不授权 linger、修 PAM、删除运行时文件或创建总线。
完成标准是原启动器能到达正确用户管理器,并且只有在明确需要时才跨退出或重启保持服务。
