Linux では、X サーバーはどのようにして特定の tty (tty7 など) との関係を確立し、その tty がフォアグラウンドにある場合にのみ X サーバーが入力を受信して画面に描画できるようにするのでしょうか。これはどのように強制されるのでしょうか。
(以前、この質問を Stack Overflow に下記の形式で投稿しましたが、閉じられました。)
「X サーバーは /dev/tty7 で実行されます」とある場合、それが何を意味するかについていくつか質問があります。どのように動作するかについていくつか推測しましたが、次の記述が正しいか間違っているかを誰かが教えてくれることを願っています。
- /dev/tty7 は通常、Xorg の制御端末です。
- tty7 は Xorg の制御端末ですが、Xorg を意味のある方法で「制御」するわけではありません。
- Xorg は、/dev/tty7 から読み取るのではなく、/dev/input/... などをポーリングして直接キーボードとマウスの入力を受け取ります。ただし、/dev/tty7 はキーストロークも受け取ります。これは、たとえば、ターミナル エミュレータで「xxd -p /dev/tty7」を実行すると確認できます。
- Xorg は、/dev/tty7 に書き込むのではなく、ドライバーが作成するデバイス ファイルやメモリの I/O マップ領域などのハードウェア固有のインターフェイスを使用して画面に描画します。
- Xorg がビデオ モードを設定すると、tty ドライバーは自動的に画面への描画を停止します。そのため、キーを押したり、/dev/tty7 に文字列をエコーしたりしても、画面に表示されません。
- Xorg は、tty7 がバックグラウンドにある場合でも /dev/events 経由でキーボードとマウスの入力を受け取りますが、tty7 がフォアグラウンドでない限りはそれを無視します。
- Xorg が画面に描画するものは、tty7 がフォアグラウンドにある場合にのみモニターに表示されます。
- Xorg がビデオを初期化するとき (ビデオ モードの設定など)、tty7 がフォアグラウンドにあるため、設定は tty7 でのみ有効になり、他の端末では有効になりません。