コンテンツにスキップ

X Window Programming/UNIX特有のリソース管理

出典: フリー教科書『ウィキブックス(Wikibooks)』

UNIX特有のリソース管理

[編集]

UNIX環境におけるX Window Systemのリソース管理は、ユーザーインターフェースの一貫性を保つために重要な役割を果たします。本章では、Xリソースデータベースの利用方法、ウィンドウマネージャとの連携、そしてウィンドウマネージャに依存しない設計方法について解説します。

Xリソースデータベース

[編集]

Xリソースデータベース(X Resources Database)は、X Window Systemにおいてアプリケーションの外観や動作を制御するための設定ファイルを管理する仕組みです。.Xresources.Xdefaultsファイルを利用することで、ユーザーはアプリケーションの設定を細かくカスタマイズすることができます。

UNIX環境での.Xresources.Xdefaults

[編集]

UNIX環境では、ユーザーのホームディレクトリに.Xresources.Xdefaultsという設定ファイルを作成することで、X Window Systemのリソースを定義できます。これらのファイルは、アプリケーションの外観(フォント、色、ウィンドウの配置など)や動作を一括で管理するために使用されます。

.Xresourcesは、リソース設定をユーザーごとにカスタマイズするためのファイルです。.Xdefaultsは、主にXクライアントアプリケーションがデフォルトのリソースを取得するためのファイルです。これらの設定ファイルに書かれた内容は、Xサーバーが起動する際に読み込まれ、設定が適用されます。

例えば、.Xresourcesに次のように記述することで、特定のアプリケーションのフォントや背景色を設定できます。

XTerm*background: black
XTerm*foreground: white
XTerm*faceName: Monospace
XTerm*faceSize: 12

上記の設定は、XTermアプリケーションの背景色を黒、文字色を白、フォントをモノスペースに変更するものです。

プログラム内でのリソース取得と適用

[編集]

アプリケーションは、Xリソースデータベースから設定を取得して適用することができます。これを行うためには、XGetResourceDatabase()関数を利用してリソースを取得し、その値をプログラム内で使用します。

#include <X11/Xlib.h>
#include <X11/Xresource.h>

int main() {
    Display *display = XOpenDisplay(NULL);
    if (!display) {
        fprintf(stderr, "Xサーバーに接続できません\n");
        return -1;
    }

    XrmDatabase db = XrmGetDatabase(display);
    char *resource_value;
    XrmGetResource(db, "XTerm*background", "String", &resource_value);
    printf("背景色: %s\n", resource_value);

    XCloseDisplay(display);
    return 0;
}

このコードは、.Xresourcesに設定されたXTerm*backgroundのリソースを取得し、その値を表示するものです。

ウィンドウマネージャとの連携

[編集]

X Window Systemでは、ウィンドウマネージャがウィンドウの管理やレイアウトを担当します。ウィンドウマネージャによって、ウィンドウの外観や動作が異なります。ここでは、UNIX伝統のウィンドウマネージャ(twmfvwmなど)との連携方法について説明します。

twmfvwmなどUNIX伝統のウィンドウマネージャ

[編集]

Twm(Tab Window Manager)やfvwm(F Virtual Window Manager)は、UNIXの古典的なウィンドウマネージャの一部であり、X Window Systemで動作するウィンドウの管理を行います。これらのウィンドウマネージャは、リソースファイル(通常は~/.twmrc~/.fvwmなど)を使ってウィンドウの配置や動作を設定します。

Twmの設定ファイル例:

Style * BorderWidth 2
Style * Iconic

上記の設定では、全てのウィンドウの枠線幅を2ピクセルに設定し、ウィンドウを最初からアイコニック(最小化)状態にするものです。

fvwmでは、ウィンドウの動作や外観を細かくカスタマイズすることができ、例えば、ウィンドウの色やアイコンの設定なども行えます。

ウィンドウマネージャに依存しない設計の方法

[編集]

ウィンドウマネージャに依存しない設計方法では、アプリケーションが特定のウィンドウマネージャの機能や設定に依存せず、汎用的に動作するようにすることが求められます。これにより、異なるウィンドウマネージャでも一貫したユーザーエクスペリエンスを提供できます。

ウィンドウの外観や動作は、ウィンドウマネージャの設定に依存する部分が多いため、アプリケーションはウィンドウのサイズや配置を自動的に調整することが重要です。例えば、ウィンドウのタイトルバーやアイコンを表示するかどうか、ウィンドウのサイズ変更を許可するかどうかなど、ウィンドウマネージャの設定に関係なく動作するように設計します。

また、X11では、アプリケーションがウィンドウマネージャの状態に影響を与えることなく、ウィンドウを最大化したり、最小化したりするための標準的なプロトコル(WM_NORMAL_HINTSWM_STATEなど)も提供されています。

#include <X11/Xlib.h>

int main() {
    Display *display = XOpenDisplay(NULL);
    if (!display) {
        fprintf(stderr, "Xサーバーに接続できません\n");
        return -1;
    }

    Window root = DefaultRootWindow(display);
    XMoveResizeWindow(display, root, 100, 100, 800, 600);  // ウィンドウの位置とサイズを設定
    XMapWindow(display, root);  // ウィンドウを表示

    XEvent event;
    for (;;) {
        XNextEvent(display, &event);
        if (event.type == Expose) {
            // 描画操作
        }
    }

    XCloseDisplay(display);
    return 0;
}

このコードでは、ウィンドウの位置やサイズをウィンドウマネージャに依存せずに設定しています。ウィンドウマネージャの設定に関係なく、アプリケーションの動作は一貫性を保ちます。