フォント設定
Fontconfig はアプリケーションに利用できるフォントのリストを提供し、フォントのレンダリングの設定をするために作られたライブラリです。fontconfig パッケージや Wikipedia:ja:Fontconfig を見て下さい。Free type ライブラリ (freetype2 パッケージ) はこの設定に基づいてフォントを描写します。
今日の Linux の標準は Fontconfig ですが、アプリケーションによっては未だにフォントの選択と表示に X Logical Font Description を使っているものもあります。
Arch Linux のフォントレンダリングパッケージには freetype2 のサポートが含まれており バイトコードインタプリタ (BCI) が有効になっています。LCD モニターでより良いフォントレンダリングを行うためのパッチがあてられたパッケージも存在します。#パッチがあてられているパッケージ を見て下さい。Infinality パッケージは自動ヒンティングとサブピクセルレンダリング、リコンパイル不要の LCD フィルター調整、太字フォントの auto-hinter が可能です。
目次
- 1 フォントパス
- 2 Fontconfig 設定
- 3 パッチがあてられているパッケージ
- 4 fontconfig をサポートしていないアプリケーション
- 5 トラブルシューティング
- 6 参照
フォントパス
アプリケーションからフォントを使えるようにするには、迅速かつ容易にアクセスできるようフォントを一覧表に入れる必要があります。
最初から Fontconfig が利用するフォントパスは /usr/share/fonts/
や ~/.local/share/fonts
です (~/.fonts/
もありますが、非推奨となっています)。これらのフォルダを Fontconfig は再帰的にスキャンします。管理とインストールを簡単にするために、フォントを追加する際にはこのフォントパスを使うのが推奨されます。
Fontconfig が認識しているフォントの一覧を表示するには:
$ fc-list : file
出力のフォーマットについては man fc-list
を見て下さい。
Xorg が利用しているフォントパスを確認するには Xorg のログを見て下さい:
$ grep /fonts /var/log/Xorg.0.log
Fontconfig とは違い、Xorg は /usr/share/fonts/
ディレクトリを再帰的に調べないことに注意してください。パスを追加するときは、フルパスを使ってください:
Section "Files" FontPath "/usr/share/fonts/local/" EndSection
フォントパスをユーザーごとに設定したい場合は、以下のように ~/.xinitrc
に追記することでフォントパスを追加・削除できます:
xset +fp /usr/share/fonts/local/ # Prepend a custom font path to Xorg's list of known font paths xset -fp /usr/share/fonts/sucky_fonts/ # Remove the specified font path from Xorg's list of known font paths
Xorg が認識しているフォントの一覧を表示するには、xorg-xlsfonts パッケージに入っている xlsfonts
を使って下さい。
Fontconfig 設定
Fontconfig については fonts-conf の man ページで説明されています。
設定は $XDG_CONFIG_HOME/fontconfig/fonts.conf
を使ってユーザーごとに行うことも、/etc/fonts/fonts.conf
で全体的に設定することもできます。ユーザー別の設定はグローバルの設定よりも優先されます。これらのファイルは同じ構文を使っています。
Fontconfig は全ての設定を一つの中心ファイル (/etc/fonts/fonts.conf
) に集めます。このファイルは fontconfig がアップデートしたときに置き換えられるので編集してはいけません。Fontconfig に対応したアプリケーションはこのファイルを読み込んで利用できるフォントとレンダリング方法を知ります。このファイルは、全体的な設定 (/etc/fonts/fonts.conf
) と /etc/fonts/conf.d/
の設定済みプリセット、そしてユーザーの設定ファイル ($XDG_CONFIG_HOME/fontconfig/fonts.conf
) に書かれたルールの寄せ集めです。fc-cache
を使うことで fontconfig の設定をリビルドできます、ただし変更は新しく起動したアプリケーションにのみ適用されます。
Fontconfig の設定ファイルは XML 形式で、以下のヘッダーが必要になります:
<?xml version="1.0"?> <!DOCTYPE fontconfig SYSTEM "fonts.dtd"> <fontconfig> <!-- settings go here --> </fontconfig>
この記事で出てくる設定例ではこれらのタグは省略しています。
プリセット
プリセットは /etc/fonts/conf.avail
ディレクトリにインストールされています。/etc/fonts/conf.d/README
に記述されているように、シンボリックリンクを作成することで、ユーザーごと・全体的に、プリセットの設定を有効にすることが可能です。これらのプリセットは個別の設定ファイルの設定を上書きします。
例えば、サブピクセル RGB レンダリングを全体的に有効にするには:
# cd /etc/fonts/conf.d # ln -s ../conf.avail/10-sub-pixel-rgb.conf
ユーザーごとの設定として同じことをするには:
$ mkdir $XDG_CONFIG_HOME/fontconfig/conf.d $ ln -s /etc/fonts/conf.avail/10-sub-pixel-rgb.conf $XDG_CONFIG_HOME/fontconfig/conf.d
アンチエイリアス
フォントラスタライズとはベクター形式のフォントデータをビットマップのデータに変換して表示することです。結果としてエイリアシングによってジャギーが発生することがあります。アンチエイリアスがデフォルトで有効になっており、フォントのエッジの見た目の解像度を増しています。
<match target="font"> <edit name="antialias" mode="assign"> <bool>true</bool> </edit> </match>
ヒンティング
フォントヒンティング (instructing とも呼ばれます) は数学的な情報を使ってアウトラインフォントの表示を調整し、ディスプレイのピクセルグリッドと同じように、ラスタライズされたグリッドにフォントを並べる技術です。フォントの見た目をハッキリとさせることで読みやすくなるような効果を生みます。ディスプレイが 300 DPI ではない場合ヒンティングがないとフォントを正しく並べることはできません。ヒンティングは2つのタイプが利用できます。
バイトコードインタプリタ (BCI)
BCI ヒンティングを使うと、TrueType のフォントは FreeTypes の Byte-Code Interpreter によってフォントがレンダリングされます。正しいヒンティング情報があるフォントでは BCI ヒンティングが良く機能します。ヒンティングを有効にするには:
<match target="font"> <edit name="hinting" mode="assign"> <bool>true</bool> </edit> </match>
Autohinter
Autohinter は既存のヒンティング情報を無視して自動ヒンティングを実行します。TrueType2 がパテントで保護されていたため昔はデフォルトでしたが、パテントの有効期限が切れたので現在は使う意味がほとんどなくなっています。情報が少なかったり無かったりするフォントでは見た目が良くなりますが、ヒント情報があるフォントではかなり見た目が悪くなります。普通のフォントは後者なので autohinter はあまり役に立ちません。自動ヒンティングを有効にするには:
<match target="font"> <edit name="autohint" mode="assign"> <bool>true</bool> </edit> </match>
ヒントスタイル
ヒントスタイルはヒンティングモードの影響力の強さを示します。ヒンティングの強さは次のどれかに設定できます: hintfull
, hintmedium
, hintslight
, hintnone
。hintslight
はフォントをあいまいにしますがフォントの形は維持されます。一方、hintfull
はピクセルグリッドに上手く整列するハッキリとしたフォントになりますがフォントの形は大きく変わってしまいます。好みは人によって好きずきです。
<match target="font"> <edit name="hintstyle" mode="assign"> <const>hintfull</const> </edit> </match>
サブピクセルレンダリング
今日ではほとんどのモニターは赤・緑・青 (RGB) の並びを使っています。フォントを正しく表示するために、Fontconfig にあなたのモニターのタイプを知らせる必要があります。モニターのタイプは以下のどれかになります: RGB (最も一般的), BGR, V-RGB (vertical), V-BGR。ここ でモニターのテストをすることが可能です。
サブピクセルレンダリングを有効にするには:
<match target="font"> <edit name="rgba" mode="assign"> <const>rgb</const> </edit> </match>
LCD フィルター
サブピクセルレンダリングを使う場合、色縁を減らす LCD フィルターを有効にするべきです。FreeType 2 API リファレンスの LCD filtering にこのフィルターの説明があります。また、FT_LcdFilter にオプションの説明があり、LCD filter test にそれぞれのオプションを使って実際に表示したサンプルがあります
ほとんどのユーザーにとっては lcddefault
フィルターが具合が良いでしょう。他のフィルターは特別な事情がある場合に使えます: lcdlight
は明るいフィルターで、太すぎたりぼやけているフォントに向いています。lcdlegacy
はオリジナルの Cairo フィルターです。lcdnone
はフィルターを完全に無効にします。
<match target="font"> <edit mode="assign" name="lcdfilter"> <const>lcddefault</const> </edit> </match>
高度な LCD フィルター設定
内蔵の LCD フィルターで満足しない時は、freetype2 のカスタムパッケージをビルドしてハードコードされたフィルターを修正することでフォントレンダリングを調整することが可能です。Arch Build System を使えばソースからパッケージをビルド・インストールできます。
まず、root で freetype2 の PKGBUILD を更新してください:
# abs extra/freetype2
この例ではビルドディレクトリに /var/abs/build
を使っています、あなたの ABS セットアップにあわせて置き換えてください。通常ユーザーで freetype2 パッケージをダウンロード・展開します:
$ cd /var/abs/build $ cp -r ../extra/freetype2 . $ cd freetype2 $ makepkg -o
src/freetype-VERSION/src/base/ftlcdfil.c
ファイルを編集して default_filter[5]
定数の定義を見て下さい:
static const FT_Byte default_filter[5] = { 0x10, 0x40, 0x70, 0x40, 0x10 };
この定数はレンダリングされた文字に適用するローパスフィルタを定義しています。必要に応じて修正してください。ファイルを保存し、カスタムパッケージをビルド・インストールしてください:
$ makepkg -e # pacman -Rd freetype2 # pacman -U freetype2-VERSION-ARCH.pkg.tar.xz
再起動して X を起動してください。これで lcddefault フィルタはフォントを違ったふうに表示するはずです。
太字フォントで auto-hinter を無効にする
auto-hinter は複雑な方法を使ってフォントを表示しますが、しばしば太字フォントの幅が広すぎになってしまうことがあります。幸いに、太字フォントのみ autohinter をオフにすることで解決できます:
... <match target="font"> <test name="weight" compare="more"> <const>medium</const> </test> <edit name="autohint" mode="assign"> <bool>false</bool> </edit> </match> ...
大きいフォントでだけアンチエイリアスを有効にする
ユーザーによってはアンチエイリアスのないギザギザのレンダリングの方を好むかもしれません:
... <match target="font"> <edit name="antialias" mode="assign"> <bool>false</bool> </edit> </match> <match target="font" > <test name="size" qual="any" compare="more"> <double>12</double> </test> <edit name="antialias" mode="assign"> <bool>true</bool> </edit> </match> <match target="font" > <test name="pixelsize" qual="any" compare="more"> <double>16</double> </test> <edit name="antialias" mode="assign"> <bool>true</bool> </edit> </match> ...
フォントの置き換え
一番信頼できる方法は下のような XML フラグメントを追加することです。"binding" 属性を使うことでよりよい結果を得ることができます、例えば、Firefox でフォントのプロパティを変更したくない場合。下のフラグメントは Georgia の代わりに Ubuntu を使わせます:
... <match target="pattern"> <test qual="any" name="family"><string>georgia</string></test> <edit name="family" mode="assign" binding="same"><string>Ubuntu</string></edit> </match> ...
他の方法として "preferred" フォントを設定するというのもありますが、元のフォントがシステムに存在しない時にしか効果がありません。その場合、指定したフォントが代わりに使われます:
... < !-- Replace Helvetica with Bitstream Vera Sans Mono --> < !-- Note, an alias for Helvetica should already exist in default conf files --> <alias> <family>Helvetica</family> <prefer><family>Bitstream Vera Sans Mono</family></prefer> <default><family>fixed</family></default> </alias> ...
フォントのホワイトリストとブラックリスト
<selectfont>
エレメントを <acceptfont>
や <rejectfontfont>
エレメントと組み合わせて使うことで、フォントを選択的にブラックリストやホワイトリストに入れることができます。よくあるユースケースとしては、あるフォントをインストールする必要があるが、アプリケーションのユーザーインターフェイスで使われると問題が起こるので、使われないようにしたい場合があります。
まずフォントのファミリー名を確認してください:
$ fc-scan .fonts/lklug.ttf --format='%{family}\n'
LKLUG
以下のように <rejectfontfont>
を記述してファミリー名を使います:
<selectfont> <rejectfont> <pattern> <patelt name="family" > <string>LKLUG</string> </patelt> </pattern> </rejectfont> </selectfont>
<rejectfontfont>
と <acceptfont>
両方のエレメントを使う場合、最初に <rejectfontfont>
を使って排除したいグループをマッチさせ、それから <acceptfont>
を使ってブラックリストに入れたグループの中から個々のフォントをホワイトリストに追加するのが普通です。
<selectfont> <rejectfont> <glob>/usr/share/fonts/OTF/*</glob> </rejectfont> <acceptfont> <pattern> <patelt name="family" > <string>Monaco</string> </patelt> </pattern> <cceptfont> </selectfont>
ビットマップフォントの無効化
ビットマップフォントが有効になっていると、特定のフォントが見つからなかった場合のフォールバックとして使われて、テキストがギザギザに表示されることがあります。fontconfig でビットマップフォントを無効化するには、70-no-bitmaps.conf
を使って下さい (このファイルはデフォルトでは fontconfig によって作られません):
# cd /etc/fonts/conf.d # rm 70-yes-bitmaps.conf # ln -s ../conf.avail/70-no-bitmaps.conf
次のワンライナーも使えるはずです:
# ln -s /etc/fonts/conf.avail/70-no-bitmaps.conf /etc/fonts/conf.d/
70-yes-bitmaps.conf
が存在しない場合は削除する必要はありません。ビットマップフォントをどのフォントで置き換えるか選択することもできます (Helvetica, Courier, Times のビットマップを TTF フォントに):
~/.config/fontconfig/conf.d/29-replace-bitmap-fonts.conf
<?xml version="1.0"?> <!DOCTYPE fontconfig SYSTEM "fonts.dtd"> <fontconfig> <!-- Replace generic bitmap font names by generic font families --> <match target="pattern" name="family"> <test name="family" qual="any"> <string>Helvetica</string> </test> <edit mode="assign" name="family"> <string>Arial</string> <string>Liberation Sans</string> <string>sans-serif</string> </edit> </match> <match target="pattern" name="family"> <test name="family" qual="any"> <string>Courier</string> </test> <edit mode="assign" name="family"> <string>Courier New</string> <string>Liberation Mono</string> <string>monospace</string> </edit> </match> <match target="pattern" name="family"> <test name="family" qual="any"> <string>Times</string> </test> <edit mode="assign" name="family"> <string>Times New Roman</string> <string>Liberation Serif</string> <string>serif</string> </edit> </match> </fontconfig>
~/.config/fontconfig/conf.d/20-no-embedded.conf
<?xml version="1.0"?> <!DOCTYPE fontconfig SYSTEM "fonts.dtd"> <fontconfig> <match target="font"> <edit name="embeddedbitmap" mode="assign"> <bool>false</bool> </edit> </match> </fontconfig>
特定のフォントで埋め込みビットマップフォントを無効にするには:
<match target="font"> <test qual="any" name="family"> <string>Monaco</string> </test> <edit name="embeddedbitmap"><bool>false</bool></edit> </match>
ビットマップフォントのスケーリングを無効にする
ビットマップフォントのスケーリングを無効化するには (which often makes them blurry)、/etc/fonts/conf.d/10-scale-bitmap-fonts.conf
を削除してください。
不完全なフォントにボールド・イタリック体を作成する
Freetype には italic や bold のスタイルがフォントにないときに自動で作成する機能があります。ただし、この機能はアプリケーションによって明示的に必要とされたときしか使われません。プログラムがこのようなリクエストを送るのは稀なので、このセクションでは手動で欠けているスタイルを強制的に作成する方法を説明しています。
下で説明しているように /usr/share/fonts/fonts.cache-1
を編集するところから初めて下さい。fc-cache
でフォントの更新がされると /usr/share/fonts/fonts.cache-1
が上書きされるので、修正したコピーを他のファイルに保存してください。
Dupree フォントがインストールされていると仮定します:
"dupree.ttf" 0 "Dupree:style=Regular:slant=0:weight=80:width=100:foundry=unknown:index=0:outline=True:etc...
この行を複製して、style=Regular
を style=Bold
などの他のスタイルに変更してください。さらに、イタリック体では slant=0
を slant=100
に、ボールド体では weight=80
を weight=200
に変更してください。もしくは bold italic と結合するなら:
"dupree.ttf" 0 "Dupree:style=Bold Italic:slant=100:weight=200:width=100:foundry=unknown:index=0:outline=True:etc...
必要な修正を $XDG_CONFIG_HOME/fontconfig/fonts.conf
に加えて下さい:
... <match target="font"> <test name="family" qual="any"> <string>Dupree</string> <!-- other fonts here .... --> </test> <test name="weight" compare="more_eq"><int>140</int></test> <edit name="embolden" mode="assign"><bool>true</bool></edit> </match> <match target="font"> <test name="family" qual="any"> <string>Dupree</string> <!-- other fonts here .... --> </test> <test name="slant" compare="more_eq"><int>80</int></test> <edit name="matrix" mode="assign"> <times> <name>matrix</name> <matrix> <double>1</double><double>0.2</double> <double>0</double><double>1</double> </matrix> </times> </edit> </match> ...
ルールの優先順を変更する
Fontconfig は番号順で /etc/fonts/conf.d
内のファイルを処理します。ルールやファイルが他のルールを上書きする可能性があり、どのファイルが最後にパースされるのか混乱するおそれがあります。
個人設定が他の全てのルールに優先することを保証するには、順番を変えて下さい:
# cd /etc/fonts/conf.d # mv 50-user.conf 99-user.conf
ただし、ユーザーにはデフォルトでフォントの設定(ヒンティングやアンチエイリアスのプロパティ、新しいフォントから一般的なフォントファミリーへのエイリアスなど)のコントロールを与えられているので、ほとんどの場合この変更は必要ありません。
fontconfig 設定サンプル
fontconfig の設定例はこのページにあります。
出発点となるシンプルな設定:
/etc/fonts/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>hintslight</const> </edit> <edit mode="assign" name="lcdfilter"> <const>lcddefault</const> </edit> <edit mode="assign" name="rgba"> <const>rgb</const> </edit> </match> </fontconfig>
パッチがあてられているパッケージ
以下のパッチ済みパッケージは AUR から利用できます。注意事項:
- 基本的に設定が必要になります。
- 新しいフォントレンダリングはアプリケーションが再起動するまで有効になりません。
- ライブラリに静的リンクしているアプリケーションはシステムライブラリにあてられたパッチの影響を受けません。
Infinality
infinality パッチセットは freetype2 のフォントレンダリングを大幅に向上させます。また、新しい機能を多数追加します。
Infinality の設定は /etc/profile.d/infinality-settings.sh
内の環境変数で実行しながら全て行うことができます。以下を設定可能です:
- Emboldening Enhancement: Y emboldening を無効化し、太字のないフォントでよりよい結果が得られます。ネイティブの TT hinter と autohinter で動作します。
- Auto-Autohint: TT 情報が含まれていないフォントで autohint を自動的に強制します。
- Autohint Enhancement: autohint にピクセルから水平ステムを抽出させます。よくヒンティングされた truetype フォントと同じような結果が得られますが、100% パテントフリーです (私が知る限り)。
- Customized FIR Filter: 起動時にあなたが設定した filter values を選択します。ネイティブの TT hinter と autohinter で動作します。
- Stem Alignment: ビットマップ文字を調整してピクセルの境界を最適化します。ネイティブの TT hinter と autohinter で動作します。
- Pseudo Gamma Correction: 指定された値・サイズまで文字を薄く・濃くします。ネイティブの TT hinter と autohinter で動作します。
- Embolden Thin Fonts: 細い、もしくは薄いフォントを太くして可読性を上げます。autohinter で動作します。
- Force Slight Hinting: プログラムが完全なヒンティングを求めているときも軽量なヒンティングを強制します。(fedora の infinality-settings パッケージに含まれている) local.conf を使っている場合 @font-face フォントで改善が見られます。
- ChromeOS Style Sharpening: ChromeOS はフォントの見た目をシャープにするパッチを使っています。現在このパッチは infinality パッチセットに含まれています。
多くのプリセットが含まれており /etc/profile.d/infinality-settings.sh
で USE_STYLE 変数を設定することで使うことができます。
インストールと設定
freetype2-infinalityAUR を AUR からインストールできます。multilib を使っている場合、AUR から lib32-freetype2-infinalityAUR もインストールしてください。AUR には最新の開発スナップショットの freetype2 と Infinality パッチセットも入っています: freetype2-infinality-gitAUR と lib32-freetype2-infinality-gitAUR。
さらに、エンジンのレンダリング設定とは別に、定義済みフォントのスタイルやアンチエイリアス設定の選択を有効にするために fontconfig-infinalityAUR もインストールすることを推奨します。インストール後、フォントのスタイル (win7, winxp, osx, linux, ...) を次のコマンドで選択できます:
# infctl setstyle
win7 や osx に設定する場合、適切なフォントがインストールされている必要があります。
詳細は次の記事を見て下さい: http://www.infinality.net/forum/viewtopic.php?f=2&t=77
カスタムリポジトリからインストール
また、bohoomil が infinality-bundle リポジトリを管理していて、3つの基本的なライブラリ (freetype2-infinality-ultimate, fontconfig-infinality-ultimate & cairo-infinality-ultimate) に事前にパッチ・設定・ビルドを行ったバイナリを全てのアーキテクチャで提供しています (i686, x86_64, multilib)。さらに、infinality-bundle-fonts というリポジトリもあり、完全にフリーで高品質なタイプフェースで一般的なプロプライエタリのフォントファミリーを置き換えます。infinality-bundle と infinality-bundle-fonts を使えば、インストール・設定は劇的にシンプルになります。
詳細やインストールの手順については Infinality-bundle+fonts を見て下さい。
Ubuntu
Ubuntu はフォントレンダリングライブラリに設定とパッチを追加しています。AUR からパッチのあたったパッケージをインストールすることができます。
- freetype2-ubuntuAUR - TrueType フォントレンダリング
- fontconfig-ubuntuAUR - フォント選択の設定とカスタマイズ
- cairo-ubuntuAUR - Cairo ベクターグラフィック
全体的な設定を追加する必要があります。#fontconfig 設定サンプル を見てください。 Ubuntu の設定では hintslight オプションが一番良いレンダリングをもたらします。
パッチがあたっていないパッケージに戻す
パッチがあたっていないパッケージを復元するには、オリジナルのパッケージを再インストールしてください:
# pacman -S --asdeps freetype2 cairo fontconfig
32ビット版もインストールしている場合は 'lib32-cairo lib32-fontconfig lib32-freetype2' を加えて下さい。
fontconfig をサポートしていないアプリケーション
URxvt など、アプリケーションによっては fontconfig の設定を無視することがあります。このことは、適切な設定に大いに依存している infinality パッチを使っている時に非常に明らかです。~/.Xresources
を使うことで問題を解決することができますが、このファイルの柔軟性は fontconfig に到底及びません。例 (オプションの説明は #Fontconfig 設定 を見てください):
~/.Xresources
Xft.autohint: 0 Xft.lcdfilter: lcddefault Xft.hintstyle: hintfull Xft.hinting: 1 Xft.antialias: 1 Xft.rgba: rgb
X が起動した時に設定が正しくロードされているか xrdb -q
で確認してください (詳細な情報は Xresources を見てください)。
トラブルシューティング
フォントが歪む
フォントが大きすぎ・小さすぎたり、プロポーションやレンダリングがおかしい場合、fontconfig が間違った DPI を使っている可能性があります。
Fontconfig は Xorg サーバーによる DPI パラメータを検知することができます。自動で検知された DPI を (xorg-xdpyinfo パッケージに入っている) xdpyinfo
で確認してみて下さい:
$ xdpyinfo | grep dots
resolution: 102x102 dots per inch
DPI が (おそらくモニター EDID が誤っているせいで) 間違って検出されている場合、Xorg の設定で手動で指定することが可能です。Xorg#画面サイズと DPI を参照してください。これは推奨されている解決方法ですが、ドライバーにバグがあると動かないことがあります。
Fontconfig は Xft.dpi 変数が設定されている場合、デフォルトをそれにします。Xft.dpi は基本的にデスクトップ環境 (通常は Xorg の DPI 設定) か ~/.Xdefaults
や ~/.Xresources
で手動で設定されます。xrdb を使って値を調べて下さい:
$ xrdb -query | grep dpi
Xft.dpi: 102
問題が修正されない場合は fontconfig によって使われる DPI を手動で設定するようにフォールバックできます:
... <match target="pattern"> <edit name="dpi" mode="assign"><double>102</double></edit> </match> ...
Calibri, Cambria, Monaco などが正しく表示されない
スケーラブルフォントによっては、主として小さなサイズの時、代わりとして埋め込みビットマップが表示されることがあります。全てのサイズでスケーラブルフォントを使うには埋め込みビットマップを無効にしてください。
古い GTK と Qt アプリケーション
新しい GTK アプリはデフォルトで Xft を有効にしますが、バージョン 2.2 以前では話が違っていました。これらのアプリケーションを更新できない場合、~/.bashrc
に次を追加することで古い GNOME に Xft を強制してください:
export GDK_USE_XFT=1
古い Qt アプリケーションでは:
export QT_XFT=true
アプリケーションがヒンティングを無視する
アプリケーションによってはデフォルトの fontconfig のヒンティングやアンチエイリアス設定を無視することがあります。例えば vlc や smplayer などの Qt アプリケーションを GNOME 3 で使っている時に起こることがあります。そのような場合はアプリケーションにあった指定の設定プログラムを使って下さい。gnome なら、gnome-tweak-tool を使って infinality を使用している間はアンチエイリアスをデフォルトの Grayscale
から Rgba
に設定してください。
デスクトップ環境によるヒンティングの設定がアプリケーションに反映されない
例えば、GNOME の設定でヒンティングを "none" に設定していても Firefox が完全なヒンティングを行ってしまい、フォントが幅広になってしまうことがあります。このような場合、ヒンティングの設定を fonts.conf
ファイルに追加してください:
<?xml version='1.0'?> <!DOCTYPE fontconfig SYSTEM 'fonts.dtd'> <fontconfig> <match target="font"> <edit mode="assign" name="hinting"> <bool>false</bool> </edit> </match> </fontconfig>
上記の例では、ヒンティングを "grayscale" に設定しています。
GNOME を使っていない場合に GTK アプリケーションのヒンティングがおかしくなる
GNOME は XSETTINGS システムを使ってフォントレンダリングを設定しています。gnome-settings-daemon が存在しない場合、GTK アプリケーションは fontconfig を使いますが、フォントによってはヒンティングが間違って設定され、結果として見た目が太すぎたり細すぎたりすることがあります。gnome-settings-daemon の代わりとして xsettingsd-gitAUR を使って設定を行うのがシンプルな解決法です、例えば:
~/.xsettingsd
Xft/Hinting 1 Xft/RGBA "rgb" Xft/HintStyle "hintslight" Xft/Antialias 1
参照
- Fontconfig ユーザーガイド
- Fonts in X11R6.8.2 - 公式の Xorg フォント情報
- FreeType 2 概要
- Gentooの font-rendering スレッド