hack のためのネタ帳, etc,,,

未解決問題

状況

所謂 2ch 系の AA が貼られたページを Ubuntu 22.04.5 LTS の Firefox で表示すると、レイアウトが崩れる。
Ubuntu フォント AA」でググってみたところ、 等を見つけた。

とりあえず、fonts-mona または fonts-monapo を入れておいて、about:preferences のフォントの設定から、「既定のフォント」または「ゴシック体(Sans-serif)」を「Mona」または「Monapo」に変更した上で、「☐ウェブページが指定したフォントを優先する」を外しておけば Mona や Monapo で表示できることは確認した。

ところが、「☑ウェブページが指定したフォントを優先する」が入っていると、
CSS が
font-family: "MS Pゴシック", "MS PGothic", Mona, IPAMonaPGothic, sans-serif !important;
が設定されているにも関わらず、なぜか、"Noto Sans CJK JP" で表示されてしまう。

どうも以下の設定
$ grep "MS Pゴシック" /etc/fonts/conf.d/ -R -B1 -A10
/etc/fonts/conf.d/30-cjk-aliases.conf-    <alias>
/etc/fonts/conf.d/30-cjk-aliases.conf:        <family>MS Pゴシック</family>
/etc/fonts/conf.d/30-cjk-aliases.conf-        <accept>
/etc/fonts/conf.d/30-cjk-aliases.conf-            <family>Noto Sans CJK JP</family>
/etc/fonts/conf.d/30-cjk-aliases.conf-            <family>IPAMonaPGothic</family>
/etc/fonts/conf.d/30-cjk-aliases.conf-            <family>TakaoPGothic</family>
/etc/fonts/conf.d/30-cjk-aliases.conf-            <family>IPAPGothic</family>
/etc/fonts/conf.d/30-cjk-aliases.conf-            <family>VL PGothic</family>
/etc/fonts/conf.d/30-cjk-aliases.conf-            <family>Sazanami Gothic</family>
/etc/fonts/conf.d/30-cjk-aliases.conf-            <family>Kochi Gothic</family>
/etc/fonts/conf.d/30-cjk-aliases.conf-        </accept>
/etc/fonts/conf.d/30-cjk-aliases.conf-    </alias>
$ grep "MS PGothic" /etc/fonts/conf.d/ -R -B1 -A10
/etc/fonts/conf.d/30-cjk-aliases.conf-    <alias>
/etc/fonts/conf.d/30-cjk-aliases.conf:        <family>MS PGothic</family>
/etc/fonts/conf.d/30-cjk-aliases.conf-        <accept>
/etc/fonts/conf.d/30-cjk-aliases.conf-            <family>Noto Sans CJK JP</family>
/etc/fonts/conf.d/30-cjk-aliases.conf-            <family>IPAMonaPGothic</family>
/etc/fonts/conf.d/30-cjk-aliases.conf-            <family>TakaoPGothic</family>
/etc/fonts/conf.d/30-cjk-aliases.conf-            <family>IPAPGothic</family>
/etc/fonts/conf.d/30-cjk-aliases.conf-            <family>VL PGothic</family>
/etc/fonts/conf.d/30-cjk-aliases.conf-            <family>Sazanami Gothic</family>
/etc/fonts/conf.d/30-cjk-aliases.conf-            <family>Kochi Gothic</family>
/etc/fonts/conf.d/30-cjk-aliases.conf-        </accept>
/etc/fonts/conf.d/30-cjk-aliases.conf-    </alias>
により "MS Pゴシック", "MS PGothic" の alias として設定されている "Noto Sans CJK JP" に fallback されててそうな雰囲気なのだが、
なぜか、
$ fc-match "MS Pゴシック"
fonts-japanese-gothic.ttf: "Takao Pゴシック" "Regular"
$ fc-match "MS PGothic"
fonts-japanese-gothic.ttf: "Takao Pゴシック" "Regular"
みたいに fontconfig では alias 設定されてるはずの "Noto Sans CJK JP" ではなく "Takao Pゴシック" が拾われる。

また、以下の HTML ではなぜか、fc-match で挙がる "Takao Pゴシック" ではなく "Noto Sans CJK JP" が使われてしまう。
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>Font Test</title>
    <style>
        body {
            font-family: "MS Pゴシック", "MS PGothic", Mona, IPAMonaPGothic, sans-serif !important;
        }
    </style>
</head>
<body>
    これはテストです。
</body>
</html>

※1 を参考に、

~/.config/fontconfig/conf.d/99-MSPGothic.conf

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<!-- Aliases for Japanese Windows fonts -->
    <alias>
        <family>MS PGothic</family>
        <accept>
            <family>Monapo</family>
            <family>IPAMonaPGothic</family>
            <family>TakaoPGothic</family>
            <family>IPAPGothic</family>
            <family>VL PGothic</family>
            <family>Sazanami Gothic</family>
            <family>Kochi Gothic</family>
        </accept>
    </alias>
    <alias>
        <family>MS Pゴシック</family>
        <accept>
            <family>Monapo</family>
            <family>IPAMonaPGothic</family>
            <family>TakaoPGothic</family>
            <family>IPAPGothic</family>
            <family>VL PGothic</family>
            <family>Sazanami Gothic</family>
            <family>Kochi Gothic</family>
        </accept>
    </alias>
</fontconfig>
みたいなファイルを置いてみるが、これも上手く Monapo に alias してくれない。
~/.config/fontconfig/conf.d/ ではなく /etc/fontconfig/conf.d/ に置いても駄目。

どうにも、"MS Pゴシック" 周りのエイリアスの処理の挙動が怪しい感じ。
なぜ???

解法

Ubuntu Firefox "MS Pゴシック"」でググったら、右側の AI によりリコメンド(?)の所に以下のページを見つけた。
曰く、 って Web アプリに適当なフォント upload してたら、好きなフォント名に変更して download 出来るぞと。
ただ、これ、英語名は変更できるんだけど、日本語名の変更方法が分からない。

と言うことで、fontforge を install して、monapo.ttf を読み込ませて、
「エレメント」→「フォント情報」から
「PS Names」のところを
  • フォント名 : MS-PGothic
  • ファミリー名 : MS PGothic
  • 表示用の名前 : MS PGothic
「TTF名」のところを
  • 日本語 : ファミリー : MS Pゴシック
  • 日本語 : UniqueID : MS Pゴシック pretended by Monapo
  • 日本語 : フルネーム : MS Pゴシック
  • 英語(アメリカ) : UniqueID : MS PGothic pretended by Monapo
って設定して、「ファイル」→「フォントを出力」から「TrueType」を指定して「生成」してやり、
  • /usr/local/share/fonts/
に放り込んでみたところ、無事 Firefox から「MS Pゴシック」として認識され、AA を正しいレイアウトで表示させることに成功した。

手動でするのは面倒なので Copilot 先生にお伺いを立ててみたところ のような回答だったので、以下のような script を書いてみた。

monapo2mspgothic.py

import fontforge

# フォントファイルを開く
font = fontforge.open("/usr/share/fonts/truetype/monapo/monapo.ttf")

# フォント情報を設定
font.fontname = "MS-PGothic"
font.familyname = "MS PGothic"
font.fullname = "MS PGothic"
font.appendSFNTName('Japanese', 'Family', 'MS Pゴシック')
font.appendSFNTName('Japanese', 'UniqueID', 'MS Pゴシック pretended by Monapo')
font.appendSFNTName('Japanese', 'Fullname', 'MS Pゴシック')
font.appendSFNTName('English (US)', 'UniqueID', 'MS PGothic pretended by Monapo')

# フォントを保存
font.generate("/tmp/mspgothic-monapo.ttf")

# フォントを閉じる
font.close()
あとは、以下のような感じで実行すると、期待通りの .ttf が得られて Firefox からも参照できた。
sudo apt install python3-fontforge
python3 monapo2mspgothic.py
sudo cp -a /tmp/mspgothic-monapo.ttf /usr/local/share/fonts/

fontconfig のエイリアスが上手く処理できてないのは未解決問題だが、とりあえず AA のレイアウトに関しては解決したということで。

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Wiki内検索

フリーエリア

管理人/副管理人のみ編集できます