mattintosh note

どこかのエンジニアモドキの備忘録

macOS での Wine の日本語設定(2019年版)

昔書いた記事が古くなったので改めてまとめておきます。

  • Homebrew 2.1.3
  • MacPorts 2.5.4
  • WineHQ Binary 4.0.1

さくっと設定したい人

これが一番手っ取り早い方法です。下記のコードを最後の改行までしっかりコピーして Terminal.app に貼り付ければ完了です。お疲れさまでした。

Terminal

iconv -f UTF-8 -t CP932 <<! | LANG=ja_JP.UTF-8 wine regedit -
REGEDIT4

[HKEY_CURRENT_USER\\Control Panel\\Desktop]
"FontSmoothingType"=dword:00000002

[HKEY_CURRENT_USER\\Software\\Wine\\Fonts\\Replacements]
"MS UI Gothic"="ヒラギノ丸ゴ ProN W4"
"MS ゴシック"="ヒラギノ丸ゴ ProN W4"
"MS Pゴシック"="ヒラギノ丸ゴ ProN W4"
"MS 明朝"="ヒラギノ明朝 ProN W3"
"MS P明朝"="ヒラギノ明朝 ProN W3"
!

FontSmoothingType の違いについては下記の画像を参考にしてください。

f:id:mattintosh4:20190527224730p:plain
"FontSmoothingType"=dword:00000001

f:id:mattintosh4:20190527224822p:plain
"FontSmoothingType"=dword:0000002

以下は Wine に興味がある方のみ引き続きお読みください。


日本語を含むレジストリデータを regedit.exe に渡す場合、以下のことを守る必要があります。例えば REGEDIT4 が書いてない場合、regedit.exe はデータを読み込みません。また、文字コードを CP932 にしていても Wine が LANG=ja_JP.UTF-8 以外(例えば LANG=en_US.UTF-8)で実行されると正しくデータが登録されません。

実際の Windows 10 のレジストリエディタを確認しましたが、REGEDIT4Windows Registry Editor Version 5.00 に変わり、文字コードも UTF-16LE のようでした。この方法が Wine の方で使えるかはいまのところ確認していません。

system.reg や user.reg を直接編集したい人

system.reg や user.reg(以下、user.reg としてまとめて説明します)はアスキーテキストになっているので文字列型値(REG_SZ)に直接日本語を書くことができません。例えばレジストリエディタで HKEY_CURRENT_USER\Software\Wine\Fonts\Replacements というキーに文字列値として名前が「MS UI Gothic」でデータが「ヒラギノ丸ゴ ProN W4」という設定をしたとします。

f:id:mattintosh4:20190527211837p:plain
Wine - Registry Editor

この場合、user.reg には下記のように登録されます。

user.reg

[Software\\Wine\\Fonts\\Replacements]
"MS UI Gothic"="\x30d2\x30e9\x30ae\x30ce\x4e38\x30b4 ProN W4"

Wine のフォント設定を紹介しているサイトでは「この文字をコピーして貼り付けてください」と説明しているのを見かけますがこれだとアレンジが効かないんですよね。そもそもエスケープされた文字の元がなんだったのかもわからないので不安です。ここではちゃんと自分で日本語から設定を作成して user.reg の形式に合うように変換する方法を紹介します。

まず、テキストエディタで設定を作ります。user.reg の書式は下記のようになっています。ダブルクォートなどの規則をしっかり守りましょう。

"名前"="データ"

私がよく使う HKEY_CURRENT_USER\Software\Wine\Fonts\Replacements に設定するスタンダードな設定は下記の通りです。

レジストリ.reg

"MS UI Gothic"="ヒラギノ丸ゴ ProN W4"
"MS ゴシック"="ヒラギノ丸ゴ ProN W4"
"MS Pゴシック"="ヒラギノ丸ゴ ProN W4"
"MS 明朝"="ヒラギノ明朝 ProN W3"
"MS P明朝"="ヒラギノ明朝 ProN W3"

これを iconv に通しますが、--unicode-subst オプションを使って \xhhhh で出力されるようにします。

Terminal

/usr/bin/iconv -f UTF-8 --unicode-subst="\x%04x" -t ISO-8859-1 レジストリ.reg

Result

"MS UI Gothic"="\x30d2\x30e9\x30ae\x30ce\x4e38\x30b4 ProN W4"
"\xff2d\xff33 \x30b4\x30b7\x30c3\x30af"="\x30d2\x30e9\x30ae\x30ce\x4e38\x30b4 ProN W4"
"\xff2d\xff33 \xff30\x30b4\x30b7\x30c3\x30af"="\x30d2\x30e9\x30ae\x30ce\x4e38\x30b4 ProN W4"
"\xff2d\xff33 \x660e\x671d"="\x30d2\x30e9\x30ae\x30ce\x660e\x671d ProN W3"
"\xff2d\xff33 \xff30\x660e\x671d"="\x30d2\x30e9\x30ae\x30ce\x660e\x671d ProN W3"

あとはコピーして貼ればいいんじゃないかな。

(余談)Linux の場合

Linuxiconv には macOS のような --unicode-subst オプションは無いが、uconv--to-callback escape-c を使えば \uhhhh 形式で出てくるのでこれを sed で変換する。

Terminal

uconv -f UTF-8 --to-callback escape-c -t ISO-8859-1 <<! | sed 's/\u/\x/g'
"MS UI Gothic"="VL Pゴシック"
"MS ゴシック"="VL ゴシック"
"MS Pゴシック"="VL Pゴシック"
!

16進数部は大文字でも小文字でも user.reg は気にしなくてよい。

"MS UI Gothic"="VL P\x30B4\x30B7\x30C3\x30AF"
"\xFF2D\xFF33 \x30B4\x30B7\x30C3\x30AF"="VL \x30B4\x30B7\x30C3\x30AF"
"\xFF2D\xFF33 \xFF30\x30B4\x30B7\x30C3\x30AF"="VL P\x30B4\x30B7\x30C3\x30AF"

rundll32.exe に INF を渡して登録する

面倒過ぎるのであまりおすすめしません。下記のファイルに説明が書いてあります。

https://github.com/mattintosh4/osx-wine-inf/blob/master/osx-wine.inf

FontSmoothingType の違い