Size: 1957
Comment:
|
Size: 5378
Comment:
|
Deletions are marked like this. | Additions are marked like this. |
Line 1: | Line 1: |
= ウィンドウマネージャ開発メモ = == 動機 == * 毎日使って、それで暮らすものだからどうせなら自作したいね * X Window Systemの勉強には丁度いいかもね |
ウィンドウマネージャ開発メモ |
Line 6: | Line 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はそれなりに存在する) |
Line 29: | Line 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はそういうことをしない)。(適切に使えば)Xlibよりかなりパフォーマンスが良い模様。また、Xlibは設計上シングルスレッドでしか使えないが、XCBはマルチスレッド下でも使える。 * http://xcb.freedesktop.org/ xcbはとにかく資料が少なくて辛い。そもそもlibxcbの実装自体がXMLで記述された仕様から自動生成されているらしい * http://xcb.freedesktop.org/tutorial/ * チュートリアル * 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に関するメモ == * 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はそういうことをしない)。(適切に使えば)Xlibよりかなりパフォーマンスが良い模様。また、Xlibは設計上シングルスレッドでしか使えないが、XCBはマルチスレッド下でも使える。
xcbはとにかく資料が少なくて辛い。そもそもlibxcbの実装自体がXMLで記述された仕様から自動生成されているらしい
http://xcb.freedesktop.org/tutorial/
- チュートリアル
- 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に関するメモ
- 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/2011-08-13
- clear/wm_devel/2011-08-16
- clear/wm_devel/2011-08-16 (simple_client.png)
- clear/wm_devel/2011-08-23
- clear/wm_devel/2012-01-06
- clear/wm_devel/2012-04-25
- clear/wm_devel/2012-04-27
- clear/wm_devel/2012-04-30
- clear/wm_devel/2012-08-18
- clear/wm_devel/2012-09-05
- clear/wm_devel/2012-10-26
- clear/wm_devel/2012-10-26 (xenum.c)
- clear/wm_devel/2012-11-12
- clear/wm_devel/2012-12-11
- clear/wm_devel/2012-12-14
- clear/wm_devel/2012-12-23
- clear/wm_devel/2013-01-11
- clear/wm_devel/2013-01-14
- clear/wm_devel/2013-01-26
- clear/wm_devel/2013-02-09
- clear/wm_devel/2013-02-10
- clear/wm_devel/2013-02-11
- clear/wm_devel/2013-02-18
- clear/wm_devel/2013-02-19
- clear/wm_devel/2013-02-28
- clear/wm_devel/2013-03-02
- clear/wm_devel/2013-03-06
- clear/wm_devel/2013-03-08
- clear/wm_devel/2013-03-12
- clear/wm_devel/2013-03-12 (net_wm_strut.jpg)