如何立即应用缠绵

如何立即应用缠绵

按照这个答案,我在无头系统上为用户启用了延迟。但是在 中loginctl list-sessions,用户尚未列出。如果我通过 ssh 使用该用户登录,它会显示,一旦我再次断开连接,它就会丢失。

如何在不重新启动整个系统的情况下生成延迟会话

我尝试过但没有成功systemctl restart systemd-logind

编辑:我的目标是运行由该用户控制的计时器。如果我sudo -iu在启用延迟后在 shell 中尝试此形式,则会收到以下错误:

$ systemctl --user status servicename
Failed to connect to bus: No such file or directory

如果我通过 ssh 登录(并且在 loginctl 中显示一个会话),它会按预期工作。但现在我注意到它只能在 ssh shell 中工作,仍然不能在sudoshell 中工作。所以它实际上可能与会话无关。

答案1

您在这里混淆了“用户”和“会话”。

使用loginctl enable-linger myuser将使用户的用户管理器myuser在启动时启动(如果尚未启动,则立即启动),但它不会真正为用户启动任何会话(这些会话仅在用户登录时发生。)

如果您使用该loginctl list-users命令,您将看到它的效果。您还可以在启用 linger 后立即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.

但无论会话如何,用户管理器都会启动,因此如果您的用户有用户单元(例如服务或计时器),那么无论用户是否已登录或创建会话,这些单元都会在启动时启动。

我希望这能向你解释。


更新:从您对问题的编辑来看,您真正遇到的麻烦似乎是systemctl --usersudo -ishell 而不是 SSH 会话运行命令。

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 堆栈),因此您无法正确设置这些内容。

相关内容