プログラムは$ HOME以外のホームディレクトリをどのように検出しますか?

プログラムは$ HOME以外のホームディレクトリをどのように検出しますか?

/home私は時々午前中に起動しないファイルサーバーがある組織で働いています。それでもコンソールにログインできますが、同様のエラーメッセージが表示されます$HOME not available, using /。この場合、私の解決策は次のとおりです。

cd /tmp
mkdir home
chmod 700 home
export HOME=/tmp/home
# wget a copy of my "emergency" rc files that I keep online
# xinit, twm etc. 

したがって、Webブラウザを介してまだ電子メールを読み取ることができ、ファイルサーバーが長期間ダウンした場合、gitlabの現在のプロジェクトを/ tmpで確認して続行します。

Xtermとtwmはパラメータなしで$HOME一時的な設定を尊重し、スムーズに動作し、bashでもうまく動作するようです。いいえ。それでもサービスを提供できないと不平を言っています。 (Chromiumは実行されますが、起動するとまだdbusが存在しない/ homeに迷惑をかけます。)cd~chromium-browser/home/organisation-specific-stuff/my-username--user-data-dir=/tmp/home/chromium

私の質問:

  • それに加えて、プログラムが「ホームディレクトリ」を参照する他の方法は何ですか$HOME?一部のプログラムが他のものよりも1つを選択するのに適切な理由(セキュリティ関連など)がありますか?

  • たとえば、chromium、dbusを一時的に使用するように指示する方法はありますか/tmp/home? root権限がないため、[1]の解決策は利用できません。同じ理由でchroot不可能に見えます。それともこれは愚かな/危険なことですか?

それが違いがあれば、私のシステムは「正確に」Ubuntuです。

[1]一時的に別のディレクトリをホームディレクトリとして使用する

答え1

あなたの質問は私の関心を引き起こしますが、まだ準備された答えはありません。私が試したUnix、Linux、または* BSDには、「ホームディレクトリ」に関連するシステムコールはありません。ユーザーのホームディレクトリを理解しているLinuxカーネルをGoogleで検索することはできません。したがって、私は値が$HOME「ホームディレクトリ」を決定するシェルの公式ドキュメントソースであると信じています。ログインプログラムは、ユーザーのシェルを分岐して実行したときのログインプログラムに基づいて設定されますHOME/etc/passwd

ご存知のように、値がディレクトリ$HOME名と一致しない場合は、ほとんどの場合、シェルの利便性の点で状況がわずかに乱雑になります。しかし、実際には完全に壊れることはありません。まだほとんどの場合、ログインシェルを使用できます。私は設定を試しましたexport HOME=/var/tmpbashこの点については気にしないようで、cd ~直接/var/tmpに移動します。

関連情報