根据这个答案,我为无头系统上的用户启用了逗留。然而,在loginctl list-sessions中,还没有列出用户。如果我通过ssh与这个用户登录,就会显示,一旦我再次断开连接,它就会丢失。
如何在不重新启动整个系统的情况下生成挥之不去的会话
我尝试过systemctl restart systemd-logind,但没有成功。
编辑:我的目标是运行一个由这个用户控制的计时器。如果在启用enabling之后尝试使用此表单sudo -iu shell,则会得到以下错误:
$ systemctl --user status servicename
Failed to connect to bus: No such file or directory如果我按ssh登录(一个会话出现在loginctl中),它将作为epxected运行。但是现在我注意到它只在shell中工作,仍然不能在sudo shell中工作。因此,它实际上可能与会议无关。
发布于 2018-08-16 01:50:00
您在这里混淆了“用户”和“会话”。
使用loginctl enable-linger myuser将使用户myuser的用户管理器在引导时启动(如果尚未启动,则立即启动),但它不会真正为用户启动任何会话(这些会话仅在用户登录时才会发生)。
如果使用loginctl list-users命令,您将看到它的效果。您还可以使用ps -fu myuser看到用户管理器(systemd --user)在启用逗留器后立即为用户运行:
[root@myhost ~]# loginctl list-users
UID USER
0 root
1 users listed.
[root@myhost ~]# ps -fu myuser
UID PID PPID C STIME TTY TIME CMD
[root@myhost ~]# loginctl enable-linger myuser
[root@myhost ~]# ps -fu myuser
UID PID PPID C STIME TTY TIME CMD
myuser 12345 1 20 18:44 ? 00:00:00 /usr/lib/systemd/systemd --user
myuser 12349 12345 0 18:44 ? 00:00:00 (sd-pam)
[root@myhost ~]# loginctl list-users
UID USER
0 root
1001 myuser
2 users listed.但是不存在myuser的新会话,因为它没有通过控制台、GUI或SSH登录:
[root@myhost ~]# loginctl list-sessions
SESSION UID USER SEAT TTY
1 0 root tty0
1 sessions listed.但是不管会话是什么,用户管理器都会启动,所以如果用户有用户单元(例如服务或计时器),那么不管用户登录或创建会话,这些单元都将在启动时启动。
我希望这能解释给你听。
UPDATE:从编辑到问题,看起来您真正遇到的麻烦是从systemctl --user shell而不是SSH会话运行sudo -i命令。
在切换到用户之后,您可以通过导出XDG_RUNTIME_DIR来解决这个问题,例如:
$ export XDG_RUNTIME_DIR=/run/user/$UID或者:
$ XDG_RUNTIME_DIR=/run/user/$UID systemctl --user status servicename在通过SSH登录时,您不需要这样做,原因是SSH将使用PAM对您进行身份验证,其中一个PAM模块将为您设置这些环境变量。如果使用sudo,则不会通过PAM (至少不是完整的PAM堆栈),因此无法正确设置这些堆栈。
https://unix.stackexchange.com/questions/462845
复制相似问题