X Window System コアプロトコル
以下は、黒い四角形が描画されたウィンドウを生成し、キー押下で終了するクライアントとサーバ間のやり取りを例示したものである。この例では、クライアントの要求が応答を必要とするものではないため、サーバ側から応答パケットは送信されない。ただし、エラーパケットが生成される可能性はある。
クライアントがサーバとのコネクションを開き、使用するバイトオーダー(エンディアン)を指定した初期パケットを送信する。
サーバがコネクションを受理し(この例では認証は省略されている)、適切なパケットで応答する。このパケットにはルートウィンドウの識別子(例えば 0x0000002b)とこのクライアントが使える識別子の範囲などの情報が格納されている。
クライアントが識別子 0x00200000 でデフォルトのグラフィックコンテキスト生成を要求する(この要求パケットでは、この例に出てくる他の要求パケットと同じように、応答パケットは返信されない)。
クライアントがトップレベルウィンドウ(すなわち、親ウィンドウとしてルートウィンドウ 0x0000002b を指定)の生成を要求する。このとき、識別子 0x00200001、サイズ 200×200、位置 (10,10) などを指定。
イベントとは、サーバからクライアントに送信されるパケットであり、クライアントが興味を持ちそうな事象が発生したことを通知するのに使われる。例えば、ユーザがキーを押下したり、マウスのボタンをクリックしたなどの事象である。イベントはユーザの入力だけではない。例えば、新たなサブウィンドウが生成された場合などにもイベントパケットが送信される。
イベントは常にいずれかのウィンドウに関連付けられている。例えば、マウスカーソルがあるウィンドウ上にあるときにクリックした場合、そのイベントはそのウィンドウと関連付けられる。イベントパケットにはそのウィンドウの識別子も含まれる。
クライアントはサーバに対してイベントパケットを他のクライアントに送るよう要求できる。これはクライアント間の通信に利用される。例えばマウスクリックで選択されたテキストをクライアントが要求する場合に、そのようなイベントが使われる。そのイベントは、その選択を保持しているウィンドウを制御しているクライアントに送られる。
Expose イベントは、ウィンドウの一部の内容が破壊された領域が画面上見えるようになったとき送信される。ウィンドウの内容はいくつかの条件が重なると破壊される。例えば、ウィンドウが別のウィンドウに隠され、サーバがバッキングストアを保持していなかった場合などである。サーバが Expose をクライアントに送信すると、クライアントはその部分を再描画しなければならない。
プロトコルレベルでは、色は32ビットの符号なし整数で表され、ピクセル値(pixelvalue)と呼ばれる。以下のような要素から色の表現が影響を受ける。
色深度
カラーマップ(colormap)- 色を赤、緑、青 (RGB) の強さで表したテーブル
visual type - 上記テーブルを使ってどう色を表現するかを指定したもの
最も容易な場合、カラーマップは各行にRGBの値が格納されたテーブルとなる。ピクセル値 x は、そのテーブルのx-行目の色を意味する。クライアントがカラーマップの内容を変更できる場合、この表現方法は PseudoColor visual class である。StaticColor visual class では、クライアントがカラーマップの内容を変更できない。
visual class は全部で6種類存在する。それぞれ、RGB値とピクセル値の対応付け方法が異なる。そのうち、2つが上述の PseudoColor と StaticColor である。他に GrayScale と StaticGray があり、これらは白、黒、灰色のみが表示可能である(前者ではクライアントによるカラーマップ変更が可能)。
残る2種類の visual class はこれらとは異なり、ピクセル値がそのままRGB値に対応している。この場合のピクセル値からRGB値への変換は次の通り。
ピクセル値をビット列としてみる。
このビット列を3つの部分に分割する。
それら3つの部分がそれぞれ整数として認識され、それぞれ異なる3つのテーブルのインデックス値として使われる。