~によるとこの回答、ヘッドレスシステムでユーザーの遅延を有効にしました。ただし、loginctl list-sessions
ユーザーはまだリストされていません。そのユーザーを使用してSSH経由でログインすると表示され、再接続を解除すると失われます。
システム全体を再起動せずに遅延セッションを作成する方法
私は試しましたが成功しませんでしたsystemctl restart systemd-logind
。
編集:私の目標は、そのユーザーが制御するタイマーを実行することです。sudo -iu
遅延が有効なシェルでこのフォームを試みると、次のエラーが発生します。
$ systemctl --user status servicename
Failed to connect to bus: No such file or directory
sshを介してログインしてloginctlにセッションを表示すると、期待どおりに機能します。しかし、今はSSHシェルでのみ動作し、まだsudo
シェルでは動作しないことがわかりました。したがって、実際にはセッションとは関係がないかもしれません。
答え1
ここでは「ユーザー」と「セッション」を混同しています。
を使用すると、loginctl enable-linger myuser
ユーザーのユーザー管理者はmyuser
起動時に(またはまだ起動していない場合はすぐに)開始されますが、実際にはユーザーへのセッションは開始されません(これはユーザーがログインしたときにのみ発生します)。
このコマンドを使用すると、loginctl list-users
その効果を確認できます。また、リンガーを有効にした直後にps -fu myuser
ユーザーに対してどの User Manager() が実行されているかを確認することもできます。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.
ただし、User Managerはセッションに関係なく開始されるため、ユーザーにユーザーユニット(サービスやタイマーなど)がある場合、そのユニットはユーザーがログインしているのかセッションを作成したかにかかわらず起動時に起動されます。
これがあなたに説明されることを願っています。
修正する:質問編集によると、現在経験している実際の問題は、SSHセッションではなくシェルsystemctl --user
でコマンドを実行するようです。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モジュールの1つがこれらの環境変数を設定するためです。 PAMを使用すると、sudo
PAM(少なくともPAMスタック全体ではない)を通過しないため、これらの項目を正しく設定できません。