この章では、Solaris X サーバーの概要を説明します。Solaris X サーバーにより、Solaris 製品で X Window System のクライアント/サーバーモデルが実現されます。この章では、次の内容について説明します。
今回のリリースで Solaris X サーバーに追加された新機能
X コンソーシアムがサポートする拡張機能や Display PostScript 拡張機能など、Solaris X サーバーの機能
サポートされる X11 アプリケーションとサポートされない X11 アプリケーション
OpenWindowsTM のディレクトリ構造
Solaris X サーバー、XSun は、Display PostScript (DPS) イメージシステム拡張機能を持つ X コンソーシアムの X11R6 サンプルサーバー、X コンソーシアムのその他の X 拡張機能、および Sun が独自に追加した機能からなっています。Solaris X サーバーは、共通デスクトップ環境 (CDE) の基礎となるもので、CDE デスクトップの下に位置付けられます。このサーバーは、クライアントアプリケーション、表示ハードウェア、入力デバイス間の通信を処理します。デフォルトでは、Solaris X サーバーでは CDE dtlogin およびウィンドウマネージャ (dtwm) が実行されますが、ICCCM (クライアント間通信規約マニュアル) 準拠の X Window System マネージャであれば、どんなものでもこのサーバーで実行できます。ソフトウェア開発者は、Xlib ライブラリだけでなく、Motif ツールキットや Xt ツールキットなど、さまざまなツールキットを使用して、Solaris 環境用のアプリケーションを作成できます。
図 1–1 は、Solaris X サーバー、複数のデスクトップクライアントアプリケーション、ディスプレイ、入力デバイス間の関係を示します。
X コンソーシアム の X11R6 サンプルサーバーは、Solaris X サーバーの重要な構成要素です。X11R6 サンプルサーバーは、移植性を持つように設計され実装されたので、クライアントアプリケーションではハードウェアの違いを意識する必要がありません。このサンプルサーバーはすべての描画を処理し、デバイスドライバとのインタフェースにより入力を受け取り、見えない画面領域のメモリ、フォント、カーソル、カラーマップを管理します。
サンプルサーバーには、次の各部、つまり層が含まれています。
デバイス独立層 (DIX) – クライアント要求のディスパッチ、イベント待ち行列の管理、クライアントへのイベント分配、表示用データ構造の管理を行います。この層には、グラフィックスハードウェア、入力デバイス、またはホストオペレーティングシステムに依存しない機能が含まれます。
デバイス依存層 (DDX) – ピックスマップ、クリッピング処理用領域、カラーマップ、画面、フォント、グラフィックスコンテキストを生成し、操作します。また、DDX 層は入力デバイスからイベントを収集し、DIX 層に渡します。この層には、サーバーで使用するグラフィックスハードウェアと入力デバイスに依存するルーチンが入っています。
オペレーティングシステム層 (OS) – クライアント接続と接続認証機構を管理し、メモリの割り当て、解放用ルーチンを提供します。OS 層には、ホストのオペレーティングシステムに依存する機能が入っています。
フォント管理用ライブラリ – フォント管理用ライブラリにより、サーバーはフォーマットの異なるフォントファイルを使用したり、X フォントサーバーからフォントをロードしたりできます。サーバーのフォント機能については、第 4 章「フォントのサポート」で説明します。
図 1–2 は、サーバーの構造を示します。このマニュアルでは、サーバーは Solaris X サーバーを意味し、サンプルサーバーは X コンソーシアムの X11R6 サンプルサーバーを意味するので注意してください。
Solaris X サーバーには、X11R6 サンプルサーバーの他に、Display PostScript システムが組み込まれています。DPS は、PostScript イメージングモデルと Adobe Type Library へのアクセスを X アプリケーションに提供します。Display PostScript システムは、クライアント/サーバーネットワークアーキテクチャの一部として、X Window System の拡張機能により組み込まれています。この拡張機能は、DPS/X [この節は、Adobe Systems Incorporated の『Programming the Display PostScript System with X』(Addison-Wesley Publishing Company, Inc.、1993 年刊) の第 2 章をもとに記述してあり、著作権所有者の承諾を得て使用しています。] と呼ばれることがあります。
DPS システムには、X サーバーの拡張機能として PostScript インタプリタが実装されており、各アプリケーションがクライアントとなります。アプリケーションは、1 つのオペレータを呼び出すことにより PostScript 言語コードをサーバーに送信するので、サーバーからはデータを出力引数形式で返すことができます。DPS のクライアント/サーバー通信は、X Window System が提供する低水準通信プロトコルを使用して透過的に実行されます。DPS システムについての詳細は、第 2 章「DPS の機能と拡張」を参照してください。
Solaris X サーバーでは、X コンソーシアムによって定義された X 拡張機能がサポートされます。これらの拡張機能については、次の各節で簡単に説明します。各節には、拡張機能ごとの仕様名の他に、(ftp.x.org マシン上の) 関連ファイル名を括弧で囲んで掲載してあります。標準 X 拡張機能のメカニズムについての詳細は、『The X Window System Server』と『Xlib Programming Manual』を参照してください。
以降の各節で説明する X コンソーシアムの X11 規格は、World Wide Web 上のシステムで簡単に参照できます。URL は http://www.rdg.opengroup.org です。X11 マニュアルは、ftp.x.org マシン上の /pub/R6untarred/mit/doc/extensions ディレクトリに入っています。ファイル転送プロトコル (ftp) を使用して、このシステムからファイルをダウンロードしてください。ftp の使用方法に関するヘルプが必要な場合は、ftp(1) のマニュアルページを参照してください。自分のシステムがインターネットに接続されているかどうかは、システム管理者に問い合わせてください。
XInput 拡張機能は、MIT の X コンソーシアム標準「X11 入力拡張機能プロトコル仕様」(/pub/X11/R6.1/xc/doc/specs/Xi/protocol.ms) を Sun が実現したものです。この拡張機能によって、代替入力デバイス (キーボードおよび ポインタ以外のデバイス) に対するアクセスを制御することが可能になり、クライアントプログラムは相互に独立して、またコアデバイスに依存することなく、各デバイスからの入力を選択することができます。
ダブルバッファ拡張機能 (DBE) は、X コンソーシアムの規格を Sun が実現したものです。ダブルバッファリングは、アプリケーションが完全にレンダリングされたフレームだけを表示できるようにすることで、ちらつきがないアニメーション機能を提供します。フレームは非表示バッファにレンダリングされた後、表示バッファに移動されます。
SHAPE 拡張機能は、X コンソーシアム標準「X11 非矩形ウィンドウ形状拡張機能」(shape.ms) を Sun が完全に実現したものです。この拡張機能により、X プロトコルの範囲内で任意のウィンドウおよび境界線の形状を作成することができます。
MIT-SHM (共有メモリ) 拡張機能は、X コンソーシアムの実験的な「MIT 共有メモリ拡張機能」(mit-shm.ms) を Sun が完全に実現したものです。この拡張機能により、クライアントは、実際の画像データを共有メモリに格納するという方法でメモリの XImages およびピックスマップを共有できます。メモリの共有によって Xlib プロセス間通信チャネルを介したデータ転送が不要になるため、大きな画像の場合はシステムパフォーマンスが向上します。ただし、この拡張機能が有用とされるのは、クライアントアプリケーションがサーバーと同じマシン上で実行される場合だけです。
XTEST 拡張機能は、MIT の X コンソーシアムの標準案「X11 入力統合拡張機能案」(xtest1.mm) を Sun が完全に実現したものです。この拡張機能により、ユーザーがいなくても、クライアントでユーザー入力を生成したり、ユーザー入力動作を制御したりできます。この拡張機能を使用するには、サーバーの DDX 層を変更する必要があります。
MIT-SUNDRY-NONSTANDARD 拡張機能は MIT で開発されたため、ftp.x.org のマシン上での標準ではありません。この拡張機能は、X11R3 以前のクライアントが出すさまざまな間違ったプロトコル要求を処理します。特定の誤った要求が処理されるようにバグ互換モードを有効にするか、誤った要求についてはエラーを返すようにバグ互換モードを無効にする要求を出します。また、この拡張機能は、現在のモードの状態を取得する要求も出します。
この拡張機能は、xset で動的に有効、無効を切り替えることも、openwin でサーバー起動時に指定することもできます。詳細は、xset(1) と openwin(1) のマニュアルページ (特に -bc オプション) を参照してください。
この X コンソーシアムの標準拡張機能により、アプリケーションは XID を再利用できます。アプリケーションによっては、XID の作成と破棄がただちに行われるため、決められた XID の範囲を超える場合があります。ほとんどのアプリケーションではこの拡張機能は必要ありません。この仕様は、/pub/X11/xc/doc/specs/Xect/xc-misc.ms にあります。
X イメージング拡張機能 (X Imaging Extension、XIE) は、X コンソーシアム標準を Sun が実装したものです。
また、Solaris X サーバーでは、American Disabilities Act (ADA) 準拠のキーボード機能もサポートされます。これらの機能は、AccessX というサーバー拡張機能を通じて利用できます。AccessX 拡張機能は、スティッキーキー、スローキー、トグルキー、マウスキー、バウンスキー、リポートキーなどの機能を提供します。クライアントプログラム accessx を使用して、これらの機能の有効と無効を切り替えてください。accessx クライアントは、トグルキー、バウンスキー、リピートキーとその設定を制御します。スティッキーキー、スローキー、マウスキーは、Shift などのキーを使用して有効にすることができます。AccessX の使用方法についての詳細は、『Solaris ユーザーズガイド』を参照してください。
accessx を実行する前に、/usr/openwin/lib/app-defaults/accessx.uid に UIDPATH 環境変数を設定してください。
accessx クライアントは、SUNWxwacx パッケージの一部です。このクライアントをインストールするには、All Cluster をインストールする必要があります。
Solaris X サーバーには、Sun の拡張機能 SUN_SME が組み込まれています。これは、Sun が共有メモリトランスポートメカニズムを実装したものです。この拡張機能により、共有メモリ経由でクライアント要求をサーバーに送信できます。共有メモリは、クライアント要求専用です。サーバーからの応答とイベントは、デフォルトのトランスポートメカニズム経由で送信されます。このトランスポートメカニズムを有効にするには、DISPLAY 環境変数を :x.y に設定します。この場合、x はディスプレイ番号で、y は画面番号です。また、環境変数 XSUNTRANSPORT を shmem に設定してください。環境変数 XSUNSMESIZE を希望の K バイト数に設定すれば、セグメントのサイズを設定できます。デフォルトでは、XSUNSMESIZE は 64 に設定されます。
Solaris X サーバーには、透明オーバーレイウィンドウを有効にするアプリケーションプログラマ用インタフェース (API) も組み込まれています。オーバーレイとは、グラフィックスを描画できるピクセルバッファ (物理的に、またはソフトウェアによりシミュレート) です。アプリケーションでは、オーバーレイを使用してディスプレイウィンドウに一時イメージを表示できます。オーバーレイ API についての詳細は、第 5 章「サーバーオーバーレイウィンドウ」および第 6 章「透明オーバーレイウィンドウ」を参照してください。
表 1–1 に X ライブラリを示します。これらライブラリの構成要素である .so と .a ファイルは、 /usr/openwin/lib にあります。
表 1–1 X11 ライブラリライブラリ | 説明 | X コンソーシアムからの入手 | Sun での改良点 |
---|---|---|---|
libX11 |
Xlib |
可 |
マルチスレッド対応 ロケールの動的ロード /usr/openwin を含むサーチパス 新しいキーシム |
libXau |
X 認証ライブラリ |
可 |
なし |
libXaw |
アテナ widget セットライブラリ |
可 |
なし |
libXext |
X 拡張ライブラリ |
可 |
バグの修正、透明オーバーレイ |
libXinput |
以前の入力拡張機能とのバイナリ互換ライブラリ |
不可 |
Sun ライブラリ |
libXi |
Xinput 拡張ライブラリ |
可 |
バグの修正 OpenWindows X 拡張機能のサポート |
libXmu |
X 各種ユーティリティライブラリ |
可 |
/usr/openwin を含むサーチパス |
libXol |
OLIT ライブラリ |
不可 |
Sun の製品 — OLIT に関するマニュアルは「はじめに」を参照 (USL からは可) |
libXt |
Xt Intrinsics ライブラリ |
可 |
なし |
libxview |
XView ライブラリ |
可 |
X コンソーシアムに寄贈した Sun の製品 X11R6 の libxview に入っていないバグの修正を実施 |
/usr/openwin/lib/sparcv9 には 64 ビット Solaris のインストール用に、以下のような 64 ビットバージョンの共有ライブラリがあります。
libX11.so.4
libXext.so.0
libICE.so.6
libSM.so.6
libXt.so.4
libXaw.so.5
libXmu.so.4
libXtst.so.1
libXi.so.5
libXinput.so.0
libdps.so.5
libdga.so.1
libowconfig.so.0
さらに、/usr/openwin/lib/sparcv9 には以下のようなプログラマ用の 64 ビットバージョンの lint ライブラリがあります。
llib-lX11.ln
llib-lXaw.ln
llib-lXext.ln
llib-lXmu.ln
llib-lXt.ln
Solaris X サーバーでは、次のアプリケーションを実行できます。
次のツールキットを使用して作成されたアプリケーション
OpenWindows ツールキット: OLIT と XView
Motif ツールキット
Xt ツールキット
X プロトコルに準拠して作成したアプリケーション
SPARC SunOS 4.0/4.1 およびその互換バージョン上でコンパイルした OpenWindows バージョン 3 の X11 アプリケーション
OpenWindows バージョン 3 の X11 アプリケーションは、システムのバイナリ互換パッケージに従う必要があります。詳細は『バイナリ互換性ガイド』を参照してください。
次のインタフェースを使用して作成したアプリケーションはサポートされません。
TNT、NeWS、XVPS
SunView、SunWindows、Pixrect
Solaris X 環境には、X コンソーシアムから入手できる次のようなクライアントアプリケーションがあります。
xterm 端末エミュレータ
twm ウィンドウマネージャ
xdm ディスプレイマネージャ
bitmap ビットマップエディタ
xfd フォントディスプレイユーティリティ
xauth アクセス制御プログラム
xhost アクセス制御ユーティリティ
xrdb リソース制御プログラム
xset ユーザープリファレンス設定プログラム
xsetroot ルートウィンドウの外観設定ユーティリティ
xmodmap キーボード制御ユーティリティ
xlsfonts サーバーフォント一覧表示ユーティリティ
xfontsel フォント選択ユーティリティ
xlswins ウィンドウ一覧表示ユーティリティ
xwininfo ウィンドウ情報ユーティリティ
xlsclients クライアントアプリケーション情報ユーティリティ
xdpyinfo サーバー情報表示ユーティリティ
xprop ウィンドウとフォントの属性ユーティリティ
次のアプリケーションおよびライブラリは、すべて X コンソーシアムから提供されているものであり、サーバー上で動作しますが、 Sun 社からは提供もサポートもされていません。
Andrew、InterViews
uwm および wm ウィンドウマネージャ
CLX Common Lisp インタフェース
contrib X コンソーシアムクライアント
図 1–3 は、OpenWindows のディレクトリ構造を示します。これには、Solaris X サーバーの実行可能ファイルと X11 コアディストリビューションライブラリが含まれています。/openwin/etc は /openwin/share/etc へのシンボリックリンクで、/openwin/include は /openwin/share/include へのリンクで、/openwin/man は /openwin/share/man へのリンクなので注意してください。/share ディレクトリには、アーキテクチャに依存しないファイルが入っています。
/openwin/lib 内の X11 ライブラリについての詳細は、X11 ライブラリを参照してください。
表 1–2 では、OpenWindows ディレクトリ構造の最上位ディレクトリの内容を簡単に説明します。
表 1–2 OpenWindows のディレクトリディレクトリ | サブディレクトリ | 内容 |
---|---|---|
/etc |
/keytables |
米国と各国対応のキーテーブル、keytable.map |
|
/tt |
ToolTalk® のデータファイル |
|
/workspace |
/patterns (.xbm ファイルと属性) |
/include |
/X11 |
X11 ヘッダファイル、/DPS、/Xaw、/Xmu、/bitmaps、/extensions |
|
/Xau |
/include/X11 へのシンボリックリンク |
|
/Xol |
OLIT ヘッダファイル |
|
/config |
generic.h ヘッダファイル |
|
/desktop |
分類機構ヘッダファイル |
|
/dga |
dga.h ヘッダファイル |
|
/help |
libhelp ヘッダファイル |
|
/images |
各種ビットマップファイル |
|
/olgx |
olgx ヘッダファイル |
|
/pixrect |
Pixrect ヘッダファイル |
|
/portable |
ヘッダファイル c_varieties.h と portable.h |
|
/xview |
XView ヘッダファイル |
/lib |
/X11 |
サーバーサポートファイル、/fonts、DPS .upr ファイル |
|
/Xol |
OLIT データファイル |
|
/app-defaults |
X アプリケーションのデフォルトファイル |
|
/cetables |
分類機構テーブル |
|
/config |
imake ファイル |
|
/help |
/locale/C/help へのシンボリックリンク |
|
/libp |
プロファイルライブラリ |
|
/locale |
ロケールライブラリ (/C、/iso_8859_1) |
|
/xdm |
Xdm 構成ファイル |
|
/sparcv9 |
64 ビットの X ライブラリ |
/man |
/man1, /man1m |
OpenWindows コマンドのマニュアルページ |
|
/man3 |
XView、OLIT、Xt、Xlib などのライブラリのマニュアルページ |
|
/man4 |
AnswerBook のマニュアルページ |
|
/man5 |
ファイル形式のマニュアルページ |
|
/man6 |
デモのマニュアルページ |
|
/man7 |
コマンド以外のマニュアルページ |
/server |
内部使用のためのサーバー専用ファイル |
|
/share |
/etc |
/etc 内でのファイルの位置 |
|
/images |
/PostScript、/fish、/raster |
|
/include |
/include 内のファイルの位置 |
|
/locale |
/lib/locale 内のファイルの位置 |
|
/man |
/man 内のファイルの位置 |
|
/src |
/dig_samples、/extensions、/fonts、/olit、 /tooltalk、/xview |
|
/xnews |
/client |
X11 プログラミングに関する一般的な問題について以下に説明します。
Xlib の OpenWindows のバージョンは、XLookupString の呼び出しによる Compose キー処理をサポートしています。
IA キーボード上では、Ctrl-Shift-F1 キーを使用して Compose キーの機能を実行できます。
Xlib の OpenWindows バージョンは、XLookupString の呼び出しによる NumLock キー処理をサポートしています。この変更は、XView、OLIT、Motif、X アプリケーション内の NumLock 処理には影響しません。
IA キーボードの場合、NumLock キーはキーボードのキーパット部分の最上部にあります。
ASCII カラー名と RGB カラー値との対応関係がカラー名データベースによって与えられます。このデータベースは、カラー表示プログラムの移植性を向上させ、プログラミング作業を容易にする効果があります。ただし、この対応関係は主観的に決定したもので、科学的な客観性に基づいたものではないということに注意してください。
このデータベースのソースは /usr/openwin/lib/X11/rgb.txt です。このファイルは、X コンソーシアムの X11R6 で提供されるファイルと同じものです。rgb.txt をコンパイルすることによって、dbm(3) データベースファイル rgb.dir および rgb.pag が作成されます。サーバーは、最初にスタートアップされた時点で、それらのファイルの内部表現を生成します。この内部表現を参照することによって、カラー名からカラー値へのマッピングが実行されます。
X11 クライアントは、カラー名からカラー値へのマッピングに XLookupColor または XAllocNamedColor を使用します。これらのルーチンに渡されるカラー名文字列は、それがデータベース中で検索される前に、小文字に変換されます。
Solaris X サーバーのカラーサポート機能を使用するプログラマは以下の点について考慮する必要があります。プログラムの移植性および色の共有を最大限可能にするためのヒントを以下に示します。
デフォルト PseudoColor カラーマップ中の白と黒が特定の位置にあると仮定することはできません。必ず XAllocColor を用いて描画のためのピクセルを割り当てます。
白と黒が特定のピクセル位置にあると仮定しないことが、プログラミングの上で重要です。Solaris X サーバーの今後のバージョンや他ベンダのサーバーでは、これらの色の位置が現在のサーバーと異なることも考えられます。移植性と互換性をできるだけ高くするために、X11 クライアントは常に XAllocColor 関数で描画用の色を割り当てるようにしてください。
ビジュアルを使用する前に、サポートされているビジュアルの種類をすべて確認しなければなりません。これには XGetVisualInfo または XMatchVisualInfo を使用できますが、XGetVisualInfo はクラスおよびデプスが同じビジュアルを区別できるため、その使用を推奨します。
カラーマップフラッシングを減少させるため、最初にデフォルトカラーマップから色を割り当てる方法が一般に有効とされます。専用カラーマップを作成するのは、この割り当てに失敗した場合だけに限ってください。
ポータブルな X11 カラー表示クライアントの作成方法については ビジュアルに関するプログラミング上のヒントの節を参照してください。
X と X Window System のさまざまな側面に関して多数の書籍が発行されています。X Window System についての詳細は、関連マニュアルの推奨マニュアルを参照してください。これらのマニュアルは、SunExpress または最寄りの書店で入手できます。Solaris X サーバーと X コンソーシアムサンプルサーバーについての詳細は、次のマニュアルページを参照してください。
Xsun(1) – Solaris X サーバー
Xserver(1) – X コンソーシアムサンプルサーバー
openwin(1) – OpenWindows 起動コマンド