
混同しないでください実際のモニター(あなたのモニター)、X11サーバー(「モニター」)そしてアクセス方法ソケットまたは他の手段:DISPLAY=:0 および DISPLAY=localhost:10 ssh 経由で渡されると、同じモニター/xserver、同じグラフィックカード、および同じモニターを参照します。
$DISPLAY
Xサーバーの起動を提供します。$DISPLAY
Xサーバーのリスニングソケットとレンダリングターゲットの両方を指定しますか?それでは、2つの異なるタイプの項目をどのように指定しますか?
$DISPLAY
ソケットを指定します。たとえば、$DISPLAY
is の場合、: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サーバーに接続すると、ハードウェアアクセラレーションが失われる理由です。