X11はカーネルとどのように対話し、ログインを実行するのか

X11はカーネルとどのように対話し、ログインを実行するのか

私の理解では、Linux カーネルとのテキストベースの対話では、 と呼ばれるプログラムがinit起動しgetty(またはagetty)、 の下にある TTY デバイスの 1 つに接続して/devユーザー名の入力を求めます。その後、 と呼ばれるプログラムloginが実行され、ユーザーのパスワードの入力を求め、正しい場合は、ユーザーの優先シェル (または など) を起動しますbashcshこの時点で、bash は TTY デバイスを介してカーネルと対話します。

このログイン プロセスは X11 ではどのように機能しますか? X11 は TTY を介してカーネルと対話しますか?

答え1

シェルは、TTYデバイス(接続されている場合)を使用して、ユーザー入力を取得して出力を生成しますが、それ以外はあまり使用しません。シェルがTTYに接続されているかどうかは、によって決定されgetty(によって保持されますlogin)、ほとんどの場合、シェルはTTYに接続されているかどうかを気にしません。カーネルとのやり取りは、経由システムコール。

X11 サーバーはログインを認識しません (シェルと同様)。X11 のログイン プロセスは 2 つの方法で動作します。

  • ユーザーは端末にログインし、X を起動します (通常は を使用startx)。
  • または、X サーバーが「ディスプレイ マネージャー」で起動され、ユーザーにログインとパスワード (または必要な認証情報) の入力を求めます。

X11 サーバーが入力を取得して出力を生成する方法は、シェルとはまったく異なります。入力側では、X はマウスをはじめ、シェルが認識していないデバイスを認識します。通常、X は独自のドライバーを使用して直接管理します。キーボードの場合でも、X にはカーネルの処理を補完する独自のドライバーがあります (私の理解では、たとえば Linux では、X は TTY ドライバーを使用してキーボードからの生の入力を読み取りますが、その後、独自のドライバーを使用してそれを解釈します)。出力側では、X はカーネルの助けを借りて、または借りずに、TTY デバイスを経由せずにディスプレイ デバイスを直接操作します。

多くのシステム上のX11サーバーするただし、カーネルと同期するために TTY デバイスを使用します。仮想端末をサポートするシステムでは、X は実行中の VT を「予約」し、VT の切り替えを処理する必要があります。その過程では他にも微妙な点がいくつかあります。たとえば、Linux では、X は TTY を調整して GPM (マウスのテキスト モード使用を可能にするプログラム) を無効にします。X は VT を共有することもできます...

過去のワークステーションの中には、カーネルとの明示的な同期があまり行われなかったものもあり、 を実行しないとxconsole、カーネル メッセージが X11 ディスプレイの上に「テキスト モード」で表示されることがありました。

答え2

カーネルには、ログインや誰がログインしているかという概念はまったくありません。カーネルが気にするのは、特定のユーザー ID で実行されているプロセスがあるということだけです (それが誰であるかもカーネルには関係ありません)。ログイン プログラムは、端末上の getty であれ、X11 ディスプレイ マネージャーであれ、ルートとして実行され、setuid() および関連する呼び出しを使用して、認証されたばかりのユーザーに使用するためにローカル リゾルバー (NSS および libc のもの - カーネルには関係ありません) が提案した UID の環境を設定します。

関連情報