6.2. X を理解する

初めて X を使う場合、Microsoft® Windows® や Mac OS® といった他の GUI 環境に慣れている人は多少ショックを受けるでしょう。

さまざまな X のコンポーネントについての詳細や、 それらがどのようにやり取りするかについては理解する必要はありませんが、 基本的なことをいくつか知っていると X を使う際に強力な武器になるでしょう。

6.2.1. なぜ X?

X は、UNIX® 用に書かれた最初のウィンドウシステムではありませんが、 それらの中では最も広まっているものです。 X のオリジナルの開発チームは X を書く前に別のウィンドウシステムを開発していました。 そのシステムの名前は W (Window の W) です。 X は単にローマ字でその次の文字だというだけなのです。

X は X, X Window System, X11 などといった多くの用語で呼ばれます。 X11 を X Windows と呼ぶと気を悪くする人もいるでしょう。 これについてもう少し見識を深めるには X(7) をご覧ください。

6.2.2. X のクライアント/サーバモデル

X は最初からネットワークを意識してデザインされており、 クライアント - サーバ モデルを採用しています。

X では、X サーバ はキーボードやモニタ、 マウスが接続されたコンピュータ上で動きます。 このサーバはディスプレイの表示を管理したり、キーボード、 マウスからの入力を処理したり、他の入出力装置 (すなわち、入力装置として タブレット を利用できますし、 出力装置としてビデオプロジェクタを利用することもできます) を取り扱います。 各 X アプリケーション (XTermFirefox など) は クライアント になります。 クライアントは この座標にウィンドウを描いてください といったメッセージをサーバへ送り、サーバは ユーザが OK ボタンを押しました といったメッセージを送り返します。

家庭や小さなオフィスのような環境では、X サーバと X クライアントは同じコンピュータ上で動くことになるでしょう。 しかし、X サーバを非力なデスクトップコンピュータで動かし、 X アプリケーション (クライアント) は例えばオフィス全体を捌くような 高機能で高価なマシンで動かすことも可能なのです。この場合、 X のクライアントとサーバの通信はネットワーク越しに行なわれます。

これは、ある人々を混乱させることがあります。 X での用語は彼らが想定するものとは正反対だからです。 彼らは X サーバ は地下にある大きなパワフルなマシンであり、 X クライアント が自分たちのデスク上にあると想像するのです。

X サーバとはモニタとキーボードがついているマシンのことであり、 X クライアントとはウィンドウを表示するプログラムだということを覚えておいてください。

X のプロトコルには、クライアントとサーバのマシンが同じ OS で動いていなければならないといったことを強制するものはなにもありませんし、 同じ機種で動いている必要もありません。 X サーバを Microsoft® Windows® や Apple の Mac OS® で動かすことも可能ですし、 そのようなソフトウェアもフリーのものから商用のものまでいろいろとあります。

6.2.3. X ウィンドウマネージャ

X のデザイン哲学は UNIX® のそれに非常によく似ており、 ツールであってポリシーではない のです。 つまり、X はあるタスクがどのように達成されるべきかを示すものではありません。 その代わり、ユーザにはツールが与えられ、 それらをどうするかはユーザに委ねられているのです。

この哲学は、X ではスクリーン上でウィンドウがどのように見えるべきか、 マウスでそれらをどうやって動かすか、ウィンドウ間を移動するのに どういうキーストロークを使うべきか (例えば Microsoft® Windows® における Alt+Tab)、 各ウィンドウのタイトルバーはどのように見えるべきか、 それらはクローズボタンを持つべきかどうか、 といったことを示すものではないというところまで拡大して解釈できます。

その代わりに、X ではそういったことを ウィンドウマネージャ と呼ばれるアプリケーションに任せるのです。 X 用の ウィンドウマネージャはたくさん あります。 これらのウィンドウマネージャの見た目や使い勝手はそれぞれ異なっています。 バーチャルデスクトップ をサポートしているものもありますし、 デスクトップを操作するキーストロークをカスタマイズできたり、 スタート ボタンやそれに類するものを持っているものもあります。 テーマ に対応しており、 新しいテーマを適用して見た目や使い勝手を完全に変えられるものもあります。 ウィンドウマネージャは Ports Collection の x11-wm というカテゴリからインストールできます。

さらに、KDEGNOME デスクトップ環境には、 それぞれのデスクトップに統合された独自のウィンドウマネージャがあります。

それぞれのウィンドウマネージャはまた異なる設定機構を備えており、 手で設定ファイルを編集しなければならないものや、 設定作業のほとんどを GUI ツールで行うことができるものもあります。 少なくとも 1 つ (Sawfish) は Lisp 言語の変種で書かれた設定ファイルを持っています。

フォーカスポリシー:

ウィンドウマネージャのもう一つの機能はマウスの フォーカスポリシー に関するものです。 すべてのウィンドウシステムは、ウィンドウを選択しキーストロークを 受け付けるようにするための方法が必要です。 そして、どのウィンドウがアクティブなのかを示す必要もあります。

よく知られているフォーカスポリシーは click-to-focus と呼ばれるもので、 このモデルは Microsoft® Windows® で利用されており、 あるウィンドウ内でマウスをクリックすればそのウィンドウがアクティブになる、 というものです。

X は特定のフォーカスポリシーを採用していません。 代わりにウィンドウマネージャがそれをコントロールします。 それぞれのウィンドウマネージャが、 それぞれのフォーカスポリシーをサポートしています。 すべてのものは click-to-focus をサポートしていますし、 多くのものは他の方法もサポートしています。

最もポピュラーなフォーカスポリシーは次のものでしょう

focus-follows-mouse

マウスポインタの下にいるウィンドウがフォーカスされるというものです。 ウィンドウは最前面にある必要はありません。 フォーカスを変えるには他のウィンドウにマウスポインタを動かすだけです。 クリックする必要はありません。

sloppy-focus

これは focus-follows-mouse を少し拡張したものです。 focus-follows-mouse では、 マウスがルートウィンドウ (背景) に移動した時には、 フォーカスされているウィンドウがなくなり、 キーストロークは単に破棄されます。 sloppy-focus であれば、 ポインタが別のウィンドウに移った時のみフォーカスが変わり、 現在のウィンドウから出ただけでは変わりません。

click-to-focus

マウスクリックによりアクティブなウィンドウが選択されます。 ウィンドウは 前面に持ち上げられ、 他のすべてのウィンドウの前にきます。 ポインタが別のウィンドウ上に移動した時でも、 すべてのキーストロークがこのウィンドウに届きます。

多くのウィンドウマネージャはこういったものに加え、 その他のポリシーにも対応しています。 ウィンドウマネージャそのもののドキュメントもよく読んでください。

6.2.4. ウィジェット

X のツールを提供してもポリシーは提供しないというアプローチは、 各アプリケーションでスクリーンに現われるウィジェットにも適用されます。

ウィジェット はクリック可能であったり、 他の方法で操作可能なすべてのユーザインタフェース用アイテムを指す用語です。 ボタンやチェックボックス、ラジオボタン、アイコン、リスト、などがそうです。 Microsoft® Windows® はこれらを コントロール と呼んでいます。

Microsoft® Windows® や Apple の Mac OS® はともに非常に厳密なポリシーをウィジェットに課しています。 アプリケーション開発者は共通のルックアンドフィールに 確実に従うことを想定されているわけです。 X では、特定のグラフィカルなスタイルやウィジェットのセットを 強制することが重要とは考えてられていませんでした。

したがって、X アプリケーションに共通の見た目や使い勝手を期待してはいけません。 KDE で使われている Qt や GNOME プロジェクトで使われている GTK+ といった有名なウィジェットセットやその亜種が何種類もあります。 これらのウィジェットセットはモダンな見た目を持っています。 この点で言えば、UNIX® のルックアンドフィールは収斂されてきており、 初心者がより簡単に使えるようになってきています。

本文書、および他の文書は ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/ からダウンロードできます。

FreeBSD に関する質問がある場合には、 ドキュメント を読んだ上で <questions@FreeBSD.org> まで (英語で) 連絡してください。

本文書に関する質問については、 <doc@FreeBSD.org> まで電子メールを (英語で) 送ってください。