ログイン
編集不可のページディスカッション情報添付ファイル
"clear/wm_devel"の差分

MMA
1と23のリビジョン間の差分 (その間の編集: 22回)
2011-11-03 01:00:48時点のリビジョン1
サイズ: 1957
編集者: clear
コメント:
2013-01-18 00:43:08時点のリビジョン23
サイズ: 6291
編集者: clear
コメント:
削除された箇所はこのように表示されます。 追加された箇所はこのように表示されます。
行 1: 行 1:
= ウィンドウマネージャ開発メモ =
== 動機 ==
 * 毎日使って、それで暮らすものだからどうせなら自作したいね
 * X Window Systemの勉強には丁度いいかもね
ウィンドウマネージャ開発メモ
行 6: 行 3:
== 暫定的仕様 ==
 * Xlibで書く
  * awesomeなんかが使っているxcbを使う手もあるが、Xlibを使った小さめのウィンドウマネージャが割とごろごろ出てきて参考にできるので、こちらを使うことに
 * できる限り小さいものにする
  * 現実的に、実装できそうな規模にする
 * 仮想デスクトップ的なものは欲しい
  * dwmみたいなタグベースのものにするか否か
 * タイル型
  * フローティングもサポートするダイナミック型に
  * 具体的なスタイルをどうするかは要検討
   * [[https://wiki.archlinux.org/index.php/Comparison_of_Tiling_Window_Managers#Management_style|いっぱいある]]
 * コンパイル時設定
  * まずもって設定ファイルの仕様を考えてパースするコードを書くのが面倒
  * ヘッダか何かにまとめて書くdwm方式で良いか
  * それなりに使えるようになってからまた考える
 * ウィンドウマネージャの機能として
  * バー/トレイをつけるか
   * バーとは限らないが、仮想デスクトップの状態を把握できる何かは欲しい
   * 既存の優秀なバー/トレイアプリケーションが存在するので必要ならそれを使えばいいか
  * メニューをつけるか
   * いらない? 実装が面倒
   * dmenuあたりを使えば良いか
= 資料 =
== Xlib ==
古くから用いられているXクライアント作成用のCのライブラリ。各種言語へのバインディングもある。いい加減古いライブラリなので今は推奨されていない(が、これで書かれているWMはそれなりに存在する)
行 29: 行 7:
== 名称 ==
 * tinyとかsmallとかminimalみたいな単語は使い尽くされていた
 * どうやらlesserは使われてなさそうな雰囲気
  * レッサーパンダとかLGPLの最初のLとかのlesser
 * ということでlesser window manager
  * 縮めてlswmとかだろうか
とりあえず、カテゴリ別の詳しい仕様は以下のPDFが基本。
 * http://www.x.org/docs/X11/xlib.pdf (pdf)
書籍もある。
 * Xlib Programming Manual Volume One
  * O'Reillyが動物本シリーズを出し始める前に手がけたものらしい。邦訳なし
  * 残念ながらX11R5対応の版(1994年)が最新なので、R6以降は要補完。また、各種の拡張についても触れられていない
   * 大学図書館の洋書架にX11R4対応版がある。あとJEDにもあった気がする(確か禁帯出)
  * Xlibを用いたプログラミングについて系統的に書かれている本はこれが唯一と言って良い。WMについても一章が割かれており、サンプルコードもある
  * Volume Twoは単なるXlibのリファレンスなので、上記のPDFで事足りる
  * どうやら何かのOSの/usr/docなりに入ってたか何かしたようで、何処かの誰かによってそれがそのままWeb上で公開されてたりもする(O'Reilly公式ではない)
その他、Xlibについては検索すればそれなりに出てくる。
 * http://users.actcom.co.il/~choo/lupg/tutorials/xlib-programming/xlib-programming.html
 * http://xjman.dsl.gr.jp/X11R6/X11/

== XCB(X C Bindings) ==
Xlibを置き換えることを目的として作られた比較的新しめのライブラリ。Xlibよりダイレクトにプロトコルを扱う感じらしい(Xlibは裏で色々やってるが、XCBはプロトコルとAPIがほぼ一対一対応している)。(適切に使えば)Xlibよりかなりパフォーマンスが良い模様。また、Xlibは設計上マルチスレッド下での使用に問題がある(使えない訳ではない)が、XCBはマルチスレッドでも使える。
 * http://xcb.freedesktop.org/
xcbはとにかく資料が少なくて辛い。そもそもlibxcbの実装自体がXMLで記述された仕様から自動生成されているらしいので、分からなかったらXプロトコルの仕様を読めばだいたいOK。
 * http://xcb.freedesktop.org/tutorial/
  * チュートリアル
 * http://xcb.freedesktop.org/manual/index.html
  * doxygenで生成されたドキュメント
 * http://xcb.freedesktop.org/Publications/
  * 各種文書。awesomeをXlibからXCBに移植する話などもある
 * awesomeの実装
  * 有名どころでxcbを使っているのはこれか

== 各種規格 ==
UIについてX自体では規定されていないため、クライアント間通信は規格とは別にICCCMやEWMHで定められた約束事(コンベンション)に則ったものになる。例えば、全く別々のWMとタスクバーが協調動作しうるのは双方が同じ約束に従っているため。
 * http://standards.freedesktop.org/wm-spec/wm-spec-latest.html
  * Extended Window Manager Hints(EWMH)。歴史的経緯によりNetWMとも呼ばれ、使用するアトム名などにその名残りが見られる
 * http://www.x.org/docs/ICCCM/icccm.pdf (pdf)
  * Inter-Client Communication Conventions Manual(ICCCM)。EWMHで上書きされている部分もあることに注意
Xは拡張が多い上に、現在の利用シーンではそれが当たり前となっているようなものが多いので個別に追う必要がある。
 * http://cgit.freedesktop.org/xorg/proto/randrproto/tree/randrproto.txt
  * XRandR(動的に画面解像度を設定できるようにするための拡張。マルチディスプレイ拡張で先行するのがXinerama)
 * http://keithp.com/~keithp/render/Xft.tutorial
  * Xft(スケーラブルフォントを扱うための拡張)のチュートリアル

== 既存のWMに関するメモ ==
WMのリストは[[http://xwinman.org/|この辺]]とか[[http://en.wikibooks.org/wiki/Guide_to_X11/Window_Managers#Using_X11_Without_a_Window_Manager|この辺]]が掲載数が多くて良い。
 * awesome
  * タイル型の中ではメジャーな方。Luaによる設定が特徴。ソースは24k行くらい
  * C99。割と綺麗なコードだと思うが、プリプロセッサでコード生成したりLua関連のコードが混じっていたりで読むのは少し大変
  * 現状、XCBを使って書かれたWMとしては最も洗練されている感
 * dwm
  * タイル型。2000行程度ソースが1つしかないのでとっつきやすいが、細かく追おうとすると読みづらい。コメントも少なめ
  * C99使ってる
  * ICCCM/EWMH対応は最低限を抑えているといった感じ
 * evilwm
  * 名前の割にコードはすごく親切で読みやすい
  * EWMH対応が参考になる。ソースファイルが分割されていて(ewmh.c)、対応状況もテキストファイルにまとまっている
  * ウィンドウの装飾はないがちゃんとre-parentしている
 * monsterwm
  * dwmよりさらにコードが短いタイル型。スタイルはdwmに似ているが、よりシンプルな作りでコメントも豊富なので読みやすい
  * dwmから色々取っ払って部分的に機能を増した印象。ちゃんと読んでない
 * openbox
  * DEの一部になっているWMの中ではおそらく小さい方
  * 本体が3万行ほど、さらに周辺のライブラリやツールを加えれば5万行くらいあるか
 * twm
  * 古き良き堅牢なWM。設計というかポリシーが古いのは否めない。ルートウィンドウへの枠の描画あたりは参考になるか
  * X標準のWMなので、「twmがこうしてるから」という強力な言い訳に使える
 * tinywm
  * 最小。最低限何をすればいいかが分かる
 * winman
  * Xlib Programming Manual Volume Oneに載ってるサンプルコード。twmから色々な機能を除いた感じ?

= 日記 =
<<PageList(regex:clear/wm_devel/[0-9]{4}-[0-9]{2}-[0-9]{2})>>

ウィンドウマネージャ開発メモ

資料

Xlib

古くから用いられているXクライアント作成用のCのライブラリ。各種言語へのバインディングもある。いい加減古いライブラリなので今は推奨されていない(が、これで書かれているWMはそれなりに存在する)

とりあえず、カテゴリ別の詳しい仕様は以下のPDFが基本。

書籍もある。

  • Xlib Programming Manual Volume One
    • O'Reillyが動物本シリーズを出し始める前に手がけたものらしい。邦訳なし
    • 残念ながらX11R5対応の版(1994年)が最新なので、R6以降は要補完。また、各種の拡張についても触れられていない

      • 大学図書館の洋書架にX11R4対応版がある。あとJEDにもあった気がする(確か禁帯出)

    • Xlibを用いたプログラミングについて系統的に書かれている本はこれが唯一と言って良い。WMについても一章が割かれており、サンプルコードもある
    • Volume Twoは単なるXlibのリファレンスなので、上記のPDFで事足りる
    • どうやら何かのOSの/usr/docなりに入ってたか何かしたようで、何処かの誰かによってそれがそのままWeb上で公開されてたりもする(O'Reilly公式ではない)

その他、Xlibについては検索すればそれなりに出てくる。

XCB(X C Bindings)

Xlibを置き換えることを目的として作られた比較的新しめのライブラリ。Xlibよりダイレクトにプロトコルを扱う感じらしい(Xlibは裏で色々やってるが、XCBはプロトコルとAPIがほぼ一対一対応している)。(適切に使えば)Xlibよりかなりパフォーマンスが良い模様。また、Xlibは設計上マルチスレッド下での使用に問題がある(使えない訳ではない)が、XCBはマルチスレッドでも使える。

xcbはとにかく資料が少なくて辛い。そもそもlibxcbの実装自体がXMLで記述された仕様から自動生成されているらしいので、分からなかったらXプロトコルの仕様を読めばだいたいOK。

各種規格

UIについてX自体では規定されていないため、クライアント間通信は規格とは別にICCCMやEWMHで定められた約束事(コンベンション)に則ったものになる。例えば、全く別々のWMとタスクバーが協調動作しうるのは双方が同じ約束に従っているため。

Xは拡張が多い上に、現在の利用シーンではそれが当たり前となっているようなものが多いので個別に追う必要がある。

既存のWMに関するメモ

WMのリストはこの辺とかこの辺が掲載数が多くて良い。

  • awesome
    • タイル型の中ではメジャーな方。Luaによる設定が特徴。ソースは24k行くらい
    • C99。割と綺麗なコードだと思うが、プリプロセッサでコード生成したりLua関連のコードが混じっていたりで読むのは少し大変
    • 現状、XCBを使って書かれたWMとしては最も洗練されている感
  • dwm
    • タイル型。2000行程度ソースが1つしかないのでとっつきやすいが、細かく追おうとすると読みづらい。コメントも少なめ
    • C99使ってる
    • ICCCM/EWMH対応は最低限を抑えているといった感じ
  • evilwm
    • 名前の割にコードはすごく親切で読みやすい
    • EWMH対応が参考になる。ソースファイルが分割されていて(ewmh.c)、対応状況もテキストファイルにまとまっている
    • ウィンドウの装飾はないがちゃんとre-parentしている
  • monsterwm
    • dwmよりさらにコードが短いタイル型。スタイルはdwmに似ているが、よりシンプルな作りでコメントも豊富なので読みやすい
    • dwmから色々取っ払って部分的に機能を増した印象。ちゃんと読んでない
  • openbox
    • DEの一部になっているWMの中ではおそらく小さい方
    • 本体が3万行ほど、さらに周辺のライブラリやツールを加えれば5万行くらいあるか
  • twm
    • 古き良き堅牢なWM。設計というかポリシーが古いのは否めない。ルートウィンドウへの枠の描画あたりは参考になるか
    • X標準のWMなので、「twmがこうしてるから」という強力な言い訳に使える
  • tinywm
    • 最小。最低限何をすればいいかが分かる
  • winman
    • Xlib Programming Manual Volume Oneに載ってるサンプルコード。twmから色々な機能を除いた感じ?

日記

clear/wm_devel (最終更新日時 2013-06-24 01:16:30 更新者 clear)