web-dev-qa-db-ja.com

ログイン/ログオフ時に$ XDG_RUNTIME_DIRを作成/削除する方法

今日、Arch Linuxを実行しているボックスにsshを入れて驚いたところ、/run/user/$(id -u)が存在しないことに気付きました。

XDGベースディレクトリ仕様 は次のように述べています。

_$XDG_RUNTIME_DIR_は、ユーザー固有の非必須ランタイムファイルと他のファイルオブジェクト(ソケット、名前付きパイプなど)を格納する必要があるベースディレクトリを定義します。ディレクトリはユーザーが所有する必要があり、ユーザーはそのディレクトリへの読み取りおよび書き込みアクセス権を持つ唯一のユーザーである必要があります。 UNIXアクセスモードは_0700_でなければなりません。

ディレクトリの存続期間は、ログインしているユーザーにバインドする必要があります。ユーザーが最初にログインしたときに作成し、ユーザーが完全にログアウトした場合は、ディレクトリを削除する必要があります。ユーザーが複数回ログインする場合、同じディレクトリをポイントする必要があり、そのディレクトリはシステムへの最初のログインから最後のログアウトまで存在し続け、途中で削除されないことが必須です。ディレクトリ内のファイルは、再起動または完全なログアウト/ログインサイクルに耐えることはできません。

systemdボックスの場合、/run/user/$(id -u)は_$XDG_RUNTIME_DIR_の推奨場所ですか(作成する必要がある場合でも?)

そうでない場合、_$XDG_RUNTIME_DIR_を作成するためのベストプラクティスは何ですか?

「完全に」ログアウトした場合にのみディレクトリが確実に削除されるようにするにはどうすればよいですか?

(「完全に」とは、ログインシェルによって作成されたすべてのプロセスが終了したことを意味しますか?それを確認する方法は?)

2
Tom Hale

/run/user/Nディレクトリ、user@Nサービス、およびXDG_RUNTIME_DIR環境変数は、systemd固有のプラグ可能な認証モジュールとlogindサービスによって管理されます。最初のログオン時に、ディレクトリを作成し、そこにマウントされたファイルシステムを作成して、サービスを開始します。そして最後のログオフ時に、サービスを停止し、ファイルシステムをアンマウントし、ディレクトリを削除します。この動作は、systemdのlingerオプションがアカウントに設定されている場合に変更されます。

他のシステムは動作が異なります。

参考文献

2
JdeBP