October 21, 2005
[Linux] Macromedia Flash Player 7 for Mozilla and Mozilla compatible on Linux で文字が出ない場合
Macromedia Flash Player 7 for Mozilla and Mozilla compatible on Linux で文字が出ない場合があります.
Fedora Core 4 上の Firefox + libflashplayer.so では (kochi-substitute ではありますが)一応表示されていますので,なぜ出ないのかを検討してみました.
まずはダイナミックリンクライブラリの調査から.
% ldd libflashplayer.so linux-gate.so.1 => (0xffffe000) libpthread.so.0 => /lib/libpthread.so.0 (0xb7c8d000) libdl.so.2 => /lib/libdl.so.2 (0xb7c89000) libz.so.1 => /lib/libz.so.1 (0xb7c78000) libX11.so.6 => /usr/lib/libX11.so.6 (0xb7bac000) libXext.so.6 => /usr/lib/libXext.so.6 (0xb7b9d000) libXt.so.6 => /usr/lib/libXt.so.6 (0xb7b47000) libXmu.so.6 => /usr/lib/libXmu.so.6 (0xb7b31000) libm.so.6 => /lib/libm.so.6 (0xb7b0f000) libc.so.6 => /lib/libc.so.6 (0xb79fc000) /lib/ld-linux.so.2 (0x80000000) libSM.so.6 => /usr/lib/libSM.so.6 (0xb79f3000) libICE.so.6 => /usr/lib/libICE.so.6 (0xb79dc000) %
libflashplayer.so は,Xft を使っていません.Fedora Core 4 上でアンチエイリアスのかかった文字が表示されているので,何か別な方法(自前?)でレンダリングしているようです.
次に strings(1) で文字列を調べてみます.と調べたのが次の結果.
% strings libflashplayer.so | grep -i kochi Kochi Gothic Kochi Mincho %
何ということでしょう.フォント名がバイナリに埋め込まれています.
嘆き悲しみつつ実行した fc-list の出力結果は次の通りです.
% fc-list | grep -i Kochi Kochi Mincho:style=Regular Kochi Gothic:style=Regular %
私の環境には media-fonts/kochi-substitute-20030809-r3 がインストールされていますので,fc-list を実行すると当然,このように出力されます.ただ... フォントが入っていても,libflashplayer.so は文字を表示してくれません.
ldd の実行結果から libflashplayer.so が Xft を使ってなさそうということはいえるので,fontconfig からフォントが使えても意味がないのは当然かも知れません.
そして,xlsfonts の出力結果も出しておきます.
% xlsfonts | grep -i Kochi %
後者は何も表示されませんでした.つまり私の環境では,X コアフォントシステム経由で Kochi Gothic が使えないということです.
念のため,fonts.dir を編集し,コアフォントシステム経由で Kochi Gothic を使用可能にしてみました.
% sudo vim /usr/share/fonts/kochi-substitute/fonts.dir (fonts.dir を編集) % xset fp rehash % xlsfonts | grep -i Kochi -misc-kochi gothic-medium-r-normal--0-0-0-0-c-0-adobe-standard (snip) -misc-kochi gothic-medium-r-normal--0-0-0-0-c-0-microsoft-cp1250 %
以上の手順を実行してから Firefox を起動すると... 何ということでしょう.今まで見られなかった Flash コンテンツ上の文字列が見事に出現しました.
表示されている文字にはアンチエイリアスがかかっていますので,X コアフォントシステム経由でグリフを取得しているわけではなさそうです.
もしかすると,コアフォントシステム経由で TrueType Font のパスを取得して,自前でラスタライズをしているのかも知れません.こう考えればつじつまが合います.
とりあえず,ある TrueType フォントがコアフォントシステム経由で "Kochi Gothic" として使えるようになっていれば,libflashplayer.so はそのフォントで日本語の文字列を表示してくれる,ということだけは分かりました.
名前が "Kochi Gothic" でありさえすればよいので,例えば ipagui.ttf と同じディレクトリにある fonts.dir に以下のように記述しておけば,IPA ゴシックで表示してくれます.