2013年1月2日水曜日

とりあえず過去を振り返る所からはじめてみる

Waylandについて勉強会で話をしようかと思う隠者です。

まぁ、自分でやってみたビルドとかそういう辺りの話だけしてお茶を濁すのも良いのですが、せっかくの勉強会なら、Window Systemとかプロトコルの概要とか、そういう基礎を話しておけば、手を付ける人も増えるのじゃないかとか思っています。

で、Waylandのドキュメントをちらほらとにゅあんすで〜翻訳でもしようかと思ったのですが、このドキュメント、Xとの比較による説明から入っています。まぁ、せっかくだから、X Windowについてから話を始めようかと思います。

古い話なので、古い書物をひっくり返さないとかなぁと思ってみたのですが・・・。

Wikipediaにいろいろ情報ありました・・・良い時代です。恐るべしWikipedia。寄付しておかないとな(ステマ)。
まぁ、でも、順を追って、多分勉強会で発表する部分を書き出していきましょう。

ウィンドウシステムとは

「ウィンドウシステムとは、平行動作する複数のタスクそれぞれに固有の描画領域を割り当てる事で、画面出力を多重化する技術の総称です」と言っても、WindowsからPCを触り始めた方々や、最近のLinuxから入った人には何のこっちゃと思われるかもしれません。

Linuxであれば、ちょっと設定するだけで、過去に戻る事が可能です。Linux起動時にgrubで止めて、kernel parameterを指定するだけです。Ubuntu 12.04では、起動時にSHIFTキーを押しっぱなしにしていると、grubに入れます。


Ubuntu with linux .... にカーソルを合わせて、"e"キーを押すとエディットモードに入ります。以前は、3(マルチユーザー)という指定をしていたはずなのですが、Ubuntu 12.04では textと指定するようですね。

この状態でCtrl+Xで起動すると、Xが立ち上がっていないCUIでのログイン画面となります。terminalを起動すると現れるあの画面がディスプレイいっぱいに広がってる状態ですね。


ウィンドウシステムが登場するまでは、PCの画面とはこういうモノだったのです。
ウィンドウシステムが「平行動作する複数のタスクそれぞれに固有の描画領域を割り当てる事で、画面出力を多重化する」と、以下のようになります。


X Window Systemとは

概要

X Window Systemとは、スタンフォード大学で開発されたW Window Systemをベースに、Project Athena(MIT,IBM,DECの共同研究開発プロジェクト)の一環として、1984年に開発がおこなれたネットワーク透過なウィンドウシステムの一種です。Project Athenaは、ワークステーションが増加していったとしても、異機種混在の環境でも、首尾一貫した環境を作り出すという事を目的としており、ローカルでもリモートでもウィンドウシステムを利用できるプロトコルの実現のためには、ネットワークを使っていたW Window Systemは都合が良く、Wの改良を行い、Wの次ということでXの名称となったようです。

アーキテクチャ

Xは、クライアント・サーバー方式となっており、GUIアプリケーションとしてユーザーインターフェースを規定し、描画依頼を送るXクライアントと、Xクライアンとからの描画依頼に従い、実際に出力装置に描画を行いキーボードやポインティングでバイスからの入力を適切なXクライアントへと配送するXサーバーで構成されています。

X Serverは、GUIの基本フレームワークや機構だけを提供し、ユーザーインターフェースを規定していません。X Serverにおいては、ある領域の描画と移動、マウスやキーボード等のイベントの処理を行うだけです。

実は、X Serverを起動し、ただクライアントアプリを起動するだけだと、非常にシンプルな画面しか出ないのです。先ほどのCUI画面で、xinit を実行するとxtermが1つだけで表示されます。まぁ、それだけだと寂しいので、ちょっと~/.xinitrc を設定して、xeyesも表示してみました。


真っ黒画面に、タイトル枠もメニューも、アイコンも、最大化最小化ボタンもなにもない画面がでています。ウィンドウですらないため、この状態ではマウスでドラッグしようとしても、何もできません。これは、xtermとxeyesが描画してくれと依頼しているものそのままになります。

設計思想

Xが非常に寂しい画面になった理由は、その設計思想に見て取れます。Wikipediaから転載します。
  • 実際のアプリケーションでどうしても必要という場合以外は、新機能を追加するな。
  • システムが何でないのかを定義することは、何であるのかを定義するのと同じように重要である。あらゆるニーズに答える必要はない。むしろ、互換性を維持した状態で拡張可能にしておけ。
  • 1つでも例を挙げて一般化したほうが、全く例を挙げずに一般化するよりもマシである。
  • 問題が完全に把握できないときは、解決策も提供しないのが最善の方法である。
  • 10%の作業で望みの90%の効果が得られるときには、その解法を使え。
  • 複雑さは可能な限り分離せよ。
  • ポリシーよりも機構を提供せよ。特にユーザインタフェースのポリシーはクライアント側に任せておけ
というわけで、ユーザーインターフェースはクライアント側に任されているんですね。

ウィンドウマネージャ

さて、UIがクライアント任せとはいえ、すべてのGUIアプリケーション側で、タイトルバーや閉じるボタン、ウィンドウの移動方法、拡大縮小方法をいちいち実装していては、実装が大変ですし、何よりGUIアプリ毎に操作性がバラバラになってしまいます。

そこで登場するのがウィンドウマネージャです。ウィンドウマネージャは、アプリケーションのウィンドウの位置と見た目を制御するプログラムです。どこまでがウィンドウマネージャの機能といった規定はないため、ウィンドウマネージャ毎に色々特徴や機能が異なりますが、X Windowでアプリをウィンドウ足らしめているものがウィンドウマネージャと言えるでしょう。

描画の仕組みによって、タイル型、スタック型、コンポジット型等の区分がありますが、その辺りはまた後日。

とりあえず何種類かのウィンドウマネージャをインストールして見栄えを見てみましょう。

twm

1987年という初期の頃に作られた非常にシンプルで軽量なスタック型のウィンドウマネージャです。これを見せると古い人は大喜びですけどね。

$ sudo apt-get install twm

Enlightenment

1997年に公開されたウィンドウシステム。初期の頃はGNOMEやKDEと連携して使われる事が多かったのですが、現在では独自の基本ライブラリ EFL を使って、独立のデスクトップシェルを目指して開発が継続中となっています。EFLは軽量で非力な環境でも動作できるそうで、Tizenで採用されているんですよね。

$sudo add-apt-repository ppa:hannes-janetzek/enlightenment-svn
$sudo apt-get update
$sudo apt-get e17

D-BUSとか必要なものがあるらしくて単体で起動せず、ちょっと強引に起動しているので、ランチャーとかも起動してしまってるようです。
昔、Kondara Linuxというディストリビューションで標準として採用されていたので隠者も使っていました。あの当時、自分の中にあったLinuxは微妙にダサいというイメージをがらりと変えてくれたものです。

metacity

GNOMEに含まれているGNOMEプロジェクト製のウィンドウマネージャです。
まぁ、よく見るものなので、特に説明の必要もないでしょう。


kWin

sudo apt-get install kubuntu-desktop

KDEに含まれているKDEプロジェクト製のウィンドウマネージャです。


以前は普通に単体動作していた気がするのですが、installが悪かったのかxeyesの方はウィンドウになっていませんねぇ。

ちょっと巧く動作していない部分はありましたが、ぱっと見でも印象が違いますよね。
こういったウィンドウ枠をつくり、拡大・縮小や、位置の移動、ウィンドウメニュー等の機能を提供するのがウィンドウマネージャです。

とりあえず、本日は、以下の3点を学んだということで、本日はこの辺までにしておきます。

  • ウィンドウシステムとは
  • X Window Systemとは
  • ウィンドウマネージャとは

0 件のコメント:

コメントを投稿