rug*_*ugk 5 login systemd podman
这是一台具有 SSH 访问权限和 systemd 的远程计算机。
\n当我尝试运行 systemd 用户命令时,我基本上遇到了这个错误:
\n$ systemctl --user status\nFailed 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)\nRun Code Online (Sandbox Code Playgroud)\n虽然其他答案建议仅设置或“伪造”请求的变量恕我直言,但这不是一个正确的解决方案。
\n问题基本上是我以一个用户身份登录(我用作系统管理员)并且我确实通过切换用户su。因此,这是非常可以理解的,systemd 不知道我在这里运行的用户是什么\xe2\x80\xa6\n所以我知道它很困惑。
请注意,对于 systemd 服务,使用系统总线可能是更好的主意。
\n然而,对于试验 podman,特别podman generate systemd是还想要一个用户级会话,也许只是拥有一个挥之不去的用户 ( loginctl enable-linger) 是一种有用的方法。
现在真正的问题是:如何切换到其他用户,以便 systemd 真正知道该用户现在已登录?我只想以不同的用户身份“操作”(在新的 shell 中)。就像我会使用su.
请注意,我不想以其他用户身份通过 SSH 连接到服务器。这需要额外的 SSH 密钥和其他不必要的东西。我想在登录时切换用户(作为可以运行的用户sudo,即系统管理员)。
我已经sudo machinectl login,但那是:
sudo machinectl login my-user。我发现machinectl shell,这听起来正是我想做的,但我无法让它工作。\n我尝试过machinectl shell my-user和machinectl shell my-user@localhost,但它总是告诉我:
\n\n无法获取 shell PTY:没有已知的机器 \'localhost\'
\n
嗯\xe2\x80\xa6 请注意,它还显示我没有“机器”(无论这些是什么?不是localhost一个吗?):
$ machinectl list\nNo machines.\nRun Code Online (Sandbox Code Playgroud)\n
啊,我差一点就明白了:
\n请注意,无论出于何种原因,本地“机器”(即“localhost”)都machinectl被称为:host.
此外,无论出于何种原因,它都将其隐藏在 中machinectl list。\n您需要运行machinectl list --all才能真正看到它。
现在,鉴于我们知道这一点,这实际上非常简单:\n只需运行以下命令:
\n$ sudo machinectl shell my-user@.host\nRun Code Online (Sandbox Code Playgroud)\n现在你已经在你的新 shell 中了 \xe2\x80\xa6 my-user。\n如果你检查环境变量$XDG_RUNTIME_DIR以及$DBUS_SESSION_BUS_ADDRESS我最初的错误中的环境变量,你可以(在某种程度上)验证这一点。
另请注意,显然还有另一种替代语法,不需要了解该“本地”机器:
\n$ sudo machinectl shell --uid my-user\nRun Code Online (Sandbox Code Playgroud)\nmachinectl实际上,在示例部分的手册页末尾也提到了这一点。
| 归档时间: |
|
| 查看次数: |
2173 次 |
| 最近记录: |