身近な例としてLinuxで最も有名なGUIツールキットであるQt・GTKを考えると*1、これらのライブラリは
のどちらかを使ってフォントのレンダリングを行う*2。そのうちXのフォントシステムは
の2種類が存在し、またXフォントサーバは主に
の2種類が存在し、Xのモジュールは
の2種類が存在する。Xftは
とバージョンが2種類あり、それぞれ設定方法が異なる。
各ツールの特徴や設定方法については後述する。
Qt/GTK ━┳━ Xのフォント ━┳━ Xフォントサーバ ┃ システム ┃ ・xfs (TTCap 未対応) ┃ (Xサーバで動作) ┃ ・xfs-xtt (TTCap 対応) ┃ ┃ ┃ ┗━ モジュール ┃ ・freetype (OpenType対応、TTCap 未対応) ┃ ・xtt (OpenType未対応、TTCap 対応) ┃ ┗━ Xft (クライアントアプリケーションで動作) ・Xft1 ・Xft2+fontconfig
Xのフォントシステムは、Xサーバで動作する。Xのフォントシステムを用いてレンダリングを行った場合はアンチエイリアスができない。
Xフォントサーバを用いる利点としては
といったものがあるが、スタンドアローンで使う場合はオーバーヘッドが大きいためモジュールを使うほうがよい。
今どき素のxfsを使う人もいないだろうが、後述するxfs-xttと設定方法はほぼ同じである。
・XF86Configの設定
/etc/X11/XF86Config にフォントサーバを追加する。
FontPath "tcp/localhost:7100"
localhostは適宜変更のこと。セキュリティの都合上デフォルトでTCP接続を許可しない設定になっている場合があるので、そのときは
FontPath "unix/:7100"
とするか、/etc/X11/fs/config の
no-listen = tcp
をコメントアウトして
#no-listen = tcp port 7100
を加える。TCPを使うとCPUの使用効率がよくなるという例もあるが一般的に当てはまるかは不明。ローカルホスト以外でTCP接続を許可していない場合はどうするのか・・・
・/etc/X11/fs/config の設定
Xフォントサーバの設定ファイル(/etc/X11/fs/config) に、フォントファイルがあるディレクトリのパスを追加する。
catalogue = /usr/lib/X11/fonts/X-TT/,/usr/lib/X11/fonts/Type1/,/usr/X11R6/lib/X11/fonts/TrueType/
複数ある場合はパスをカンマで区切る。
・高速化のために
~/.xserverrc などに
#! /bin/sh exec X :0 -deferglyphs 16
のように記述すると、必要になったときに必要な文字だけレンダリングをするようになるため起動が早くなるようだ。
・fonts.dirの作成
以上でサーバの設定は終了したが、その他にフォント情報を記述したfonts.dirをフォントファイルと同じディレクトリに作成する必要がある。fonts.dir作成ツールとしてはmkttfdirやesemkfontdirなどがある。また、有名なフォントなら作成済みのfonts.dirが公開されていることがあるので検索してみるといいかもしれない。
基本的にxfsの場合と同じ設定である。サーバーのポート番号が7100 -> 7110に*3、設定ファイルが/etc/X11/fs/config -> /etc/X11/fs-xtt/configになっている。
xfsの機能をモジュールとしてXに組み込むことができる。モジュールを用いるとフォントサーバを使用する必要がない。スタンドアローンでフォントサーバを使うより軽快に動作するようだ。モジュールにはfreetypeとxttがあるが、それぞれ排他的であるので同時に使用できない。そのため使用したいフォントに応じてどちらを使うか選択する必要がある。
・XF86Configの設定
/etc/X11/XF86Config に
Load "xtt"
または
Load "freetype"
を加える。xttはTTCap拡張(プロポーショナルフォント展開速度アップ、自動イタリック生成、自動太文字生成など)をサポートしたTrueType、freetypeはTTCap拡張なしのTrueType、Type1、OpenType?に対応している。
・フォントパスの追加
次にフォントのあるディレクトリのパスを加える。/etc/X11/XF86Config に
FontPath "/usr/X11R6/lib/X11/fonts/TrueType/"
と記述するか、xsetコマンドを用いて
# xset +fp /usr/X11R6/lib/X11/fonts/TrueType/
とする。
・設定反映
設定ファイルを変更したときは
# xset fp rehash
で変更を有効にする。
・fonts.dirの作成
xfsと全く同じようにしてfonts.dirを作成する。
XftはFreeType? ラスタライザのインターフェイスおよびアンチエイリアス・サブピクセルレンダリングなどの拡張を行うライブラリである。XのフォントシステムがXサーバでレンダリングを行うのに対し、Xftはクライアントアプリケーション側でレンダリングを行う。Xftは将来的にはXに組み込まれることが期待されているらしい。クライアント側で動作するため、アプリケーションがXftに対応している必要がある。Xft対応のアプリケーションの代表的なものとしてGTK、Qt、Mozillaなどがある。
Xfree 4.2.x ではXft1を使用している。
・/etc/X11/XftConfig? の設定
Xft1の設定ファイルは /etc/X11/XftConfig? である。このファイルにフォントのあるディレクトリを追加する。
dir "/usr/X11R6/lib/X11/fonts/TrueType"
・XftCache?の作成
fonts.dirに相当する、Xft1のためのフォント情報ファイルはXftCache?である。これはxftcacheコマンドによって自動で生成することができる。
# xftcache /usr/X11R6/lib/X11/fonts/TrueType
引数を指定しない場合には/etc/X11/XftConfig?で設定されたすべてのディレクトリを探索する。引数にディレクトリを与えれば、他のディレクトリは処理しないので多少早くなる。どうやらディレクトリを再帰的にたどってくれるわけではないらしい。
Xfree 4.3.0 以降ではXft2+fontconfigを用いている。fontconfigとは、フォント管理とFreeType?の拡張としてアンチエイリアスやサブピクセルレンダリングを行うライブラリらしい。FreeType?の拡張なので、font自身のレンダリングを行うのはFreeType?である。しかしそうすると、Xft2の役目はなんだろうな*4?おそらくXft2はfontconfigのラッパーなのであろう。
・/etc/fonts/local.confの設定
元々は /etc/fonts/fonts.conf が設定ファイルであったが、これはfontconfigがアップデートされると書き換えられたりするため、ローカルな設定は /etc/fonts/local.conf に書くことが推奨されている。フォントを追加するにはこの設定ファイルにディレクトリのパスを追加すればよい。
<?xml version="1.0"?> <!DOCTYPE fontconfig SYSTEM "fonts.dtd"> <!-- /etc/fonts/local.conf file for local customizations --> <fontconfig> <dir>/usr/X11R6/lib/X11/fonts/TrueType</dir> </fontconfig>
Xft2の設定ファイルはXMLで記述されている。
・fonts.cache-1 の作成
Xft2において、Xフォントシステムのfonts.dir、Xft1のXftCache?に相当するフォント情報ファイルはfonts.cache-1である。これはfc-cacheコマンドで生成することができる。
# fc-cache -f -v /usr/X11R6/lib/X11/fonts/TrueType
fc-cache は指定したディレクトリを再帰的にたどる。また、fonts.cache-1 のフォント情報は何やらエンコードされているようなので、手作業での変更は無理だろう。ちなみにフォントが有効になっているかどうかはfc-listコマンドで確認することができる。
長々と書いてきたので、手順のみを簡単にまとめることにする。「フォントのパスを追加」はもちろん「パスが通っているディレクトリにフォントをコピー」でも同じことである。
また、「どれを使えばいいのか?」と言われればとりあえず「Load "xtt" と Xft2」と答えるかな。