Fontconfigのフォント重複の解消

パピーを名犬にするための技、テクニック

モデレータ: 暇人, YoN, nyu

返信する
rsurf
記事: 86
登録日時: 09/01/03(土) 12:42

Fontconfigのフォント重複の解消

投稿記事 by rsurf »

(2015/05/28 誤字修正)

■FontconfigではFullPath単位でユニーク判定しているのですが、「/usr/share/fonts」下と「/usr/share/X11/fonts」下の
2ディレクトリがシンボリックリンクで重複登録されている為に同じフォントが2個ずつ存在する形になっています。
Linuxのファイルシステムでは、DeviceID+Inodeでユニーク判定できるのですがfat系やntfs等との互換を考慮したのかも知れません。

以下、571=pup571,431=pup431q3とします。

xset q | grep -A 1 'Font Path:' # XLFDのフォントディレクトリ
▼結果)
571 /usr/share/X11/fonts/{misc,Type1,TTF}/,built-ins
431 /usr/X11R7/lib/X11/fonts/{misc,Type1,TTF}/

grep '<dir>' '/etc/fonts/fonts.conf' # Fontconfigのフォントディレクトリ(指定以下の全ディレクトリが対象)(xmlのコメント有り)
▼結果)
571 /usr/share/fonts, /usr/share/X11/fonts
431 /usr/share/fonts, /usr/X11/lib/X11/fonts

fc-list : file | sort # Fontconfig登録pathを確認(同ファイルが2ディレクトリに存在するものがある)

▼puppyのFontPath構造 ()はリンク、{}はリスト、[1-3]XLFD登録path、[a-e]Fontconf登録path。

コード: 全て選択

571
/usr/share/X11/fonts/{misc[1c],(Type1[2d],TTF[3e]↓)}
                     /usr/share/fonts/default/{Type1[a],TTF[b]}
431
/usr/X11R7/lib/X11/fonts/{misc[1c],(Type1[2d],TTF[3e]↓)}
 /usr/share/(X11↑)                                 ↓
                         /usr/share/fonts/default/{Type1[a],TTF[b]}
■という構造でどちらも[ab]と[de]のフォントが二重に登録されています。
これをディレクトリ構造を変えずに解消するには「/etc/fonts/fonts.conf」の<dir></dir>部分を
571 /usr/share/X11/fonts のみにする
431 同上 または /usr/X11/lib/X11/fonts のみにする
で解決します。しかし、「/usr/share/fonts」はFontconfの標準ディレクトリとされているのでこれを残すには、
571 /usr/share/fonts と /usr/share/X11/fonts/misc にする
431 /usr/share/fonts と 同上 または /usr/X11/lib/X11/fonts/misc にする
で解決します。
これを修正すると使用するフォントキャッシュが何個か減り(不要キャッシュ削除は手動で行う必要あり)、
代替フォント検索が僅かに速くなり、「~/.fonts.conf」を手動編集するときの奇妙な現象を1パターン減らすことができます。



▼上記修正前後比較
fc-cache -fv # フォントのキャッシュを作成/更新する。(日付を新しくする為)
find / -xdev -path '/proc' -prune -o \( -path '*[/.]fonts.cache-?' -o -path '*[/.]fontconfig/*.cache-?' \) -ls

431 -pfix ram 修正前
15841 8 -rw-r--r-- 1 root root 7704 5月 26 21:39 /var/cache/fontconfig/fde37821cbdb1159b4eac7aa64d92051-x86.cache-2
15840 4 -rw-r--r-- 1 root root 3808 5月 26 21:39 /var/cache/fontconfig/dff97e17f0a16753982c22213791434a-x86.cache-2
15839 8 -rw-r--r-- 1 root root 6616 5月 26 21:39 /var/cache/fontconfig/ddbd7b13a6107d9809ee2e9bda1eeb71-x86.cache-2
15838 4 -rw-r--r-- 1 root root 184 5月 26 21:39 /var/cache/fontconfig/cc6c6793c2dbdf216ae048773988aad6-x86.cache-2
15837 4 -rw-r--r-- 1 root root 3808 5月 26 21:39 /var/cache/fontconfig/b79f3aaa7d385a141ab53ec885cc22a8-x86.cache-2
15836 8 -rw-r--r-- 1 root root 6616 5月 26 21:39 /var/cache/fontconfig/02ee123a0860abc6ceda00dd4ed59b79-x86.cache-2
15835 4 -rw-r--r-- 1 root root 152 5月 26 21:39 /var/cache/fontconfig/0251a5afa6ac727a1e32b7d4d4aa7cf0-x86.cache-2
15834 4 -rw-r--r-- 1 root root 112 5月 26 21:39 /var/cache/fontconfig/3830d5c3ddfd5cd38a049b759396e72e-x86.cache-2
431 -pfix ram 修正後 21:39のものが使われなくなったもの(削除可能)
15853 8 -rw-r--r-- 1 root root 7704 5月 26 21:44 /var/cache/fontconfig/fde37821cbdb1159b4eac7aa64d92051-x86.cache-2
15852 4 -rw-r--r-- 1 root root 3808 5月 26 21:44 /var/cache/fontconfig/dff97e17f0a16753982c22213791434a-x86.cache-2
15851 8 -rw-r--r-- 1 root root 6616 5月 26 21:44 /var/cache/fontconfig/ddbd7b13a6107d9809ee2e9bda1eeb71-x86.cache-2
15850 4 -rw-r--r-- 1 root root 184 5月 26 21:44 /var/cache/fontconfig/cc6c6793c2dbdf216ae048773988aad6-x86.cache-2
15837 4 -rw-r--r-- 1 root root 3808 5月 26 21:39 /var/cache/fontconfig/b79f3aaa7d385a141ab53ec885cc22a8-x86.cache-2
15836 8 -rw-r--r-- 1 root root 6616 5月 26 21:39 /var/cache/fontconfig/02ee123a0860abc6ceda00dd4ed59b79-x86.cache-2
15835 4 -rw-r--r-- 1 root root 152 5月 26 21:39 /var/cache/fontconfig/0251a5afa6ac727a1e32b7d4d4aa7cf0-x86.cache-2
15834 4 -rw-r--r-- 1 root root 112 5月 26 21:39 /var/cache/fontconfig/3830d5c3ddfd5cd38a049b759396e72e-x86.cache-2
571 -pfix ram 修正前
4269 16 -rw-r--r-- 1 root root 14072 5月 26 22:09 /var/cache/fontconfig/b79f3aaa7d385a141ab53ec885cc22a8-le32d4.cache-3
4268 8 -rw-r--r-- 1 root root 7192 5月 26 22:09 /var/cache/fontconfig/02ee123a0860abc6ceda00dd4ed59b79-le32d4.cache-3
4263 8 -rw-r--r-- 1 root root 7808 5月 26 22:09 /var/cache/fontconfig/1e88f1f1e0efe03f58dd40df4dd7a0ea-le32d4.cache-3
4242 16 -rw-r--r-- 1 root root 13920 5月 26 22:09 /var/cache/fontconfig/beeeeb3dfe132a8a0633a017c99ce0c0-le32d4.cache-3
4198 8 -rw-r--r-- 1 root root 7176 5月 26 22:09 /var/cache/fontconfig/d04038e664b0033ae700a78c51f179d3-le32d4.cache-3
4194 4 -rw-r--r-- 1 root root 152 5月 26 22:09 /var/cache/fontconfig/0251a5afa6ac727a1e32b7d4d4aa7cf0-le32d4.cache-3
4192 4 -rw-r--r-- 1 root root 1584 5月 26 22:09 /var/cache/fontconfig/43c5f0feff18dfd82945432563d9d274-le32d4.cache-3
4187 4 -rw-r--r-- 1 root root 112 5月 26 22:09 /var/cache/fontconfig/3830d5c3ddfd5cd38a049b759396e72e-le32d4.cache-3
571 -pfix ram 修正後 22:09のものが使われなくなったもの(削除可能)
4242 8 -rw-r--r-- 1 root root 7808 5月 26 22:19 /var/cache/fontconfig/1e88f1f1e0efe03f58dd40df4dd7a0ea-le32d4.cache-3
4198 16 -rw-r--r-- 1 root root 13920 5月 26 22:19 /var/cache/fontconfig/beeeeb3dfe132a8a0633a017c99ce0c0-le32d4.cache-3
4192 8 -rw-r--r-- 1 root root 7176 5月 26 22:19 /var/cache/fontconfig/d04038e664b0033ae700a78c51f179d3-le32d4.cache-3
22205 4 -rw-r--r-- 1 root root 1584 5月 26 22:19 /var/cache/fontconfig/43c5f0feff18dfd82945432563d9d274-le32d4.cache-3
4269 16 -rw-r--r-- 1 root root 14072 5月 26 22:09 /var/cache/fontconfig/b79f3aaa7d385a141ab53ec885cc22a8-le32d4.cache-3
4268 8 -rw-r--r-- 1 root root 7192 5月 26 22:09 /var/cache/fontconfig/02ee123a0860abc6ceda00dd4ed59b79-le32d4.cache-3
4194 4 -rw-r--r-- 1 root root 152 5月 26 22:09 /var/cache/fontconfig/0251a5afa6ac727a1e32b7d4d4aa7cf0-le32d4.cache-3
4187 4 -rw-r--r-- 1 root root 112 5月 26 22:09 /var/cache/fontconfig/3830d5c3ddfd5cd38a049b759396e72e-le32d4.cache-3

fc-list : file | sort # Fontconfig登録pathを確認
431修正前
/usr/X11/lib/X11/fonts/TTF/DejaVuSans.ttf:
/usr/X11/lib/X11/fonts/TTF/M+1P+IPAG.ttf:
/usr/X11/lib/X11/fonts/Type1/n019003l.pfb:
/usr/X11/lib/X11/fonts/Type1/n019004l.pfb:
/usr/X11/lib/X11/fonts/Type1/n019024l.pfb:
/usr/X11/lib/X11/fonts/Type1/n021003l.pfb:
/usr/X11/lib/X11/fonts/Type1/n022003l.pfb:
/usr/X11/lib/X11/fonts/misc/7x14-ISO8859-1.pcf:
/usr/X11/lib/X11/fonts/misc/7x14B-ISO8859-1.pcf:
/usr/X11/lib/X11/fonts/misc/8x16.pcf:
/usr/X11/lib/X11/fonts/misc/9x15B-ISO8859-1.pcf:
/usr/X11/lib/X11/fonts/misc/courB12-ISO8859-1.pcf:
/usr/X11/lib/X11/fonts/misc/courO12-ISO8859-1.pcf:
/usr/X11/lib/X11/fonts/misc/courR12-ISO8859-1.pcf:
/usr/X11/lib/X11/fonts/misc/helvB12-ISO8859-1.pcf:
/usr/X11/lib/X11/fonts/misc/helvR12-ISO8859-1.pcf:
/usr/X11/lib/X11/fonts/misc/helvR24-ISO8859-1.pcf:
/usr/share/fonts/default/TTF/DejaVuSans.ttf:
/usr/share/fonts/default/TTF/M+1P+IPAG.ttf:
/usr/share/fonts/default/Type1/n019003l.pfb:
/usr/share/fonts/default/Type1/n019004l.pfb:
/usr/share/fonts/default/Type1/n019024l.pfb:
/usr/share/fonts/default/Type1/n021003l.pfb:
/usr/share/fonts/default/Type1/n022003l.pfb:
431修正後 重複7件消える
/usr/X11/lib/X11/fonts/TTF/DejaVuSans.ttf:
/usr/X11/lib/X11/fonts/TTF/M+1P+IPAG.ttf:
/usr/X11/lib/X11/fonts/Type1/n019003l.pfb:
/usr/X11/lib/X11/fonts/Type1/n019004l.pfb:
/usr/X11/lib/X11/fonts/Type1/n019024l.pfb:
/usr/X11/lib/X11/fonts/Type1/n021003l.pfb:
/usr/X11/lib/X11/fonts/Type1/n022003l.pfb:
/usr/X11/lib/X11/fonts/misc/7x14-ISO8859-1.pcf:
/usr/X11/lib/X11/fonts/misc/7x14B-ISO8859-1.pcf:
/usr/X11/lib/X11/fonts/misc/8x16.pcf:
/usr/X11/lib/X11/fonts/misc/9x15B-ISO8859-1.pcf:
/usr/X11/lib/X11/fonts/misc/courB12-ISO8859-1.pcf:
/usr/X11/lib/X11/fonts/misc/courO12-ISO8859-1.pcf:
/usr/X11/lib/X11/fonts/misc/courR12-ISO8859-1.pcf:
/usr/X11/lib/X11/fonts/misc/helvB12-ISO8859-1.pcf:
/usr/X11/lib/X11/fonts/misc/helvR12-ISO8859-1.pcf:
/usr/X11/lib/X11/fonts/misc/helvR24-ISO8859-1.pcf:
571修正前
/usr/share/X11/fonts/TTF/DejaVuSans.ttf:
/usr/share/X11/fonts/TTF/M+1P+IPAG.ttf:
/usr/share/X11/fonts/Type1/d050000l.pfb:
/usr/share/X11/fonts/Type1/n019003l.pfb:
/usr/share/X11/fonts/Type1/n019004l.pfb:
/usr/share/X11/fonts/Type1/n019023l.pfb:
/usr/share/X11/fonts/Type1/n019024l.pfb:
/usr/share/X11/fonts/Type1/n019043l.pfb:
/usr/share/X11/fonts/Type1/n019044l.pfb:
/usr/share/X11/fonts/Type1/n019063l.pfb:
/usr/share/X11/fonts/Type1/n019064l.pfb:
/usr/share/X11/fonts/Type1/n021003l.pfb:
/usr/share/X11/fonts/Type1/n021004l.pfb:
/usr/share/X11/fonts/Type1/n021023l.pfb:
/usr/share/X11/fonts/Type1/n021024l.pfb:
/usr/share/X11/fonts/Type1/n022003l.pfb:
/usr/share/X11/fonts/Type1/n022004l.pfb:
/usr/share/X11/fonts/Type1/n022023l.pfb:
/usr/share/X11/fonts/Type1/n022024l.pfb:
/usr/share/X11/fonts/Type1/s050000l.pfb:
/usr/share/X11/fonts/Type1/z003034l.pfb:
/usr/share/X11/fonts/cursor.pcf-ALT0:
/usr/share/X11/fonts/cursor.pcf-ALT1:
/usr/share/X11/fonts/misc/7x14-ISO8859-1.pcf:
/usr/share/X11/fonts/misc/7x14B-ISO8859-1.pcf:
/usr/share/X11/fonts/misc/8x16.pcf:
/usr/share/X11/fonts/misc/9x15B-ISO8859-1.pcf:
/usr/share/X11/fonts/misc/courB12-ISO8859-1.pcf:
/usr/share/X11/fonts/misc/courO12-ISO8859-1.pcf:
/usr/share/X11/fonts/misc/courR12-ISO8859-1.pcf:
/usr/share/X11/fonts/misc/cursor.pcf:
/usr/share/X11/fonts/misc/helvB12-ISO8859-1.pcf:
/usr/share/X11/fonts/misc/helvR12-ISO8859-1.pcf:
/usr/share/X11/fonts/misc/helvR24-ISO8859-1.pcf:
/usr/share/fonts/default/TTF/DejaVuSans.ttf:
/usr/share/fonts/default/TTF/M+1P+IPAG.ttf:
/usr/share/fonts/default/Type1/d050000l.pfb:
/usr/share/fonts/default/Type1/n019003l.pfb:
/usr/share/fonts/default/Type1/n019004l.pfb:
/usr/share/fonts/default/Type1/n019023l.pfb:
/usr/share/fonts/default/Type1/n019024l.pfb:
/usr/share/fonts/default/Type1/n019043l.pfb:
/usr/share/fonts/default/Type1/n019044l.pfb:
/usr/share/fonts/default/Type1/n019063l.pfb:
/usr/share/fonts/default/Type1/n019064l.pfb:
/usr/share/fonts/default/Type1/n021003l.pfb:
/usr/share/fonts/default/Type1/n021004l.pfb:
/usr/share/fonts/default/Type1/n021023l.pfb:
/usr/share/fonts/default/Type1/n021024l.pfb:
/usr/share/fonts/default/Type1/n022003l.pfb:
/usr/share/fonts/default/Type1/n022004l.pfb:
/usr/share/fonts/default/Type1/n022023l.pfb:
/usr/share/fonts/default/Type1/n022024l.pfb:
/usr/share/fonts/default/Type1/s050000l.pfb:
/usr/share/fonts/default/Type1/z003034l.pfb:
571修正後 重複21件消える
/usr/share/X11/fonts/TTF/DejaVuSans.ttf:
/usr/share/X11/fonts/TTF/M+1P+IPAG.ttf:
/usr/share/X11/fonts/Type1/d050000l.pfb:
/usr/share/X11/fonts/Type1/n019003l.pfb:
/usr/share/X11/fonts/Type1/n019004l.pfb:
/usr/share/X11/fonts/Type1/n019023l.pfb:
/usr/share/X11/fonts/Type1/n019024l.pfb:
/usr/share/X11/fonts/Type1/n019043l.pfb:
/usr/share/X11/fonts/Type1/n019044l.pfb:
/usr/share/X11/fonts/Type1/n019063l.pfb:
/usr/share/X11/fonts/Type1/n019064l.pfb:
/usr/share/X11/fonts/Type1/n021003l.pfb:
/usr/share/X11/fonts/Type1/n021004l.pfb:
/usr/share/X11/fonts/Type1/n021023l.pfb:
/usr/share/X11/fonts/Type1/n021024l.pfb:
/usr/share/X11/fonts/Type1/n022003l.pfb:
/usr/share/X11/fonts/Type1/n022004l.pfb:
/usr/share/X11/fonts/Type1/n022023l.pfb:
/usr/share/X11/fonts/Type1/n022024l.pfb:
/usr/share/X11/fonts/Type1/s050000l.pfb:
/usr/share/X11/fonts/Type1/z003034l.pfb:
/usr/share/X11/fonts/cursor.pcf-ALT0:
/usr/share/X11/fonts/cursor.pcf-ALT1:
/usr/share/X11/fonts/misc/7x14-ISO8859-1.pcf:
/usr/share/X11/fonts/misc/7x14B-ISO8859-1.pcf:
/usr/share/X11/fonts/misc/8x16.pcf:
/usr/share/X11/fonts/misc/9x15B-ISO8859-1.pcf:
/usr/share/X11/fonts/misc/courB12-ISO8859-1.pcf:
/usr/share/X11/fonts/misc/courO12-ISO8859-1.pcf:
/usr/share/X11/fonts/misc/courR12-ISO8859-1.pcf:
/usr/share/X11/fonts/misc/cursor.pcf:
/usr/share/X11/fonts/misc/helvB12-ISO8859-1.pcf:
/usr/share/X11/fonts/misc/helvR12-ISO8859-1.pcf:
/usr/share/X11/fonts/misc/helvR24-ISO8859-1.pcf:
_________________
OS:[pup-431JPqs3.sfs+fixmenus_on_locale-20100425|puppy_precise_5.7.1JP.sfs](手動frugal_ext4)+grub4dos(v0.4.4) CPU:Celeron_E3400 RAM:DDR2_2GB HDD:HGST_SATA1TB MB:G31M-S2L(G31+ICH7 BIOS:F10f Audio:ALC662 LAN:RTL8111C(r8168.ko) VGA:Onboard(Xorg,1920x1080,96dpi))
damboard
記事: 195
登録日時: 15/01/02(金) 12:01

Re: Fontconfigのフォント重複の解消

投稿記事 by damboard »

フォントの重複とか キャシュがなんたらかんたら て 私にはわからない

そもそも misc,Type1 フォルダーのフォントて必要なんですかね
/usr/share/x11のフォントて何に使っているんでしょう
起動時にずらずらでる英文ですか
それなら
/usr/share/fonts/default/TTF からリンクとればいいような?

571 や 431は 遠い昔の話ではあるが・・・・
当方 misc,Type1 フォルダーのフォント削除して使っていますが 支障ないです
rsurf
記事: 86
登録日時: 09/01/03(土) 12:42

Re: Fontconfigのフォント重複の解消

投稿記事 by rsurf »

XLFD(長い方)はコアフォントと言って最低限持っているべきフォントというのが有る様です「fixed」とか(有ること前提でソフトが動く)。
Xft(Fontconf経由)の方は「Sans」とかは有る前提ですが、最低日本語フォント一個有れば何を指定されても代替でそれを持ってきます(見つからない文字コードは豆腐)。
環境変数GDK_USE_XFTの値が1のときはXftがシステム標準になるようなのでTTFの日本語フォント一個あれば最低限どうにかなりそうです。

しかしmtPaint等自前でレンダリングできるようなソフトはFontconfを経由せずに特定のディレクトリ一覧から探して自力表示しますし、
メニューやダイアログ表示に特定ファミリのフォントでないと入りきらないかレイアウトが崩れるデザインしているソフトもありえます。
つまり標準で入っているソフト全部が問題なく表示できるような内容が初期のフォントディレクトリとフォントだと考えられます。

自分もあまり詳しくは無いですが「misc」はスケーラブル未対応ソフト用で「Type1」はPostScriptフォント対応ソフト用じゃ無いでしょうか?
(文字コードを表示するという意味では「DejaVu Sans」と「M+1P+IPAG」の2個(bold等は合成)でほぼ全部カバーできるので)
「misc」が無いとマウスカーソルが無くてxwinがコケそうですが、最悪「pfix=ram」で立ち上げて修正すれば良いのでいろいろ試せる環境だと思います。
返信する