2016年3月7日月曜日

fontconfigの設定

Linuxでのフォント設定はfontconfigによって行われています。

fontconfigは、自動でその文字を表示できるようにフォントを選んでくれるのですが、フォントが複数ある場合自分の思うようにフォントが表示されないことがあります。

今回は、Noto Fontsをシステム標準のフォントに設定します。



一般的にはテーマからフォントの指定などを行うのが一般的だと思いますが、中にはそれに従わないアプリケーションもあります。

例えば、Firefoxではインターフェイスはデスクトップ環境のフォント設定に従うのですが、Webページのほうはフォントが指定されています。





Linuxでは一般的に明朝体にserif,ゴシック体にsans,等幅フォントにmonospaceが初期設定になっています。

fontconfigは、日本語フォントがあるとこれらのフォントを置き換えてくれます。

fontconfigはVLゴシックやipaフォントなどのメジャーなフォントは自動で標準のフォントに設定してくれるようになっていますが、Noto Fontsなどの新しいフォントやマイナーなフォントは自動では設定してくれません。

その、優先順位は/etc/fonts/font.avail/65-nonlatin.conf に記述されており、fontconfigはそれに従います。

この順序は今のところ、日本語フォントだけを抽出すると MSゴシック>梅ゴシック>VLゴシック>IPAMona>IPAゴシック>さざなみゴシック>東風ゴシック というようになっています。

このファイルを直接書き換えても良いのですが、fontconfigのアップデートで書き換えられてしまったり、アップデートに追従できなくなる恐れがあります。

fontconfigの設定を手動で書き換えたい場合、 /etc/fonts/local.conf にその内容を記述することで有効化することができます。フォント設定として、local.conf は最優先されます。

local.conf に、serifはNoto Serif、sansはNoto Sans、monospaceはNoto Mono、と明示的に設定することで、アプリケーションごとに統一したフォントを利用できます。



Noto Fontsのインストール
$ cd /tmp
$ wget https://noto-website-2.storage.googleapis.com/pkgs/Noto-hinted.zip
$ unzip -d /usr/share/fonts/Noto-hinted Noto-hinted.zip
$ sudo chmod u+rw go+r /usr/share/fonts/Noto-hinted/*
$ fc-cache -vf



設定ファイルの作成

システム全体の設定をするなら /etc/fonts/local.conf 、ユーザーごとなら ~/.config/fontconfig/fonts.conf を編集します。フォントの設定をしていないならファイルがないので新規に作成します。
$ sudo vi /etc/fonts/local.conf

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
    <alias>
        <family>serif</family>
        <prefer>
            <family>Noto Serif</family>
        </prefer>
    </alias>
    <alias>
        <family>sans-serif</family>
        <prefer>
            <family>Noto Sans</family>
            <family>Noto Sans CJK JP</family>
        </prefer>
    </alias>
    <alias>
        <family>monospace</family>
        <prefer>
            <family>Noto Sans Mono CJK JP</family>
        </prefer>
    </alias>
</fontconfig>

この設定だと、sansは Noto Sans→Noto Sans CJK JP→fontconfigに任せる というように参照してくれます。




Noto Fontsは大丈夫ですが、IPAフォントなどで日本語フォントの表示が汚い場合、ヒンディングと埋め込みビットマップの無効化を行う必要があります。

/etc/fonts/conf.avail/内に設定ファイルがいろいろあるので、/etc/fonts/conf.d/内に設定ファイルのシンボリックリンクを置くことで有効化されます。



最終的にlocal.confはこうなりました。
<?xml version='1.0'?>
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
<fontconfig>
    <match target="font">
        <edit mode="assign" name="antialias">
            <bool>true</bool>
        </edit>
        <edit mode="assign" name="embeddedbitmap">
            <bool>false</bool>
        </edit>
        <edit mode="assign" name="hinting">
            <bool>true</bool>
        </edit>
        <edit mode="assign" name="hintstyle">
            <const>hintnone</const>
        </edit>
        <edit name="hintstyle" mode="assign">
            <const>hintfull</const>
        </edit>
        <edit mode="assign" name="lcdfilter">
            <const>lcddefault</const>
        </edit>
        <edit name="lcdfilter" mode="assign">
            <const>lcddefault</const>
        </edit>
        <edit mode="assign" name="rgba">
            <const>rgb</const>
        </edit>
    </match>
    <alias>
        <family>serif</family>
        <prefer>
            <family>Noto Serif</family>
        </prefer>
    </alias>
    <alias>
        <family>sans-serif</family>
        <prefer>
            <family>Noto Sans</family>
            <family>Noto Sans CJK JP</family>
        </prefer>
    </alias>
    <alias>
        <family>monospace</family>
        <prefer>
            <family>Noto Sans Mono CJK JP</family>
        </prefer>
    </alias>
</fontconfig>






ファイル保存後リアルタイムに反映されるはずですが、反映されない場合は再起動します。


0 件のコメント:

コメントを投稿