Display

XOpenDisplayX サーバーと接続する
XCloseDisplayX サーバーとの接続を閉じる
XSetCloseDownMode接続終了時にリソースを残すかを指定
XKillClientクライアントを強制終了
XNoOpNoOperation を送信
XFree汎用のデータ解放
情報取得
XListDepths指定スクリーンで使用できる深さのリストを返す
XListPixmapFormatsZPixmap のフォーマットリストを返す
XExtendedMaxRequestSize拡張長プロトコルエンコーディングのリクエストサイズを返す
XMaxRequestSize拡張長プロトコルエンコーディングを使用しない場合のリクエストサイズを返す
同期
XSetAfterFunctionafter 関数をセット
XSynchronize同期をON/OFF
エラー
XSetErrorHandlerエラーハンドラをセット
XSetIOErrorHandler致命的な I/O エラーハンドラをセット
XGetErrorTextエラーコードから文字列を取得
XGetErrorDatabaseTextエラーメッセージデータベースから文字列を取得
XDisplayNameディスプレイの名前を取得
スレッド
XInitThreadsスレッド初期化
XLockDisplayスレッドのロック
XUnlockDisplayスレッドをアンロック
内部接続
XAddConnectionWatch内部接続を開いた/閉じた時に呼び出されるハンドラを登録
XRemoveConnectionWatch登録されたハンドラを削除
XProcessInternalConnection内部接続で利用可能な入力を処理
XInternalConnectionNumbersすべての内部接続のファイルディスクリプタのリストを返す
スクリーンセーバー
XSetScreenSaverスクリーンセーバーの設定
XForceScreenSaver強制的にアクティブ/非アクティブ化
XActivateScreenSaverスクリーンセーバーをアクティブ化
XResetScreenSaverスクリーンセーバーをリセット
XGetScreenSaver現在の設定を取得
グラブ
XGrabServerサーバーをグラブ
XUngrabServerサーバーをアングラブ
Display *XOpenDisplay(char *display_name);
X サーバーと接続し、X サーバーに関するすべての情報を含む Display 構造体を返します。
TCP または DECnet 通信プロトコル、あるいはローカルのプロセス間通信プロトコルを通じて、アプリケーションを X サーバーに接続します。

呼び出しが成功すると、クライアントは、ディスプレイ内のすべてのスクリーンを使用できるようになります。
display_name 引数で指定されたスクリーン番号は、DefaultScreen マクロまたは XDefaultScreen 関数で取得できます。
display_name
使用するディスプレイおよび通信ドメインを決定する、ハードウェアディスプレイ名。
POSIX 準拠のシステムでは、NULL の場合、DISPLAY 環境変数の値が使用される。

文字列のエンコードと解釈は実装に依存する。
ホストポータブル文字エンコーディングの文字列がサポートされているが、他の文字のサポートは実装に依存する。

POSIX 準拠システムでは、ディスプレイ名または DISPLAY 環境変数は、次の形式の文字列にすることができる。
"protocol/hostname:number.screen_number"
(通常は ":0")

protocolプロトコルファミリまたはプロトコルファミリのエイリアス。
サポートされるプロトコルファミリは、実装に依存します。
プロトコルを指定しない場合は、プロトコルとホスト名を区切る "/" も指定しないでください。
hostnameディスプレイが物理的に接続されているホストマシンの名前。
ホスト名の後には、単一コロン (:) または二重コロン (::) を続けます。
numberホストマシン上のディスプレイサーバーの番号。
必要に応じて、この番号の後にピリオド (.) を付けることができます。
1 つの CPU に複数のディスプレイを搭載でき、通常、0 から始まる番号が付けられます。
screen_numberそのサーバーで使用するスクリーンを指定。
1つの X サーバーで、複数のスクリーンを制御できます。

protocol が「tcp」「inet」「inet6」または指定されておらず、hostname がホストマシン名で、単一のコロン (:) でホスト名とディスプレイ番号が区切られている場合、TCP を使用して接続します。
(「inet」の場合は、TCP over IPv4。「inet6」の場合は、TCP over IPv6 が使用されます。それ以外の場合は、実装によって、どの IP バージョンが使用されるかが決定されます)

protocol も hostname も指定されていない場合、ローカル通信となる。

hostname がホストマシン名であり、ホスト名とディスプレイ番号が二重コロン (::) で区切られている場合、DECnet を使用して接続します。

単一の X サーバーは、これらのトランスポートメカニズムの一部またはすべてを同時にサポートできます。
特定の Xlib 実装では、これらのトランスポートメカニズムを、さらに多くサポートできます。
戻り値
Display 構造体へのポインタを返す。失敗時は NULL。
XCloseDisplay(Display *display);
指定ディスプレイの X サーバーへの接続を閉じ、このディスプレイ上に作成した、すべてのウィンドウ、リソース ID (Window, Font, Pixmap, Colormap, Cursor, GContext)、および他のリソースを破棄する。
(XSetCloseDownMode でリソースを残すことを選択していない場合)

XCloseDisplay が最後の XSync 操作を実行するときに、保留中のエラーが報告されるようにするため、XCloseDisplay を明示的に呼び出す必要があります。

■ 終了時の処理

接続を閉じる時、以下の処理を自動で行う。

  • クライアントが所有するすべてのセレクションの所有権を解放 (XSetSelectionOwner 参照)。
  • クライアントがポインタまたはキーボードをグラブしている場合、XUngrabPointer および XUngrabKeyboard を実行します。
  • クライアントがサーバーをグラブしている場合は、XUngrabServer を実行します。
  • クライアントによって行われたすべてのパッシブグラブを解放します。
XSetCloseDownMode(Display *display, int close_mode);
XCloseDisplay で接続を閉じた時に、クライアントのリソースを破棄するか残すかを指定します。
接続開始時は、DestroyAll モードで開始されます。
close_mode
DestroyAllクライアントが作成した全てのウィンドウを破棄し、クライアントによって作成された各リソースを解放する。
RetainPermanentリソースを保持する。
XKillClient でリソースIDを指定した場合、リソースは破棄される。
XKillClient で AllTemporary を指定した場合は、破棄されない。
RetainTemporaryリソースを保持する。
XKillClient でリソースIDを指定した場合、リソースは破棄される。
XKillClient で AllTemporary を指定した場合は、RetainTemporary が指定された、すべてのクライアントのリソースが破棄される。
XKillClient(Display *display, XID resource);
指定したリソースを作成したクライアントを、強制的に終了させる。

XSetCloseDownMode で RetainPermanent or RetainTemporary に設定した場合、クライアントがクラッシュしても、ウィンドウは破棄されないため、デバッグ目的などでウィンドウを残すことができる。
resource
クライアントが作成したリソースIDを指定。
AllTemporary (0) の場合、RetainTemporary に設定されて終了した、すべてのクライアントのリソースが破棄されます。
それ以外では、そのクライアントが、RetainPermanent または RetainTemporary に設定され、すでに終了している場合、リソースはすべて破棄されます。
XNoOp(Display *display);
NoOperation プロトコル要求を X サーバーに送信し、それによって接続を実行します。
何も起こりません。
XFree(void *data);
指定されたデータを解放する、汎用 Xlib ルーチンです。
オブジェクトに対して、特定の解放関数が明示的に指定されていない限り、Xlib によって割り当てられたオブジェクトを解放するには、これを使用する必要があります。
※この関数に NULL ポインタを渡すことはできません。
情報取得
int *XListDepths(Display *display, int screen_number, int *count_return);
指定されたスクリーンで利用可能な深さの配列を返す。
count_return
リストの数が入る
戻り値
メモリ確保された、深さの配列。XFree() で解放する。失敗時は NULL。
XPixmapFormatValues *XListPixmapFormats(Display *display, int *count_return);

typedef struct {
  int depth;
  int bits_per_pixel;
  int scanline_pad;
} XPixmapFormatValues;
指定されたディスプレイでサポートされる、ZPixmap 形式のイメージのフォーマットが定義された XPixmapFormatValues 構造体の配列を返す。
count_return
配列の数が入る
戻り値
メモリ確保された配列のポインタ。XFree() で解放する。NULL でメモリが足りない。
long XExtendedMaxRequestSize(Display *display);
指定されたディスプレイが、拡張長プロトコルエンコーディングをサポートしていない場合、0 を返す。
それ以外の場合は、サーバーがサポートする最大リクエストサイズ (4 バイト単位) を返します。

XDrawLines、XDrawArcs、XFillPolygon、XChangeProperty、XSetClipRectangles、XSetRegion は、サーバーでサポートされている場合、必要に応じて拡張長エンコーディングを使用します。
他の Xlib 関数 (XDrawPoints、XDrawRectangles、XDrawSegments、XFillArcs、XFillRectangles、XPutImage など) での拡張長エンコーディングの使用は許可されていますが、必須ではありません。
Xlib 実装では、代わりに複数の小さなリクエストにデータを分割することを選択する場合があります。
long XMaxRequestSize(Display *display);
拡張長プロトコルエンコーディングを使用しない場合の、サーバーがサポートする最大要求サイズ (4 バイト単位) を返します。

拡張長プロトコルエンコーディングがサーバーでサポートされていない限り、サーバーへの単一プロトコルリクエストは、このサイズを超えることはできません。
サイズは、4096 (16384 byte) 以上であることが保証されている。

Xlib は、XDrawPoints、XDrawRectangles、XDrawSegments、XFillArcs、XFillRectangles、XPutImage の関数において、必要に応じて、データを複数のプロトコルリクエストに自動的に分割します。
同期
int (*XSetAfterFunction(Display *display, int (*procedure)(Display *)))(Display *);
X アプリケーションをデバッグする場合、エラーが発生したときに報告されるように、Xlib が同期的に動作するように要求すると非常に便利なことがよくあります。
同期が有効になっている場合、グラフィックスの実行が 30 倍以上遅くなる可能性があることに注意してください。
POSIX 準拠のシステムでは、グローバル変数 _Xdebug もあり、デバッガでプログラムを開始する前にゼロ以外に設定すると、ライブラリの同期動作が強制されます。

作業が完了すると、プロトコルリクエストを生成するすべての Xlib 関数は、after 関数を呼び出します。
戻り値
以前の after 関数を返す
int (*XSynchronize(Display *display, Bool onoff))(Display *);
同期をON/OFF
戻り値
以前の関数を返す
エラー
XErrorHandler XSetErrorHandler(XErrorHandler handler);

typedef int (*XErrorHandler)(Display *display, XErrorEvent *error_event);

typedef struct {
 int type;
 Display *display;
 unsigned long serial;
 unsigned char error_code;
 unsigned char request_code;
 unsigned char minor_code;
 XID resourceid;
} XErrorEvent;
エラーハンドラをセット。

Xlib は通常、エラーを受信するたびに、プログラムが提供するエラーハンドラを呼び出します。
※OpenFont、LookupColor、AllocNamedColor プロトコル要求からの BadName エラー、QueryFont プロトコル要求からの BadFont エラーにおいては、呼び出されません。

致命的ではないエラーでは、エラーハンドラ関数から戻ってくることができ、この場合戻り値は無視されます。
※エラーハンドラは、プロトコルリクエストを生成したり、入力イベントを検索したりするディスプレイ上の関数を (直接的または間接的に) 呼び出してはなりません。

Xlib には 2 つのデフォルトのエラーハンドラがあります。
1 つは致命的な状態 (クラッシュによって、ディスプレイサーバーへの接続を切断するなど) を処理するもので、もう 1 つは、X サーバーからのプロトコルエラーを処理するものです。

独自のエラー処理を希望する場合は、これらのエラーハンドラをユーザー指定のルーチンに変更でき、必要に応じて何度でも変更できます。
handler
NULL でデフォルトのハンドラ (メッセージを表示して強制終了する)
error_event
エラーの情報が入っている。

serialX サーバーと接続した後、ネットワーク接続を介して送信されたリクエストの数 (1〜)。
失敗した呼び出しが行われる直前の NextRequest(display) の値。
error_codeエラーコード。
BadAccess, BadAlloc, BadAtom, BadColor, BadCursor, BadDrawable, BadFont, BadGC,
BadIDChoice, BadImplementation, BadLength, BadMatch, BadName, BadPixmap, BadRequest,
BadValue, BadWindow
request_code<X11/Xproto.h> で定義されている、失敗したプロトコルリクエスト番号
minor_code拡張機能時のマイナー番号
戻り値
以前のハンドラが返る
XIOErrorHandler XSetIOErrorHandler(XIOErrorHandler handler);

typedef int (*XIOErrorHandler)(Display *display);
致命的な I/O エラーハンドラを設定します。
何らかのシステムコールエラーが発生した場合 (サーバーへの接続が失われた場合など)、Xlib はプログラムが提供するエラーハンドラを呼び出します。
これは致命的な状態であるとみなされ、呼び出されたルーチンから戻るべきではありません。
I/O エラーハンドラが戻ると、クライアントプロセスは終了します。
戻り値
以前のハンドラが返る
XGetErrorText(Display *display, int code, char *buffer_return, int length);
指定されたエラーコードを説明する、NULL で終わる文字列を、指定されたバッファにコピーします。
返されるテキストは、現在のロケールのエンコーディングです。
拡張機能では、独自のエラーコードとエラー文字列が定義されている場合があるため、この関数を使用してエラーの説明を取得することをお勧めします。
code
エラーコード
buffer_return
文字列が入るバッファ
length
バッファのサイズ
XGetErrorDatabaseText(Display *display, char *name, char *message, char *default_string, char *buffer_return, int length);
エラーメッセージデータベースから、null で終了するメッセージ (またはデフォルトのメッセージ) を返します。
name
事前定義された名前。大文字小文字は区別される。

XProtoErrormessage = プロトコルエラー番号
XlibMessageこれらは、ライブラリによって内部的に使用されるメッセージ文字列です。
XRequestコア プロトコル リクエスト: message = メジャー リクエスト プロトコル番号。
拡張要求: message = 「拡張名 (InitExtension によって指定される)」 + 「ピリオド (.)」 + 「マイナー要求プロトコル番号」
エラーデータベースに文字列が見つからない場合は、default_string が使われる。
message
必要なエラーメッセージの種類。
名前とメッセージがホストのポータブル文字エンコーディングにない場合、結果は実装に依存します。
default_string
データベースに見つからなかった場合の、デフォルトのエラーメッセージ。
現在のロケールのエンコーディングであると想定。
buffer_return
文字列が入るバッファ。
現在のロケールのエンコーディングであると想定。
length
バッファのサイズ
char *XDisplayName(char *string);
XOpenDisplay が使用しようとする、ディスプレイの名前を返します。

NULL が指定された場合、DISPLAY 環境変数から、XOpenDisplay が使用しようとするディスプレイ名を返します。
これにより、最初の接続が失敗したときに、プログラムがどのディスプレイを開こうとしたのかを、ユーザーに正確に報告することが容易になります。
スレッド
Status XInitThreads(void);
Xlib の並行スレッドサポートを初期化します。
この関数は、マルチスレッドプログラムが最初に呼び出す Xlib 関数でなければならず、他の Xlib 呼び出しが行われる前に完了する必要があります。

この関数は、初期化に成功した場合は 0 以外のステータスを返し、そうでない場合は 0 を返します。
スレッドをサポートしないシステムでは、この関数は常にゼロを返します。

この関数を呼び出す必要があるのは、複数のスレッドが同時に Xlib を使用する可能性がある場合だけである。
Xlib 関数へのすべての呼び出しが、他のアクセス機構(例えば、ツールキットの相互排除ロックや明示的なクライアントプログラミング)によって保護されている場合、Xlib スレッド初期化は必要ありません。
シングルスレッド・プログラムでは、この関数を呼び出さないことが推奨されます。
XLockDisplay(Display *display);
指定されたディスプレイを、他のすべてのスレッドが使用できないようにロックします。
ディスプレイを使用しようとする他のスレッドは、このスレッドによってディスプレイのロックが解除されるまでブロックされます。
XLockDisplay のネスト呼び出しは正しく機能しますが、XLockDisplay と同じ回数 XUnlockDisplay が呼び出されるまで、ディスプレイは実際にはロック解除されません。
この関数は、XInitThreads を使用してスレッドが初期化されていないと、効果がない。
XUnlockDisplay(Display *display);
他のスレッドが指定されたディスプレイを再び使用できるようにします。
ディスプレイ上でブロックされたスレッドは、続行が許可されます。ネストのロックは正しく動作します。
スレッドによって XLockDisplay が複数回呼び出された場合、ディスプレイが実際にロック解除される前に XUnlockDisplayを 同じ回数呼び出す必要があります。
この関数は、XInitThreads を使用してスレッド用に Xlib が正常に初期化されない限り、何の効果もありません。
内部接続
Status XAddConnectionWatch(Display *display, XConnectionWatchProc procedure, XPointer client_data);

typedef void (*XConnectionWatchProc)(Display *display, XPointer client_data, int fd, Bool opening, XPointer *watch_data);
Xlib が指定されたディスプレイの内部接続 (ファイルディスクリプタ) をオープンまたはクローズするたびに呼び出される関数を登録する。

この関数は、ディスプレイがオープンされた後、いつでも呼び出すことができる。
内部接続がすでに存在する場合、この関数が戻る前に、登録された関数がそれぞれの接続に対して、直ちに呼び出されます。

登録された関数は、Xlib 関数を呼び出してはならない。
関数が直接または間接的に、内部接続や watch 関数の状態を変更させる場合、その結果は定義されない。
Xlib がスレッド用に初期化されている場合、関数はディスプレイをロックした状態で呼び出され、実行スレッドが XLockDisplay を使用して外部からディスプレイをロックしていない限り、ディスプレイをロックする任意の Xlib 関数への関数による呼び出しの結果は、定義されない。
procedure
ハンドラ関数。
fd は接続のファイルディスクリプタ。
opening が True の時、watch_data が指す場所に、プライベートデータのポインタを格納することができる。
opening が False の時、watch_data からプライベートデータへのポインタを取得できる。
client_data
ハンドラ関数に渡す値
戻り値
正常に登録された場合、0 以外のステータスを返し、そうでない場合 0 を返す
Status XRemoveConnectionWatch(Display *display, XConnectionWatchProc procedure, XPointer client_data);
以前に登録された接続 watch 関数を削除します。
client_data は、プロシージャが最初に登録されたときに使用された client_data と一致する必要があります。
void XProcessInternalConnection(Display *display, int fd);
内部接続で利用可能な入力を処理します。
この関数は、オペレーティングシステム機能 (select または poll など) で、入力が使用可能であることを示した後でのみ、内部接続に対して呼び出す必要があります。
それ以外の場合、効果は定義されません。
Status XInternalConnectionNumbers(Display *display, int **fd, int *count_return);
指定されたディスプレイに対して、現在開いているすべての内部接続のファイルディスクリプタのリストを返します。
割り当てられたリストが不要になった場合は、XFree を使用して解放します。
この関数は、リストが正常に割り当てられた場合、ゼロ以外のステータスを返します。それ以外の場合はゼロを返します。
スクリーンセーバー
XSetScreenSaver(Display *display, int timeout, int interval, int prefer_blanking, int allow_exposures);
スクリーンセーバーの設定を行う。
スクリーンセーバーが有効になった後、指定されたタイムアウト秒数の間、デバイス (キーボード、マウスなど) からの入力が生成されなかった場合、スクリーンセーバーがアクティブになります。

各画面で、ブランキングが優先され、ハードウェアがビデオ ブランキングをサポートしている場合、画面は単に空白になります。
それ以外の場合、exposures が許可されているか、Expose イベントをクライアントに送信せずに画面を再生成できる場合、画面は間隔秒ごとにランダムに再生成されるルートウィンドウの背景タイルでタイル表示されます。
それ以外の場合、画面の状態は変化せず、スクリーンセーバーはアクティブになりません。
スクリーンセーバーは非アクティブになり、次のキーボードまたはポインター入力時、または ScreenSaverReset モードでの XForceScreenSaver の次回呼び出し時に、すべての画面状態が復元されます。

サーバー依存のスクリーン セーバー メソッドが定期的な変更をサポートしている場合、interval 引数は変更期間の長さに関するヒントとして機能し、ゼロの場合は定期的な変更を行う必要がないことを示します。
画面を変更する方法の例には、カラーマップを定期的にスクランブルする、画面上でアイコン イメージを定期的に移動する、定期的にランダムに再生成されるルートウィンドウの背景タイルで画面を並べるなどがあります。
timeout
スクリーンセーバーがオンになるまでのタイムアウトを秒単位で指定します。0 より大きい値で有効になる。
0 の場合は、無効になる (アクティブ化されたスクリーンセーバーは非アクティブにならない)。
-1 の場合は、デフォルトに戻る。
それ以外の負の値は BadValue エラー。
interval
スクリーンセーバーを変更する間隔を秒単位で指定します。
0 でランダムパターンのモーションが無効。
prefer_blanking
画面のブランキングを有効にする方法を指定します。
DontPreferBlanking: ブランキングを優先しない
PreferBlanking: ブランキングを優先
DefaultBlanking: デフォルト
allow_exposures
スクリーンセーブ制御値を指定します。
DontAllowExposures: 許可しない
AllowExposures: 許可するDefaultExposures: デフォルト
XForceScreenSaver(Display *display, int mode);
スクリーンセーバーを、強制的にアクティブ/非アクティブ化する。
mode
モード。
ScreenSaverActive で、スクリーンセーバーが現在非アクティブになっている場合、スクリーンセーバーがタイムアウト 0 で無効になっていたとしても、XForceScreenSaver はスクリーンセーバーをアクティブにします。

XForceScreenSaver は、スクリーンセーバーがアクティブ化されている場合は非アクティブ化し、アクティブ化タイマーは初期状態 (デバイス入力が受信されたかのように) にリセットされます。
XActivateScreenSaver(Display *display);
スクリーンセーバーをアクティブ化
XResetScreenSaver(Display *display);
スクリーンセーバーをリセット
XGetScreenSaver(Display *display, int *timeout_return,
    int *interval_return, int *prefer_blanking_return, int *allow_exposures_return);
現在の設定を取得
グラブ
XGrabServer(Display *display);
リクエストの処理を無効にし、このリクエストが届いたディスプレイ以外のすべての接続を閉じます。
必要以上に X サーバーをグラブしないでください。

サーバーをグラブすると、ウィンドウ システム サーバーによる、他のディスプレイでの出力の処理を制御できます。
サーバーがグラブされている間は、リクエストの処理や他の接続の終了は発生しません。
クライアントが接続を閉じると、自動的にサーバーが切断されます。
サーバーをグラブすることはあまり推奨されませんが、必要な場合もあります。
XUngrabServer(Display *display);
サーバーをアングラブ