2004年1月12日月曜日

Debian GNU/Linux, X や Mozilla で TrueTypeフォントを使う

TrueTypeフォントに奮闘(もじらで使おうTTフォント)

今まで筆者は xfs(X Font Server かな?) を使いビットマップフォントだけを使用していた。 だが、もじらでTrueTypeフォントを使いたくなってしまったため、急きょTrueTypeフォントの東風フォントを導入することにした。

まずフォントファイル(*.ttf)をもらってこなくてはならない。 とりあえず yasu さんのホームページ(Xttp://www.on.cs.keio.ac.jp/~yasu/jp_fonts.html)から東風明朝フォントと、東風ゴシックフォントの二つを頂いてくる。
次にそれを解凍して、 *.ttf ファイル(フォントファイル)と fonts.dir.xtt ファイルを /usr/lib/X11/fonts/truetype_jp というディレクトリへコピーした。 その際、fonts.dir.xtt を fonts.dir と名称変更をしておく。
このパスを見れば想像がつくかもしれないが、ファイルのコピーにはrootの権限が必要になる。 個人的に楽しむ目的ならばroot権限でフォントを導入する必要は全くないだろうから、一般ユーザのホームディレクトリ以下にこれらを置いておいても問題はないだろう。
ここでは /usr/lib/X11/fonts/truetype_jp にフォントファイルを置いたと仮定して話を進めていく。

$ tar jxvf kochi-mincho-0.2.20020727.tar.bz2
$ tar jxvf kochi-gothic-0.2.20020727.tar.bz2
# cp kochi-mincho/fonts/kochi-mincho.ttf /usr/lib/X11/fonts/truetype_jp/
# cp kochi-gothic/fonts/kochi-gothic.ttf /usr/lib/X11/fonts/truetype_jp/
# cp kochi-gothic/examples/fonts.dir.xtt /usr/lib/X11/fonts/truetype_jp/fonts.dir
$ cat /usr/lib/X11/fonts/truetype_jp/fonts.dir
16
kochi-mincho.ttf -kochi-mincho-medium-r-normal--0-0-0-0-c-0-jisx0208.1983-0
ds=y:kochi-mincho.ttf -kochi-mincho-bold-r-normal--0-0-0-0-c-0-jisx0208.1983-0
ai=0.15:kochi-mincho.ttf -kochi-mincho-medium-i-normal--0-0-0-0-c-0-jisx0208.1983-0
ds=y:ai=0.15:kochi-mincho.ttf -kochi-mincho-bold-i-normal--0-0-0-0-c-0-jisx0208.1983-0
bw=0.5:kochi-mincho.ttf -kochi-mincho-medium-r-normal--0-0-0-0-c-0-jisx0201.1976-0
bw=0.5:ds=y:kochi-mincho.ttf -kochi-mincho-bold-r-normal--0-0-0-0-c-0-jisx0201.1976-0
bw=0.5:ai=0.15:kochi-mincho.ttf -kochi-mincho-medium-o-normal--0-0-0-0-c-0-jisx0201.1976-0
bw=0.5:ds=y:ai=0.15:kochi-mincho.ttf -kochi-mincho-bold-o-normal--0-0-0-0-c-0-jisx0201.1976-0
bw=0.5:kochi-mincho.ttf -kochi-mincho-medium-r-normal--0-0-0-0-c-0-iso8859-1
bw=0.5:ai=0.15:kochi-mincho.ttf -kochi-mincho-medium-i-normal--0-0-0-0-c-0-iso8859-1
bw=0.5:ds=y:kochi-mincho.ttf -kochi-mincho-bold-r-normal--0-0-0-0-c-0-iso8859-1
bw=0.5:ds=y:ai=0.15:kochi-mincho.ttf -kochi-mincho-bold-i-normal--0-0-0-0-c-0-iso8859-1
kochi-gothic.ttf -kochi-gothic-medium-r-normal--0-0-0-0-c-0-jisx0208.1983-0
ds=y:kochi-gothic.ttf -kochi-gothic-bold-r-normal--0-0-0-0-c-0-jisx0208.1983-0
ai=0.15:kochi-gothic.ttf -kochi-gothic-medium-i-normal--0-0-0-0-c-0-jisx0208.1983-0
ds=y:ai=0.15:kochi-gothic.ttf -kochi-gothic-bold-i-normal--0-0-0-0-c-0-jisx0208.1983-0
bw=0.5:kochi-gothic.ttf -kochi-gothic-medium-r-normal--0-0-0-0-c-0-jisx0201.1976-0
bw=0.5:ds=y:kochi-gothic.ttf -kochi-gothic-bold-r-normal--0-0-0-0-c-0-jisx0201.1976-0
bw=0.5:ai=0.15:kochi-gothic.ttf -kochi-gothic-medium-o-normal--0-0-0-0-c-0-jisx0201.1976-0
bw=0.5:ds=y:ai=0.15:kochi-gothic.ttf -kochi-gothic-bold-o-normal--0-0-0-0-c-0-jisx0201.1976-0
bw=0.5:kochi-gothic.ttf -kochi-gothic-medium-r-normal--0-0-0-0-c-0-iso8859-1
bw=0.5:ai=0.15:kochi-gothic.ttf -kochi-gothic-medium-i-normal--0-0-0-0-c-0-iso8859-1
bw=0.5:ds=y:kochi-gothic.ttf -kochi-gothic-bold-r-normal--0-0-0-0-c-0-iso8859-1
bw=0.5:ds=y:ai=0.15:kochi-gothic.ttf -kochi-gothic-bold-i-normal--0-0-0-0-c-0-iso8859-1

次に、TrueTypeフォントを扱うためのxfs-xttサーバが入ってない(!)ので、インストールする。 今後は xfs に代わって xfs-xtt を介してフォントを表示させていくこととなる。

# apt-get install xfs-xtt

インストール中にいろいろメッセージが出るのだが、おそらく一番重要なのは3番目にでるものだろう。 以下にそれらのメッセージを挙げる。

  +-------------------------- Configuring Xfs-xtt ---------------------------+
  x                                                                          x 
  x xfs-xtt serves fonts using 100 dpi resolution                            x 
  x                                                                          x 
  x You should be aware that, by default, xfs-xtt (the X Font Server with    x 
  x X-TrueType) preferentially delivers fonts to clients using a resolution  x 
  x of 100 dots per inch.  This affects the visible font size.  Another      x 
  x common default is 75 dpi; some font rasterizers do not deal well with    x 
  x other dpi settings.                                                      x 
  x                                                                          x 
  x This setting can be changed by editing /etc/X11/fs-xtt/config.  See the  x 
  x xfs-xtt(1) manual page for more information.                             x 
  x                                                                          x 
  x                                  <Ok>                                    x 
  x                                                                          x 
  +--------------------------------------------------------------------------+
                                                                               
  +-------------------------- Configuring Xfs-xtt ---------------------------+
  x                                                                          x 
  x xfs-xtt does not listen on TCP port by default                           x 
  x                                                                          x 
  x Because xfs-xtt (the X Font Server with X-TrueType) is a daemon that     x 
  x runs with superuser privileges, by default it runs with TCP port         x 
  x listening disabled as a security measure.  This means that, as shipped,  x 
  x xfs-xtt is not reachable via the network and is unable to to serve       x 
  x fonts to X servers running on remote hosts.  Most people do not need to  x 
  x enable TCP port listening in xfs-xtt; it can serve fonts to local X      x 
  x servers without this functionality enabled.                              x 
  x                                                                          x 
  x xfs-xtt can be configured to remote X servers by appropriately editing   x 
  x /etc/X11/fs-xtt/config.  See the xfs-xtt(1) manual page for more         x 
  x information.                                                             x 
  x                                                                          x 
  x                                  <Ok>                                    x 
  x                                                                          x 
  +--------------------------------------------------------------------------+
                                                                              
  +-------------------------- Configuring Xfs-xtt ---------------------------+
  x                                                                          x 
  x xfs-xtt use 7110 port insted of 7100                                     x 
  x                                                                          x 
  x xfs-xtt would use 7110 insted of 7100 default, xfs-xtt does not          x 
  x conflict original xfs. So, if you installed xfs-xtt (1.3.0.1-15 or       x 
  x earlyer) previous and will not install xfs, you should modify font path  x 
  x in XF86Config, like this:                                                x 
  x                                                                          x 
  x FontPath "unix/:7100" ->  FontPath "unix/:7110"                          x 
  x                                                                          x 
  x                                  <Ok>                                    x 
  x                                                                          x 
  +--------------------------------------------------------------------------+
  
  +-------------------------- Configuring Xfs-xtt --------------------------+
  x                                                                         x 
  x xfs-xtt use /etc/X11/fs-xtt for config files                            x 
  x                                                                         x 
  x Older version of xfs-xtt (1.3.0.1-15 or earlyer) used /etc/X11/xfs for  x 
  x config files. Now this version uses /etc/X11/fs-xtt directory. So, you  x 
  x can use both xfs and xfs-xtt at the same time on the same machine.      x 
  x                                                                         x 
  x                                 <Ok>                                    x 
  x                                                                         x 
  +-------------------------------------------------------------------------+

3番目のメッセージでは、
「xfs-xttはポート7100からポート7110を使うようになるのでXF86Configファイルを編集しておくよう」注意を促している。
筆者の環境では /etc/X11/XF86Config-4 が X の起動時に使われるファイルとなっているので、それを編集した。
その他にも、フォントパスを追加したり、モジュールとしてxttを組み込むよう書き込んでいる。
以下に筆者の /etc/X11/XF86Config-4 の内容(一部)を示す。 強調部分が編集対象部分だ。

     :
     :
Section "Files"
#       FontPath        "unix/:7100"                    # local font server
        FontPath        "unix/:7110"                    # for XTTserver
        # if the local font server has problems, we can fall back on these
        FontPath        "/usr/lib/X11/fonts/misc"
        FontPath        "/usr/lib/X11/fonts/cyrillic"
        FontPath        "/usr/lib/X11/fonts/100dpi/:unscaled"
        FontPath        "/usr/lib/X11/fonts/75dpi/:unscaled"
        FontPath        "/usr/lib/X11/fonts/Type1"
        FontPath        "/usr/lib/X11/fonts/Speedo"
        FontPath        "/usr/lib/X11/fonts/100dpi"
        FontPath        "/usr/lib/X11/fonts/75dpi"
        FontPath        "/usr/lib/X11/fonts/japanese"
        FontPath        "/usr/lib/X11/fonts/truetype_jp"
EndSection

Section "Module"
        Load    "GLcore"
        Load    "bitmap"
        Load    "ddc"
        Load    "dri"
        Load    "extmod"
#       Load    "freetype"
        Load    "xtt"
        Load    "glx"
        Load    "int10"
        Load    "pex5"
        Load    "record"
        Load    "speedo"
        Load    "type1"
        Load    "vbe"
        Load    "xie"
EndSection
     :
     :

編集が終わったら、

$ /etc/init.d/xfs stop
$ /etc/init.d/xtt-xfs restart

などでxtt-xfsデーモンを立ち上げてみよう。

xfontselで kochi が加わったか確認してみる。
xfontselは、xfontselとシェルに打ち込めば上がるはずだ。
xfontselイメージ
文字が表示されていれば、他の場所(もじらなど)でも表示できるはずだ。

よくわからないけど・・・・。
xdmを使う際、
/etc/X11/xdm/Xservers というファイル内に
:0 local /usr/X11R6/bin/X vt7 -deferglyphs 16
のように書くと X に -deferglyphs all オプションつきで起動ができるとのこと。 これがないと X が固まるとの噂が・・・・。 だが筆者は特にこれを有効にしていないが、問題なく xdm から X が上がるのだが・・・・。

見くらべてみよーう。
ビットマップフォントのモナーフォント、TrueTypeフォントの東風フォントを使った際の例を以下に示す。

(フォント画像1) モナーフォントのとき
文字を縮小すればつぶれてしまい、
拡大すればカクカクが目立ってしまう
(フォント画像2) 東風フォントをそのまま指定
フォントサイズによっては
意外と荒さが目立ってしまう
(フォント画像3) 東風フォントにアンチエイリアスをかけた場合
より美しく表示、実にきれい(下記参照)

さらにもじらでこだわってみた。(上画像参照) せっかくTrueTypeフォントを使っているのだから、フォントにアンチエイリアスをかましてよりきれいに表示させてみたい。 なにやら、アンチエイリアスをかますことで、文字色の中間色を使用し文字曲面などのギザギザを目立たなくしてくれるというのだ。
なお筆者は mozilla ver.1.0.1(日本語化パック)を使用している。

$HOME/.mozilla/user_name/random.slt/user.js に次のように書き込んだ。(とはいえ、これもどっかからの写しで恐縮だが・・・・(ぉぃ))

// it is best to leave hinting off
user_pref("font.FreeType2.autohinted", false);
user_pref("font.FreeType2.unhinted", false);
// below a certian pixel size anti-aliased fonts produce poor results
user_pref("font.antialias.min",        8);
user_pref("font.embedded_bitmaps.max", 100000);
user_pref("font.scale.tt_bitmap.dark_text.min", 32);
user_pref("font.scale.tt_bitmap.dark_text.gain", "0.1");
// sample prefs for TrueType font dirs
user_pref("font.directory.truetype.1", "/usr/X11R6/lib/X11/fonts/Type1");
user_pref("font.directory.truetype.2", "/usr/X11R6/lib/X11/fonts/truetype_jp");

最後のほうにある /usr/X11R6/lib/X11/fonts/truetype_jp の下にはTrueTypeフォントが入っている。 この部分は、人それぞれに違うであろうから、丸写しをしても意味はないかと思われる。
### もちろん、もうすでにFontPathにこのディレクトリが指定されている。
書き込んで以降、もじらを起動すると、フォントのアンチエイリアスが可能となる。

メニューバー → 編集(E) → 設定(E)...

を選択し、設定ダイアログをあげる。

設定ダイアログ内のカテゴリから「表示」をダブルクリック → カテゴリの「フォント」をクリックする

とフォント変更ができるようになる。

東風フォントの場合では

Take-kochi gothic-jisx0208.1990-0
Take-kochi mincho-jisx0208.1990-0

のような、フォントが選択できるようになっている。
この最初の一文字が大文字のフォント「アンチエイリアス可」を表しているらしいのだ。 これらのフォントをいつも通り選択してやればよい。 実に楽々だ。

追記(8.Jan 2003)
もじらでフォントにアンチエイリアスをかけると、 フォントを太字にしたり斜体にしたりしても反映されない。
しかしアンチエイリアスをかけないようなフォントを選ぶと、 ちゃんと太字や斜体がちゃんと選択され、表示されたりする。
TrueTypeフォントと同じディレクトリにある fonts.dir の書き方がおかしいのか。
はたまた、これがもじらの限界なのだろうか。
情報求む。

追記(17.Jan 2003)
もじらで、東風フォントにアンチエイリアスをかけずに使用したとき、 全角文字は太字・斜体を表現できるのだが、半角(アスキー)文字は太字・斜体にならない。
しかし、なぜか fonts.dir を以下のように書き換えたらそれなりにうまくいった。
この fonts.dir は東風フォント+和田研フォント+渡辺明朝フォントのフォントデータといっしょに /usr/X11R6/lib/X11/fonts/truetype_jp/ の中に置いてある。
書き換えたら xset fp rehash コマンドでも打てばすぐに反映されるかも。

36
wadalab-gothic.ttf -wadalab-gothic-medium-r-normal--0-0-0-0-c-0-jisx0208.1983-0
wadalab-gothic.ttf -wadalab-gothic-medium-r-normal--0-0-0-0-c-0-iso8859-1
wadalab-gothic.ttf -wadalab-gothic-medium-r-normal--0-0-0-0-p-0-jisx0208.1983-0
wadalab-gothic.ttf -wadalab-gothic-medium-r-normal--0-0-0-0-p-0-iso8859-1
wadalab-gothic.ttf -wadalab-gothic-medium-r-normal--0-0-0-0-m-0-jisx0208.1983-0
wadalab-gothic.ttf -wadalab-gothic-medium-r-normal--0-0-0-0-m-0-iso8859-1
watanabe-mincho.ttf -watanabe-mincho-medium-r-normal--0-0-0-0-c-0-jisx0208.1983-0
watanabe-mincho.ttf -watanabe-mincho-medium-r-normal--0-0-0-0-c-0-iso8859-1
watanabe-mincho.ttf -watanabe-mincho-medium-r-normal--0-0-0-0-p-0-jisx0208.1983-0
watanabe-mincho.ttf -watanabe-mincho-medium-r-normal--0-0-0-0-p-0-iso8859-1
watanabe-mincho.ttf -watanabe-mincho-medium-r-normal--0-0-0-0-m-0-jisx0208.1983-0
watanabe-mincho.ttf -watanabe-mincho-medium-r-normal--0-0-0-0-m-0-iso8859-1
kochi-mincho.ttf -kochi-mincho-medium-r-normal--0-0-0-0-c-0-jisx0208.1983-0
ds=y:kochi-mincho.ttf -kochi-mincho-bold-r-normal--0-0-0-0-c-0-jisx0208.1983-0
ai=0.15:kochi-mincho.ttf -kochi-mincho-medium-i-normal--0-0-0-0-c-0-jisx0208.1983-0
ds=y:ai=0.15:kochi-mincho.ttf -kochi-mincho-bold-i-normal--0-0-0-0-c-0-jisx0208.1983-0
eb=y:kochi-mincho.ttf -kochi-mincho-medium-r-normal--0-0-0-0-p-0-jisx0201.1976-0
eb=y:ds=y:kochi-mincho.ttf -kochi-mincho-bold-r-normal--0-0-0-0-p-0-jisx0201.1976-0
eb=y:ai=.2:kochi-mincho.ttf -kochi-mincho-medium-i-normal--0-0-0-0-p-0-jisx0201.1976-0
eb=y:ds=y:ai=.2:kochi-mincho.ttf -kochi-mincho-bold-i-normal--0-0-0-0-p-0-jisx0201.1976-0
bw=0.5:kochi-mincho.ttf -kochi-mincho-medium-r-normal--0-0-0-0-c-0-iso8859-1
bw=0.5:ai=0.15:kochi-mincho.ttf -kochi-mincho-medium-i-normal--0-0-0-0-c-0-iso8859-1
bw=0.5:ds=y:kochi-mincho.ttf -kochi-mincho-bold-r-normal--0-0-0-0-c-0-iso8859-1
bw=0.5:ds=y:ai=0.15:kochi-mincho.ttf -kochi-mincho-bold-i-normal--0-0-0-0-c-0-iso8859-1
kochi-gothic.ttf -kochi-gothic-medium-r-normal--0-0-0-0-c-0-jisx0208.1983-0
ds=y:kochi-gothic.ttf -kochi-gothic-bold-r-normal--0-0-0-0-c-0-jisx0208.1983-0
ai=0.15:kochi-gothic.ttf -kochi-gothic-medium-i-normal--0-0-0-0-c-0-jisx0208.1983-0
ds=y:ai=0.15:kochi-gothic.ttf -kochi-gothic-bold-i-normal--0-0-0-0-c-0-jisx0208.1983-0
eb=y:kochi-gothic.ttf -kochi-gothic-medium-r-normal--0-0-0-0-p-0-jisx0201.1976-0
eb=y:ds=y:kochi-gothic.ttf -kochi-gothic-bold-r-normal--0-0-0-0-p-0-jisx0201.1976-0
eb=y:ai=.2:kochi-gothic.ttf -kochi-gothic-medium-i-normal--0-0-0-0-p-0-jisx0201.1976-0
eb=y:ds=y:ai=.2:kochi-gothic.ttf -kochi-gothic-bold-i-normal--0-0-0-0-p-0-jisx0201.1976-0
bw=0.5:kochi-gothic.ttf -kochi-gothic-medium-r-normal--0-0-0-0-c-0-iso8859-1
bw=0.5:ai=0.15:kochi-gothic.ttf -kochi-gothic-medium-i-normal--0-0-0-0-c-0-iso8859-1
bw=0.5:ds=y:kochi-gothic.ttf -kochi-gothic-bold-r-normal--0-0-0-0-c-0-iso8859-1
bw=0.5:ds=y:ai=0.15:kochi-gothic.ttf -kochi-gothic-bold-i-normal--0-0-0-0-c-0-iso8859-1

東風フォントの中でも、半角文字の jisx0201.1976 をプロポーショナルフォントとして名付ける感じ(?
上の例の東風フォント(明朝・ゴシック)の jisx0201.1976 のとこだけ p とし、他は c (等倍たっけ?)になってしまった。 全角文字の jisx0208.1983 のほうも p としてもよいが、表示がすごく遅くなってしまった。
ああ、アンチエイリアスのかかったきれいなフォントを使いたいなあ。

なお、そもそも xfontsel で東風フォントを表示させたときに pxlsz のところの選択肢が * と 0 と 17 の3つしかなかった、ということが判明。
学校(そらりす2.6)のモリサワフォントを xfontsel で見てきたところ、pxlszのところの選択肢が多くて、下は 2 、上は 48 くらいまで選べるではないか。 この問題には xserver やらが関わってきてとってもめんどそう。
→xttp://search.luky.org/vine-users.3/msg04150.html(参照)
xfontselの pxlsz選択肢 が全部選択可能でない限りは、アンチエイリアスどころではないのかもしれない。
ヽ(`Д´)ノウワーン