`$ DISPLAY`はXサーバーのリスニングソケットとレンダリングターゲットの両方を指定しますか?

`$ DISPLAY`はXサーバーのリスニングソケットとレンダリングターゲットの両方を指定しますか?

~から「$DISPLAY」を指定できますか?

混同しないでください実際のモニター(あなたのモニター)、X11サーバー(「モニター」)そしてアクセス方法ソケットまたは他の手段:DISPLAY=:0 および DISPLAY=localhost:10 ssh 経由で渡されると、同じモニター/xserver、同じグラフィックカード、および同じモニターを参照します。

$DISPLAYXサーバーの起動を提供します。$DISPLAYXサーバーのリスニングソケットとレンダリングターゲットの両方を指定しますか?それでは、2つの異なるタイプの項目をどのように指定しますか?

  • $DISPLAYソケットを指定します。たとえば、$DISPLAYis の場合、:40ポート 6040 または 40 の名前を付けた Unix ドメインソケットに対応します。

    $DISPLAYリッスンするXサーバーを指定するソケットですか?

  • $DISPLAYレンダリング先(たとえば、Xサーバーが何かをレンダリングするディスプレイデバイスまたはエミュレータ)も指定する必要がありますか?

これが正しいか

X client <->  X server <-> rendering target

Xクライアントはレンダーターゲットと直接通信できませんが、Xサーバーを介して間接的に通信できますか?

ありがとうございます。

ベストアンサー1

ディスプレイにAXサーバーが起動するそうです。

いいえ。 X サーバーは X クライアントの通信エンドポイントを提供します。 Xクライアントは、コマンドラインオプションまたは環境変数を介して通信するサーバーを選択します。クライアントの観点から見ると、これがまさに「display」を使用するので、オプションは一般的であり-display、環境変数はであり$DISPLAY、関連するライブラリ関数の名前には「display」があります。

通信は、ネットワーク(現在は安全ではなく、ほとんど無効になっている)を介してまたはローカルで行うことができます。両方のエンドポイントを提供するために使用されるunix構成を「ソケット」と呼びます(参照:man 2 socket)。 「display」値は、(1)ホスト、(2)よく知られているポート番号、またはUNIXドメインパス(ローカル通信用)にマップされたディスプレイ番号、(3)画面番号(現在はほとんどデフォルトで0あり、ほとんどの場合)をエンコードします。 Xサーバーは複数の画面を提供しません)形式でhostname_or_address:display_number.screen_number

多くのクライアントが単一のサーバーが提供する同じ「ソケット」に接続できるため

X サーバが表示する「ソケット」(最初の文)と X サーバが生成し、X クライアントに接続する「ソケット」(2 番目の文) が同じ「ソケット」かどうかを指定します。

無意味。

編集する

これが正しいか

X client <->  X server <-> rendering target

Xクライアントはレンダーターゲットと直接通信できませんが、Xサーバーを介して間接的に通信できますか?

「レンダリング先」「モニターにグラフィックで表示できるハードウェアの一部」を意味すると仮定すると、基本的に正しいです。

ただし、Xサーバーは「レンダリング先」と何らかの方法で通信しません。フレームバッファはモニタに表示され、すべてのモニタはさまざまなドライバとカーネルレイヤを介して抽象化されます。

また、元のXプロトコルの場合も同様でした。 OpenGL拡張の出現により、XクライアントはXプロトコルの拡張を使用してXサーバーをバイパスし、「レンダリングターゲット」(GPUのカーネルドライバ)に直接アクセスできます。今日、ほとんどのアプリケーションはOpenGLを使用してグラフィックを高速化します。これは、Xクライアントがネットワーク経由で別のコンピュータのXサーバーに接続すると、ハードウェアアクセラレーションが失われる理由です。

おすすめ記事