回答:
シェルは、TTYデバイス(接続されている場合)を使用して、ユーザー入力を取得し、出力を生成します。シェルがTTYに接続されているという事実は、によって決定されますgetty
(そしてによって保存されますlogin
)。ほとんどの場合、シェルはTTYに接続されているかどうかを気にしません。カーネルとの相互作用は、システムコールを介して行われます。
X11サーバーはログインを認識しません(シェルのように)。X11のログインプロセスは、2つの方法で機能します。
startx
)。X11サーバーが入力を取得して出力を生成する方法は、シェルと比較して非常に異なります。入力側では、Xはマウスから始めて、シェルが認識しないデバイスについて知っています。通常、それらを独自のドライバーで直接管理します。キーボードの場合でも、Xにはカーネルの処理を補完する独自のドライバーがあります(したがって、Linuxでは、XはTTYドライバーを使用してキーボードから生の入力を読み取りますが、独自のドライバーを使用して解釈します)。出力側では、Xドライブは、カーネルのヘルプの有無にかかわらず、TTYデバイスを経由せずに、ディスプレイデバイスを直接表示します。
多くのシステム上のX11サーバが行うカーネルと同期するように、使用するTTYデバイスかかわら:仮想端末をサポートするシステムで、Xは「予備」それが実行しているVT、およびハンドルVTの切り替えに必要。途中でいくつかの微妙な点があります。したがって、Linuxでは、XはTTYを調整してGPM(テキストモードでマウスを使用できるようにするプログラム)を無効にします。XはVTも共有できます...
過去の一部のワークステーションでは、カーネルとの明示的な同期はあまり行われていませんでした。実行しなかった場合xconsole
、X11ディスプレイの上部に「テキストモード」でカーネルメッセージが表示される可能性があります。
カーネルにはログインの概念、またはログインするユーザーの概念はまったくありません-気になるのは、特定のユーザーIDで実行されているプロセスがあることだけです(これはカーネルのビジネスでもありません!)。ターミナルでのgettyまたはX11ディスプレイマネージャーのログインプログラムは、rootとして実行され、setuid()および関連する呼び出しを使用して、ローカルリゾルバー(NSSおよびlibcスタッフ-カーネルビジネスでもない)が提案するUIDの環境を設定します認証したばかりのユーザーに使用します。