試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

依然として残るフォント化けについて検証/対処

  1. フォント置換の設定が不十分?
  2. レジストリ設定項目について
  3. Wine内蔵Windowsインストーラのフォント

フォント置換の設定が不十分?

これまでのフォント設定では、例えば、Notepad++というテキストエディタのデフォルトのフォント設定だと、このように日本語が化ける部分が出る。

(実際の文字列は「AIUEO あいうえお」)
そこで、lsofというコマンド*1を使用して、どのフォントが実際に使用されているのかを調べてみた。

$ /usr/sbin/lsof /usr/share/fonts/*/*.ttf | grep notepad++
notepad++  1874  [ユーザ名] mem    REG    3,6  234788  586411 /usr/share/fonts/corefonts/courbi.ttf
notepad++  1874  [ユーザ名] mem    REG    3,6  244156  586412 /usr/share/fonts/corefonts/couri.ttf
notepad++  1874  [ユーザ名] mem    REG    3,6  126364  586405 /usr/share/fonts/corefonts/comic.ttf
notepad++  1874  [ユーザ名] mem    REG    3,6  311508  586410 /usr/share/fonts/corefonts/courbd.ttf
notepad++  1874  [ユーザ名] mem    REG    3,6  302688  586409 /usr/share/fonts/corefonts/cour.ttf
notepad++  1874  [ユーザ名] mem    REG    3,6  139640  586426 /usr/share/fonts/corefonts/verdana.ttf
notepad++  1874  [ユーザ名] mem    REG    3,6 3353352 1178128 /usr/share/fonts/ipamonafont/ipagui-mona.ttf

courbi.ttfなどのフォントは、「corefonts」というフォントパッケージに含まれる、欧文(日本語部分のない)フォント。これらのフォントを使用しないように置換を行えれば、化けを回避できるのではないかと思い、Wineにより自動認識される、フォント名とフォントのファイル名との対応を格納している部分(下の部分の他、${WINEPREFIX}/user.regの[Software\\Wine\\Fonts\\External Fonts]にも同様のものがある)

ファイル名: ${WINEPREFIX}/system.reg より、特定のフォント名に関する項目のみ抜粋

[Software\\Microsoft\\Windows NT\\CurrentVersion\\Fonts]
"Courier New (TrueType)"="cour.ttf"
"Courier New Bold (TrueType)"="courbd.ttf"
"Courier New Bold Italic (TrueType)"="courbi.ttf"
"Courier New Italic (TrueType)"="couri.ttf"
"Comic Sans MS (TrueType)"="comic.ttf"
"Verdana (TrueType)"="verdana.ttf"

を参考にして、

と置換する設定を書いてみた。
(2014/9/26)リンク先を修正

ファイル名: ${WINEPREFIX}/system.reg

[Software\\Microsoft\\Windows NT\\CurrentVersion\\FontSubstitutes]
"Courier New"="IPA \x30e2\x30ca\x30fc \x30b4\x30b7\x30c3\x30af"
"Comic Sans MS"="\x307f\x304b\x3061\x3083\x3093"
"Verdana"="Systema"


これで、日本語部分が表示されるようになった。他の欧文フォントでも試してみたが、どうやら、Wineでは、欧文フォントを指定したときに、日本語部分が化けるらしい(仕様?)。メモ帳で実験しても、欧文フォント指定時に日本語が化けることを確認。
アプリケーションによっては、特に英語圏で開発されたものを多言語化もしくは日本語化したものが、このようにフォント名決め打ち*2されていることがあり、置換を行わないと化けることが他にもありうる。*3

レジストリ設定項目について

フォント置換のレジストリ

  • HKEY_LOCAL_MACHINE(HKLM)\Software\Microsoft\Windows NT\CurrentVersion\FontSubstitutes: システム設定
  • HKEY_CURRENT_USER(HKCU)\Software\Wine\Fonts\Replacements: ユーザ設定(Wine固有のレジストリ)

の2つあり、色々試したところ、UIフォントに関しては、何故か

ファイル名: ${WINEPREFIX}/user.reg

[Software\\Wine\\Fonts\\Replacements]
"MS UI Gothic"="IPA \x30e2\x30ca\x30fc UI\x30b4\x30b7\x30c3\x30af"

ここで設定しないと、化ける部分(例: Picasaの「ウェブ アルバムにログイン」の文字)がある。それ以外の置換設定は「FontSubstitutes」のほうに移動しても問題なさそうだった。ただし、存在しないフォント名(「MS ゴシック」など)はフォント選択ダイアログに出ないため、「Replacements」のほうがよさそう。

Wine内蔵Windowsインストーラのフォント

Wineに含まれるmsiexecコマンドで

$ msiexec /i [Windowsインストーラファイル].msi

のようにしてWindowsインストーラの.msiファイルをインストールすることができるのだが、そのUIフォントがどうもうまく表示できていなかった。しかし、ついに、以下の設定により正常に表示されることを確認できた。

ファイル名: ${WINEPREFIX}/system.reg

[Software\\Microsoft\\Windows NT\\CurrentVersion\\FontSubstitutes]
"MS Sans Serif"="MS UI Gothic"


設定前

設定後

Arialを置換してもうまくいかず、試しに「corefonts」パッケージを一時的に消しても、別の欧文フォントになってしまっていたが、それらは「MS Sans Serif」を使用したときに自動選択される候補だった可能性がある(が、よくは分からない)。

使用したバージョン:

  • Wine 0.9.44

*1:標準のツール(coreutilsやutil-linux)ではないため、「lsof」というパッケージを入れる必要がある

*2:上のNotepad++の場合は、設定でフォントが変えられるので、厳密には決め打ちではない

*3:Times New Roman」や「Georgia」などが考えられるが、ここでは扱わない