web-dev-qa-db-ja.com

Xorgはどのように機能しますか?

Xorgがどのように機能するかを理解しようとしています。

理解を示すために次の画像を作成しました(この画像は、Ctrl + Alt + F7を押した後のコンポーネントの状態を示しています)。

enter image description here

画像の説明は次のとおりです。

  • /dev/tty7はXorgの制御端末です。
  • XorgはVGAドライバーと直接通信して画面に描画します(描画したいものをTTYドライバーに送信しません)。
  • Xorgは、キーボードおよびマウスドライバーからの入力を直接受け取ります(TTYドライバーからのキーボードおよびマウスの入力は受け取りません)。
  • 仮想端末は、キーボードドライバーからの入力も受け取ります(ただし、私のテストによると、キーのスキャンコードを受け取ります)。
  • Xクライアント(画像のxtermとFirefox)には制御端末がありません。

私の理解は正しいですか?

4
user7681202

あなたの説明はあなたの図と完全には一致せず、あなたの図よりも正確です。

Xサーバーは、入力または出力のいずれにもttyドライバーを使用しません。さまざまな入力デバイスのドライバーから直接入力を読み取り、グラフィックカードドライバーに直接出力を送信します。

入力デバイスをxinputで一覧表示してから、_xinput list-props_で詳細情報を取得できます。例えば:

_$ xinput | tail -n 1
    ↳   USB Keyboard                            id=10   [slave  keyboard (3)]
$ xinput list-props 10 | tail -n 1
        Device Node (263):      "/dev/input/event2"
_

_/dev/input/event2_から読み取ると、XサーバーがUSBキーボードから入力を取得していることがわかります。

出力については、同様のユーザーレベルのツールがあるかどうかはわかりません。 _xrandr --listproviders_は、使用中または使用可能なグラフィックスドライバーを一覧表示しますが、_/dev_エントリは一覧表示しません。 Xサーバーが開いているグラフィックデバイスをlsof -p$(pgrep Xorg)または_less /var/log/Xorg.0.log_で確認できます。

端末の制御の概念は、テキストモードセッション用に設計されました。 Xサーバーには、起動方法に応じて制御端末がある場合とない場合があります。 GUIメニューから開始されたXプログラムには、ウィンドウマネージャーに制御端末がないため、通常は制御端末がありません。端末で実行されているシェルから開始されたXプログラムには、その端末が制御端末としてあります。