2012年12月
12/19
Xにおけるフォントについて、ちゃんと理解していなかったのでまとめておく。
Xでフォントを扱う方法は大きく2つに分けられる。
- コアフォント(core font)
- 最初からあった方
サーバ上で文字描画が行われる。故にフォントはXサーバの動作しているマシンにある必要がある
- アンチエイリアスはできない
フォントはXLFD(xlsfontsで出てくる、初見では意味不明な文字列)で指定する
- Xサーバと別に「フォントサーバ」を立てることもできる
- Xft
- 後から出てきた方
クライアントが文字を描画する。故にフォントはクライアントの動作しているマシンにある必要がある
- 描画結果をラスタライズしたものをPixmapとしてサーバに描画してもらう形
- アンチエイリアスが可能
フォントそのものの扱いはFreeTypeとfontconfigによる
フォント一覧はfc-list
APIレベルで見るとさらに選択肢が分かれる。コアフォントの描画にはXlibやXCBのような低レイヤーのライブラリが使える。XftはXlibからは使えるが、調べた限りXCBからは使えなさそう(ライブラリ関数が見当たらない)。他に、GTK+の一部であるpangoを使うこともできる。pangoはレンダリングにXftとcairo(ベクタグラフィクスライブラリ)を使うことができるらしい。XlibならXftを直接叩けるが、XCBを使う場合はcairoを使うのが推奨されているらしい(cairo-xcbというのがあってPixmapを取り出せる。例えばi3はこれを用いていたはず)。ツールキットを使う場合も、GTK+なら言うまでもなくpangoを使うことになる(そして最終的にXftなりcairoを使う)だろうし、Qtの場合も内部で同様の仕組みが実装されているはず。
12/23追記: cairo単体でも文字列描画はできるらしい。
方式とライブラリの対応 Xlib -- core font, Xft XCB -- core font pango -- Xft `- cairo cairo
他にもOpenGLとかでは独自の方法があるだろう、多分。ライブラリそのものを指すのではない「Xft」は「Xサーバでなくクライアント側で描画を行い、フォントの管理をfontconfigで行う方式全般」と解釈した方が良さそうな気もする(最初はXftしか無かったので、同様の方式全般を指す言葉として「Xft」と書いている文章が多い)。
12/27
特定ウィンドウのイベントを監視
監視対象のウィンドウをクリックして指定する。
id=$(xwininfo | grep 'Window id' | cut -f 4 -d \ ) && xev -id $id