
ユーザーがテキスト インターフェイスを通じてログインするときのシェルの初期化シーケンスについては、私は非常に ( zsh
)/ある程度 ( ) 精通しています。bash
しかし、「グラフィック ログイン」、つまり、ユーザーがグラフィック インターフェイス (Linux のいわゆる「ディスプレイ マネージャー」や標準の OS X ログインなど) を介してログインする場合はどうなるでしょうか。
私は特に、「ログイン シェル」にのみソースとして使用されるはずのファイル ( .zprofile
、、 ) に興味があります。ログインがテキスト インターフェイス経由で行われる場合、これは「セッションごとに 1 回.zlogin
だけ.profile
」ソースとして使用されるのとほぼ同じです。
ログインがグラフィック インターフェイスを通じて行われる場合、そもそも「ログイン シェル」が存在するかどうかは私にはわかりません。また、たとえ.zprofile
et al. がグラフィック ログイン シーケンスの一部として何らかの形でソース化されたとしても、これらのファイルのソース化によって生じる設定 (エクスポートされた環境変数など) がセッションの残りの部分にどのように影響するかは私にはわかりません。
たとえば、これらの設定は、ログイン時に自動的に起動されるアプリの環境に影響しますか? または、ユーザーが後でデスクトップ アイコンをクリックして起動するアプリの環境に影響しますか?
ところで、.zshenv
、または.zshrc
/ .bashrc
1で行われる設定についてはどうでしょうか? これらは、「自動起動」アプリや「クリック起動」アプリが見る環境に何らかの影響を与えますか?
最後の 2 つの質問のいずれかに対する回答が「デフォルトではない」のようなものである場合、次の質問は次のようになります。(少なくとも) .zprofile
/で実行された設定.profile
、および場合によっては も.zlogin
、すべての「自動起動」および「クリック起動」アプリケーションによって表示される環境に確実に送信されるようにするにはどうすればよいでしょうか。
zsh
私は、 と という 2 つのシェルとbash
、 Linux と OSX という 2 つのオペレーティング システムについて、これらの質問の回答に興味があります。
1.zshrc
/が、 /によって明示的にソース化されるのではなく、「対話型」シェルの/組み込み初期化シーケンス.bashrc
の一部としてソース化されていると想定します。zsh
bash
.zprofile
.profile
答え1
シェル構成ファイルは、シェルが呼び出されたときにのみ機能します。 そこには魔法のようなものは何もありません。 どのプロセスでも環境を変更できます。 大半は環境を読み取るだけですが、他のプログラムを実行するプログラムでは、まず環境を変更する理由があるはずです。
すべてはここから始まる初期化、またはシステム上の pid 1 を起動します。X サーバーを起動し、ディスプレイ マネージャを起動してログイン プロンプトを表示します。X11 を起動するシーケンスにはログイン シェルを含める必要はありません。たとえば、初期化/usr/bin/startxでfork(2)とexec(2)を呼び出すことができます。ログインもなし.profile
。Xサーバーは、初期化。
Xサーバーの環境はどのようなものでしょうか? ps(1)でプロセスの環境を抽出できます。より簡単な方法は、sshホスト名環境変数(どこホスト名はX11サーバをホストしているマシンの名前です。Xサーバで通常行われるのと同様に、sshdは環境ログインシェルを作成せずに。
次に、ログイン時にディスプレイ マネージャーが実行する処理について説明します。ディスプレイ マネージャーはプロセスをフォークし、uid を (おそらく) ルートからユーザーの uid に変更し、セッション マネージャーを起動します。詳細については、わかりやすいマニュアルを参照してください。
その時点から、セッション マネージャは、どのような手段を使っても、その環境を確立します。セッション マネージャが作成するプロセス (コマンド インタープリタや、クリックして作成される他のアプリケーション) は、その環境を継承します。セッション マネージャは、アイコンごとに追加の環境変数値を定義する方法を提供する場合があり、クリックされたものによって開始されるプロセスは (シェルと同様に) 起動時に、おそらく構成ファイルによって環境を変更する場合があります。
すべてはそこにあります。環境がどのようにして現在の状態になったかを理解するには、その環境を作成した一連のプロセスをたどり、各プロセスが環境に何をしたかを理解する必要があります。残念ながら、その一連のプロセスは OS、ディストリビューション、マシンとユーザーの構成によって異なるだけでなく、特に十分に文書化またはツール化されていません。たとえば、sshd が起動する前にどの環境変数が設定されるかを説明したドキュメントや、セッション マネージャーの環境を表示する X11 クライアントを見つけるのは困難です。