読者です 読者をやめる 読者になる 読者になる

😃 mattintosh note 📝

Hello Raspberry Pi!

🍎 Mac と Wine のフォント関連の設定 🍷

この情報は 1.5 系をもとにしています。1.4 系では動作が異なる可能性がありますので注意して下さい。また、個人の経験上の話ですので間違っている部分もあるかもしれません。

この記事にある Replacements、FontSubstitutes、SystemLink におけるフォント設定には若干誤りが含まれると思われます(時間がなくてまだ直してません)。


2013年09月17日:

日本語環境用初期設定ファイルを公開しました。

Mac ユーザー向け Wine 初期設定用 INF ファイル - mattintosh note -hatena- Mac ユーザー向け Wine 初期設定用 INF ファイル - mattintosh note -hatena-


Wine がフォントをチェックする場所

Wine 環境で使用するフォントは Wine 本体と fontconfig によって制御されています。fontconfig はビルド時にどのライブラリを使ったかによって検索場所が異なります。MacPorts 版の fontconfig は ~/Library/Fonts が検索対象に入っていないため、デフォルトではユーザーフォントが認識されません。詳しくは「ユーザーフォント(~/Library/Fonts)が認識されない」を参照して下さい。いずれの場合でも $WINEPREFIX/drive_c/windows/Fonts にあるフォントは認識されます(AquaKana.ttf など特殊なフォントは除く)。

検索場所 設定ファイルの場所
wine ../share/wine/fonts
$WINEPREFIX/dosdevices/c:/windows/Fonts
fontconfig (MacPorts) /System/Library/Fonts
/Library/Fonts
~/.fonts
/opt/local/etc/fonts
fontconfig (XQuartz) /System/Library/Fonts
/Library/Fonts
~/.fonts
~/Library/Fonts
/opt/X11/lib/X11/fontconfig

※検索場所は一部省略しています。
※$WINEPREFIX/dosdevices/c:/windows/Fonts は $WINEPREFIX/drive_c/windows/Fonts と同じ場所です。
※~/.fonts は将来廃止予定。
※X11.app の場合は /opt/X11 ではなく /usr/X11 になります。

英語で表示される原因

gettext 無しでビルドした

Wine は日本語メッセージの生成に gettext を使用します。これはビルド時に行われているようなので gettext 無しでビルドした場合は再ビルドが必要になると思われます。Homebrew 版の Wine には依存関係に gettext が含まれていないようなので Wine 単体のインストールだと日本語メッセージが生成されないかもしれません。インストールするアプリケーション(例えば Firefox)によってはアプリケーション自体が日本語メッセージを含んでいることがあります。

LANG が正しく設定されていない

環境変数 LANG の値が en_US.UTF-8 などになっていると英語になります。LANG=ja_JP.UTF-8 などに設定して下さい。locale コマンドで確認できます。

日本語が文字化けする

msgothic.ttc が無い場合の対処法です。Wine にフォントが認識されていない場合は先に下にある「ユーザーフォント(~/Library/Fonts)が認識されない」を読んで下さい。

※レジストリに登録されていても MS Shell Dlg に完全に反映されないがフォントがあるようです(Osaka など)。

MS Shell Dlg

まず、メインダイアログ(MS Shell Dlg)ですが、これには「MS UI Gothic」が設定されています。msgothic.ttc が存在しなければ代替えフォントが使用されます(何を基準に選んでいるのかは知りませんが)。ここでは日本語または英語の「フォント名」が使用されます。regedit(レジストリエディタ)を使って変更します。

f:id:mattintosh4:20130313231339p:plain

テキストエディタでレジストリを書いてインポートすることもできます。例えば以下のレジストリをインポートすると MS Shell Dlg には「IPAMonaUIGothic(IPA モナー UI Gothic)」に指定されます。

REGEDIT4

[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\FontSubstitutes]
"MS Shell Dlg"="IPAMonaUIGothic"

printf や echo を使ってコマンドラインでも登録ができます。

printf '[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows NT\\CurrentVersion\\FontSubstitutes]\n"MS Shell Dlg"="IPAMonaUIGothic"' | wine regedit -

フォント名はレジストリエディタで確認できます。「@」がついているものは縦書用です。FONTCONFIG_FILE で追加されたものは HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Fonts で確認できますが、$WINEPREFIX/drive_c/windows/Fonts に追加したものは HKEY_CURRENT_USER\Software\Wine\Fonts にしか無いかもしれません。

f:id:mattintosh4:20130313230819p:plain

フォントリンク

上記の「MS Shell Dlg」は主にユーザーインターフェイスやシステムのダイアログ表示で使用されますが、アプリケーションによって「Tahoma」や「Verdana」を呼び出すことがあります。これらのフォントは日本語を含んでいないため、日本語部分が「□」(四角)に文字化けします。「フォントリンク」はこの不足している文字を補う機能です(msgothic.ttc が存在する場合は勝手に置き換えられます)。この辺は Windows システムとだいたい同じだと思いますので詳しい説明は省略します。

レジストリのサンプルは以下のページにもあります。

iNSTANTWiNE 用追加レジストリ - mattintosh note -hatena- iNSTANTWiNE 用追加レジストリ - mattintosh note -hatena-

フォントリンクの登録方法

フォントリンクは以下の二箇所のキーで設定可能なようです。

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink

  • キーが存在しない場合は新たに作成する。
  • フォントは「ファイル名」で指定する。例えばフォント名が「IPA モナー Pゴシック」であれば「ipagp-mona.ttf」として登録する。
  • TTC ファイルの場合は「ファイル名」の後に「フォント名」を指定する。
  • 複数リンクの場合は「文字列値(REG_SZ)」ではなく「複数文字列値(REG_MULTI_SZ)」で行う。その場合、レジストリの値は Unicode になる。

HKEY_CURRENT_USER\Software\Wine\Fonts\Replacements

  • キーが存在しない場合は新たに作成する。
  • フォント名は「フォント名」で指定する。例えばファイル名が「ipag-mona.ttf」であれば「IPA モナー Pゴシック」または「IPAMonaPGothic」。
  • 複数リンクの場合は「文字列値(REG_SZ)」ではなく「複数文字列値(REG_MULTI_SZ)」で行う。その場合、レジストリの値は Unicode になる。
IPA モナーフォントによる設定例

f:id:mattintosh4:20130313233257p:plain

インポート用レジストリファイルの例
文字列値の場合
REGEDIT4

[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink]
"Tahoma"="ipagp-mona.ttf"
複数文字列値の場合
REGEDIT4

[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink]
"Tahoma"=hex(7):69,70,61,67,70,2d,6d,6f,6e,61,2e,74,74,66,00,00
フォントリンクの確認

環境設定の「画面」タブにある「10 ポイントの Tahoma による見本です」で確認できます。(文字化けするアプリケーションで確認してもOK)

フォントリンク設定前

f:id:mattintosh4:20130313232712p:plain

フォントリンク設定後

f:id:mattintosh4:20130313232748p:plain

ユーザーフォント(~/Library/Fonts)が認識されない

MacPorts 版の Wine で遭遇する問題です。MacPorts 版の fontconfig が使用する /opt/local/etc/fonts/fonts.conf を見てみましょう。(行番号はこちらで付加したもので実際にはありません)

24:<!-- Font directory list -->
25:
26: <dir>/usr/share/fonts</dir>
27: <dir>/usr/X11/lib/X11/fonts</dir> <dir>/Library/Fonts</dir> <dir>/Network/Library/Fonts</dir> <dir>/System/Library/Fonts</dir> <dir>/opt/local/share/fonts</dir>
28: <dir prefix="xdg">fonts</dir>
29: <!-- the following element will be removed in the future -->
30: <dir>~/.fonts</dir>

MacPorts 版の fontconfig はこれらのディレクトリをチェックしますが、ここには ~/Library/Fonts が含まれていません。ここに <dir>~/Library/Fonts</dir> という記述を追加してあげればユーザーフォントを読み込むようになりますが、管理者権限が必要ですし、fontconfig を入れ直したりすると再編集しなくてはいけないのであまりおすすめしません。

解決法1) シンボリックリンクで ~/.fonts を ~/Library/Fonts へリンクする

これが最も簡単な方法です。~/.fonts から ~/Library/Fonts へのリンクを作ってあげます。

ln -s ~/Library/Fonts ~/.fonts

解決法2) 設定ファイルを書く

追加設定ファイルをユーザーが作成することもできます。/opt/local/etc/fonts/conf.d/50-user.conf により以下のファイルとディレクトリがチェックされます。

  • ~/.fonts.conf
  • ~/.fonts.conf.d

~/.fonts.conf は設定ファイルでディレクトリの追加の他、アンチエリアスの設定等を記述することもできます。~/.fonts.conf.d は設定ファイルを分けて置いておくディレクトリです。

今回はとりあえず ~/.fonts.conf でディレクトリの追加だけを行います。

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
    <dir>~/Library/Fonts</dir>
</fontconfig>

解決法3) 05-osx-fonts.conf を ~/.fonts.conf.d 以下にリンクまたはコピーする

/opt/X11/lib/X11/fontconfig 以下にある設定ファイルを流用します。

mkdir ~/.fonts.conf.d
ln -s /opt/X11/lib/X11/fontconfig/conf.avail/05-osx-fonts.conf ~/.fonts.conf.d

解決法4) 環境変数 FONTCONFIG_PATH で設定ディレクトリを変更する

MacPorts 側の fontconfig の設定ファイルではなく XQuartz.app 側の fontconfig の設定ファイルを使います。

FONTCONFIG_PATH=/opt/X11/lib/X11/fontconfig /opt/local/bin/wine regedit

~/.bashrc などに alias で設定しておくこともできます。(※シェルのプロファイルを読み込まない起動の場合は使えません)

alias wine="FONTCONFIG_PATH=/opt/X11/lib/X11/fontconfig /opt/local/bin/wine"

解決法5) $WINEPREFIX/drive_c/windows/Fonts を ~/Library/Fonts に置き換える

※この方法はプレフィックス作成時に毎回行う必要があるのであまりおすすめしません。

Wine のプレフィックスにある C:¥windows¥Fonts を ~/Library/Fonts にリンクします。既存のディレクトリが存在するとシンボリックリンクを作成できませんので事前に削除する必要があります。中にフォントが入っている場合は削除されますので注意して下さい。

以下は $WINEPREFIX が ~/.wine の場合の例です。

rm -rf ~/.wine/drive_c/windows/Fonts
ln -s ~/Library/Fonts ~/.wine/drive_c/windows/Fonts

フォント(ファミリー)名の偽装による MS UI Gothic の生成

「MS UI Gothic」というのはファミリー名を基準にしているようなので FontForge を使って「IPA モナー UI Gothic(ipagui-mona.ttf)」を改造します。FontForge は MacPorts でインストールできます。

「エレメント > フォント情報」を開き、「PS Names」と「TTF名」タブで「ファミリー名」を「MS UI Gothic」に書き換えます。「フルネーム/表示用の名前」は本物と区別をつけるために「MS UI Gothic Fake」としておきます。

変更前

f:id:mattintosh4:20130314014328p:plain

f:id:mattintosh4:20130314012057p:plain

変更後

f:id:mattintosh4:20130314013825p:plain

f:id:mattintosh4:20130314011951p:plain

出力したフォントを Wine がチェックするフォルダにコピーしておきます。

MS Shell Dlg が MS UI Gothic のままでフォントが「IPA モナー UI ゴシック」になりました。

f:id:mattintosh4:20130314012817p:plain

フォントリンクを使わなくても Tahoma にも反映されます。

f:id:mattintosh4:20130314012958p:plain

同様に ipagp-mona.ttf や ipag-mona.ttf を使って「MS Pゴシック」や「MS ゴシック」も偽装できます。ほとんどのアプリケーションはこれで対応できると思いますが、稀に msgothic.ttc を直接指定してくるアプリケーションもあるのでその場合はオリジナルが無いと動作しないかもしれません。

※ライセンスにより改変が禁止されているフォントもあります。
※本物の msgothic.ttc が存在する場合、どうなるかはわかりません。

ゲーム用のフォントが小さい

これはモトヤ系フォントにすると見やすくなることがありました(等幅のため文字が切れることもあります)。「モトヤシータ゛3等幅(MTLc3m.ttf)」と「モトヤLマルベリ3等幅(MTLmr3m.ttf)」でれば GitHub の Android のページ でダウンロードできます。数が多いので「japanese」で検索するといいかもしれません。その他のモトヤのフォントは公式ページでユーザー登録をすることでダウンロードできます。