4. ウィンドウマネージャ

でもクライアントが画面上の表示エリア(ウィンドウっていうんだ)を操作する 際に、X サーバーはどうやってそれを処理するのかには触れていなかったね。 GUI を使ったことがある人なら明白なことなんだけど、「クライアントのウィンドウ」 を管理する必要があるんだ。典型的な例としては、ウィンドウを動かしたり、ちゃんと 整列させたり、大きさを変えたり、最大化したり最小化したりっていうことが できるんだけど、では X サーバーはこれらの仕事をどうやって処理するんだろうか。 答えはね。実は何もしないんだ。

X の基本的な教義の一つに、「仕組みは提供するけど、方針は任せるよ」って いうのがある。だから、ウィンドウの操作に関する方法(仕組み)は提供する としても、実際にその操作がどう振舞うのか(方針)は指示しているわけじゃ ないんだ。

仕組みと方針っていうこの奇妙なものはすべて、まとめると基本的には 次のようになる。つまり、画面上の領域を管理する責任は別のプログラムに あるってことだ。このプログラムはウィンドウの置き場所を決めたり、 ウィンドウの見え方や位置、それに大きさをユーザーが管理できる仕組みを 提供したりするし、また普通はウィンドウのタイトルや枠、それにボタンといった 「飾り付け」もしたりする。こうやって、ユーザーがウィンドウ自身を 管理できるようにするんだ。ウィンドウを管理する(訳注:マネージ) このプログラムの名前は(さあ、当ててみて!)、「ウィンドウマネージャ」 っていうんだ。

「 X のウィンドウマネージャはもう一つのクライアントにすぎない。つまり その専門的な特権に恵まれてはいるけれども、 X ウィンドウシステムの一部じゃ ないということだ。だから、ウィンドウマネージャは一種類だけじゃないんだ。 それどころかウィンドウマネージャにはたくさんの種類があって、ユーザーが ウィンドウとやりとりする方法やウィンドウの配置、飾り付け、それに キーボードとカラーマップのフォーカスを、それぞれ別々のやり方やスタイルで サポートしているんだ。」

X のアーキテクチャが提供しているのは、ウィンドウマネージャがウィンドウ上で これらの動作すべてを実行する方法であって、ウィンドウマネージャを実際に提供して いるわけじゃないんだ。

もちろんウィンドウマネージャはたくさんあるよ。なぜなら、ウィンドウ マネージャは外部の要素だから、自分の好みやウィンドウをどういうふうに 見せたいかとか、動きをどうしたいとか、どこに置きたいかとか、そういった ことしだいで、(どちらかといえば)簡単に書けるんだ。中には単純化し過ぎて 不細工なもの( twm )もあれば、けばけばしくて台所の流し以外ならなんでも 入ってるようなもの( enlightenment )もある。それにその中間にもあらゆる ものがある。fvwm, amiwm, icewm, windowmaker, afterstep, sawfish, kwm それに他にも数え切れない。好みが違えばその数だけウィンドウマネージャが あるってことさ。

ウィンドウマネージャっていうのは「メタクライアント」だ。その一番基本的な 任務は他のクライアントを管理することなんだ。ほとんどのウィンドウマネージャ は機能を2、3追加している(し、数多くの機能追加をしているものもある)。でも 大半のウィンドウマネージャにありそうな機能性の一つが、アプリケーションを 起動する方法だ。中にはコマンドボックスを用意して、そこでユーザーが標準的な コマンド(これを使ってクライアントアプリケーションを起動できる)をタイプ できるようにしているものもある。他には、素敵なある種のアプリケーション 起動メニューがある。これが標準化されているわけではないんだけどね。 もう一度言うけど、 クライアントアプリケーションの起動方法に関する方針なんか、 X は何も規定していないから、この機能性はクライアントプログラムで実装すべき ものなんだ。たいていはウィンドウマネージャがこの仕事を引き受けてる(そして ウィンドウマネージャによってやり方は違う)とはいえ、他のクライアント アプリケーションを起動するのが唯一の任務だっていうクライアント アプリケーションがあることは考えられる。プログラムの起動パッドを考えてみて ほしい。そしてもちろん、これまで「プログラム起動」アプリケーションが 大量に作られてきたんだ。