今日、Arch Linuxを実行しているボックスにssh
を入れて驚いたところ、/run/user/$(id -u)
が存在しないことに気付きました。
XDGベースディレクトリ仕様 は次のように述べています。
_
$XDG_RUNTIME_DIR
_は、ユーザー固有の非必須ランタイムファイルと他のファイルオブジェクト(ソケット、名前付きパイプなど)を格納する必要があるベースディレクトリを定義します。ディレクトリはユーザーが所有する必要があり、ユーザーはそのディレクトリへの読み取りおよび書き込みアクセス権を持つ唯一のユーザーである必要があります。 UNIXアクセスモードは_0700
_でなければなりません。ディレクトリの存続期間は、ログインしているユーザーにバインドする必要があります。ユーザーが最初にログインしたときに作成し、ユーザーが完全にログアウトした場合は、ディレクトリを削除する必要があります。ユーザーが複数回ログインする場合、同じディレクトリをポイントする必要があり、そのディレクトリはシステムへの最初のログインから最後のログアウトまで存在し続け、途中で削除されないことが必須です。ディレクトリ内のファイルは、再起動または完全なログアウト/ログインサイクルに耐えることはできません。
systemd
ボックスの場合、/run/user/$(id -u)
は_$XDG_RUNTIME_DIR
_の推奨場所ですか(作成する必要がある場合でも?)
そうでない場合、_$XDG_RUNTIME_DIR
_を作成するためのベストプラクティスは何ですか?
「完全に」ログアウトした場合にのみディレクトリが確実に削除されるようにするにはどうすればよいですか?
(「完全に」とは、ログインシェルによって作成されたすべてのプロセスが終了したことを意味しますか?それを確認する方法は?)
/run/user/N
ディレクトリ、user@N
サービス、およびXDG_RUNTIME_DIR
環境変数は、systemd固有のプラグ可能な認証モジュールとlogind
サービスによって管理されます。最初のログオン時に、ディレクトリを作成し、そこにマウントされたファイルシステムを作成して、サービスを開始します。そして最後のログオフ時に、サービスを停止し、ファイルシステムをアンマウントし、ディレクトリを削除します。この動作は、systemdのlinger
オプションがアカウントに設定されている場合に変更されます。
他のシステムは動作が異なります。
pam_systemd
。 systemdマニュアルページ。 Freedesktop.org。