Linuxカーネルとのテキストベースの対話について理解しているように、init
と呼ばれるプログラムがgetty
(またはagetty
)を開始し、/dev
およびプロンプトの下でTTYデバイスの1つに接続しますユーザー名。この後、login
というプログラムが実行され、ユーザーのパスワードの入力を求め、正しい場合は、ユーザーの優先シェル(例:bash
またはcsh
)が起動されます。この時点で、bashはTTYデバイスを介してカーネルと対話します。
このログインプロセスはX11でどのように機能しますか? X11はTTYを介してカーネルと対話しますか?
シェルは、TTYデバイス(接続されている場合)を使用してユーザー入力を取得し、出力を生成します。シェルがTTYに接続されているという事実は、getty
によって決定されます(そしてlogin
によって保持されます)。ほとんどの場合、シェルはTTYに接続されているかどうかを気にしません。カーネルとの相互作用が発生しますviaシステムコール。
X11サーバーは(シェルのように)ログインを認識しません。 X11のログインプロセスは、次の2つの方法で機能します。
startx
を使用)。X11サーバーが入力を取得し、出力を生成する方法は、シェルとは大きく異なります。入力側では、Xはマウスから始めて、シェルが認識しないデバイスを認識しています。通常は、独自のドライバーで直接管理します。キーボードでも、Xにはカーネルの処理を補完する独自のドライバーがあります(私が理解しているように、たとえばLinuxでは、XはTTYドライバーを使用してキーボードから生の入力を読み取りますが、独自のドライバーを使用してそれを解釈します)。出力側では、Xはディスプレイデバイスを直接、カーネルの助けの有無にかかわらず、TTYデバイスを経由せずに表示します。
多くのシステム上のX11サーバーdoただし、TTYデバイスを使用してカーネルと同期します。仮想端末をサポートするシステムでは、Xは実行されているVTを「予約」し、VTスイッチングを処理する必要があります。途中で他にいくつかの微妙な点があります。したがって、Linuxでは、XはTTYを微調整してGPM(テキストモードでのマウスの使用を許可するプログラム)を無効にします。 XはVTを共有することもできます...
以前の一部のワークステーションでは、カーネルとの明示的な同期はあまりありませんでした。 xconsole
を実行しなかった場合、X11ディスプレイの上部に「テキストモード」でカーネルメッセージが表示される可能性があります。
カーネルには、ログインの概念やログインしているユーザーの概念はまったくありません。重要なのは、特定のユーザーIDで実行されているプロセスがあることです(これはカーネルのビジネスではありません)。端末またはX11ディスプレイマネージャーのgettyであるログインプログラムは、rootとして実行され、setuid()および関連する呼び出しを使用して、ローカルリゾルバー(NSSおよびlibcのもの-カーネルビジネスでもない)が提案するUIDの環境をセットアップします。認証されたばかりのユーザーに使用します。