web-dev-qa-db-ja.com

X11はカーネルとどのように相互作用し、ログインを実行しますか

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

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

14
allsey87

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

X11サーバーは(シェルのように)ログインを認識しません。 X11のログインプロセスは、次の2つの方法で機能します。

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

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

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

以前の一部のワークステーションでは、カーネルとの明示的な同期はあまりありませんでした。 xconsoleを実行しなかった場合、X11ディスプレイの上部に「テキストモード」でカーネルメッセージが表示される可能性があります。

16
Stephen Kitt

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

2
rackandboneman