お知らせ

  • 利用規約を守って投稿してください。また、よくある質問および投稿の手引きも参照してください。
  • メッセージの投稿にはアカウントが必要です。未登録の方は、ユーザ登録ページからアカウントを作成することができます。

#1 2014-07-09 22:42:50

XP_Exile
メンバ
登録日: 2014-07-01

Tips:Wine: PlayOnLinux上 iTunes 10 文字化け(Tahomaのいわゆる豆腐化)への対処

Lubuntu 14.04上、PlayOnLinux による Wine環境にて iTunes 10をセットアップした際に生じる日本語表示の不具合、いわゆる豆腐文字化けについて、当方の環境において確認できた対処方法についてご紹介します。
ただし他の環境においても有効であることを保証するものではない点について予めお断りしておきます。
結果として長文となってしまいましたが、引用している資料等(特に英文のもの)は後で必要に応じて参照することとして読み飛ばしていただければ、必ずしも難解な内容とはなっていないものと期しております。

目次
1. 要約
2. 基本方針
3. iTunes 10文字化け現象
4. 検証環境
4-1. Wineine
4-2. (winetricks)
4-3. PlayOnLinux
5. 検証過程
5-1. Wineデスクトップ ユーザーインターフェース フォント
5-2. フォントリンク
5-3. フォント代替(FontSubstitutes)
5-4. フォント置換(Replacements)
5-5. (参考)フォント フォールバック(Fallback)
5-6. その他の対処方法
6. 残された疑問点
7. 終わりに

1. 要約
iTundes 10を PlayOnLinux上にてセットアップし、起動すると豆腐状の文字化けを生じる。
その状態を回避するには、下記に構成したキーをレジストリにインポートする。
[フォントリンクの構成] Tahomaによる文字化けの生じる箇所を指定したフォントにより表示
文字化けの生じる箇所を CJKフォント WenQuanYi Micro Hei で表示させる場合

[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink]
"Tahoma"="wqy-microhei.ttc,WenQuanYi Micro Hei"

日本語表示可能な他のフォントを使用する場合 (下記は TakaoPGothic での例)

[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink]
"Microsoft Sans Serif"="wqy-microhei.ttc,WenQuanYi Micro Hei"
"Tahoma"="Z:\usr\share\fonts\truetype\fonts-japanese-gothic.ttf"

後者の場合、フォントファイル名をフルパスで指定します。

[FontSubstitutesによる代替] Wineデスクトップが構成するシステムフォントも含め置換
(TakaoExGothic での例)

[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\FontSubstitutes]
”MS Shell Dlg"="TakaoExGothic"
"MS UI Gothic"="TakaoExGothic"

ここでは同じフォントを指定する必要があります。

オフライン

 

#2 2014-07-09 22:45:30

XP_Exile
メンバ
登録日: 2014-07-01

Re: Tips:Wine: PlayOnLinux上 iTunes 10 文字化け(Tahomaのいわゆる豆腐化)への対処

2. 基本方針
私自身、Windows XPのサポート終了を契機に Linuxを使用し始めたということもあり、Linuxについてはまったくの初心者です。
今回の検証を通じ確認した内容を自身の備忘録として整理しつつ、かつまた私同様に Windows環境からの移行する方々の役にたつ内容となることを期し、若干まわりくどくなることを厭わずとりまとめることとしています。
技術的アプローチも、ユーザー経験により多少はより理解している Windowsの観点に比重をおいてあります。

その方針のもと、今回参照したなかで特に重視したのが次の文書です。
Globalization Step-by-Step(MSDN文書)
今回使用しているフォントリンクや、代替(FontSubstitutes)等の仕組みについて、Windows OS環境において、Unicodeベースの OpenTypeフォントの特性をもとに、いかに組み込まれているかを包括的に記述した文書であり、以下の調査でも適宜参照します。
当初の意図としては、仕様の理解から実装についてより深く理解することができればと臨んだのですが、実際には散見されるギャップのため、かなりの試行錯誤を繰り返しての調査となってしまいました。

調査のきっかけとなったのは、豆腐化について調べていた時に見つけた次の書き込みです。

611 名前:login:Penguin mailto:sage [2008/06/10(火) 13:45:44 ID:Mc/7Hzs9]
何だか日本語アプリが文字化けするなあと思ってたら、/usr/share/wine/fonts に入ってる tahoma.ttf と tahomabd.ttf が無理矢理日本語のところも表示しようとしてた.....
tahomaに日本語のフォントファイルをシンボリックしてやったらとりあえず解決しました。
文字化けしたらlsof|grep アプリ名|grep .ttfしてやると変なフォントで表示しようとしてないか分かるようです

即ち解決の見込みがあることと、lsof コマンドが問題追跡の手段となることが期待できたことから調査に着手した次第なのですが。
Linuxに習熟していれば、「tahomaに日本語のフォントファイルをシンボリック」云々から ln -s コマンドに直結したのでしょうが、その時はそのような発想がなかったため、少々回り道、のつもりが、厄介な迷路に踏み込むこととなってしまいました。

以下の調査内容は、あくまでも PlayOnLinux 上の iTunes 10についてです。
iTunes 10における Tahoma関連の挙動が特殊なため、他の Windowsアプリケーションないし、オリジナルの(~/.wine 以下を指す)Wine環境について汎用的に該当するものではないと思われますが、それでも文字化け関連の問題判別の参考となればと、途中の調査過程についても言及してあります。

オフライン

 

#3 2014-07-09 22:47:49

XP_Exile
メンバ
登録日: 2014-07-01

Re: Tips:Wine: PlayOnLinux上 iTunes 10 文字化け(Tahomaのいわゆる豆腐化)への対処

3. 文字化け事象
iTunes 10の起動後、lsof コマンドで検出されるフォントの相違により、メイン画面が表示されるまでの流れを<フェーズ 1><フェーズ 2>に分けます。
また文字化けの現れ方の相違をもとに、豆腐となる文字化けを<Tahoma小><Tahoma大>と区別します。
PlayOnLinux環境が省略時の構成のもとに、iTunes 10をセットアップし、起動した際の画面フローを、以下、文字化け(豆腐化)の有無、ならびに文字化けの場合それが<小/大>のいずれかを振り分けて記述します。

<フェーズ 1> 文字化け発生せず
(初回のみ)[iTunesソフトウェア使用許諾契約] 本文および [同意します]などのボタンの文字も正常。
[iTunes]「iTunesが正しくインストールされていません。(以下略 インストールの不備によりCD操作不可との由)」(Wine環境での制約か)
(初回のみ)[iTunes]「Bonjourサービスが見つかりません。(以下略)」(今回の環境ではBonjourを削除しているため)
ここまでの画面では文字化けは発生しません。

lsof コマンドから、次のフォントファイルの使用が確認されます。
/usr/share/fonts/truetype/droid/DroidSansFallbackFull.ttf
なお、初回の[ソフトウェア使用許諾]の画面が表示される場合には、Tahomaも検出されますが、文字化けは生じていません。
~/.PlayOnLinux/wine/linux-x86/1.4.1/share/wine/fonts/tahoma.ttf
ここで Tahomaが文字化けとならなかったメカニズムについて、今回の調査では結果として未詳の課題となっています。

<フェーズ 2>
ここで iTunesのメイン画面が表示されますが、「ようこそ」とあるべき文字および他の文字も日本語が豆腐化。
同時に表示されるポップアップ画面に文字化けが生じている。
[iTunes](次のように、日本語が文字化けした部分と文字化けしない部分とが混在)

□□□□□□□□□□□□□ QuickTime □□□□□□□□□□□□□□□ iTunes □□□□□□□□□□□
ムービーを再生するには、QuickTimeをインストールしてください。

この画面を[OK]で抜けてしばらく経つと現れるもう一つの画面でも文字化けが生じている。
[iTunes](先と同様、日本語部分で文字化けと正常な箇所が混在)

□□□□□□□□□□□□□□ 0x8009031800 □□
ネットワークの接続を確認して、やり直してください。

(メニューを開いている時にこのメッセージが生じると画面がフリーズするので注意)

[ようこそ]画面の左下の「ライブラリ情報を Appleに送信」するかどうかのダイアログおよび、その応答として、[同意します](右側・青)または[いいえ](左側・白)と選択するボタン上の文字も豆腐状に文字化け。
Wine環境上 iTunesはネットワーク接続に失敗するので、ここでは[いいえ]で応答すると、次に現れる次の[ミュージック]ライブラリ画面も全面的に豆腐化。
[ようこそ][ミュージック]画面共に、メニュー項目[ファイル][編集][表示][コントロール][ヘルプ]も文字化けしているが、これらをクリックした時のプルダウンメニューの項目は正常に日本語が表示されている。
メニュー二段目の[ミュージック]とあるライブラリ選択のボタンは、他の選択肢の[ムービー][テレビ番組][ホームシェアリング]も文字化けしており、その右側、センターに並ぶ[曲][アルバム][アーティスト][ジャンル][プレイリスト]のメニュー項目も文字化け。
[編集]→[設定]画面では、上部のアイコン化したタブのテキスト[一般][再生][共有][ペアレンタル][デバイス][詳細]が文字化けしているのに対し、下部の設定項目の大半は正常に日本語表示されているが、[再生][Store][ペアレンタル][詳細]にて、設定内容に補助的説明を加えた極小サイズのテキストが豆腐状に文字化け。

このとき lsof コマンドから確認されるフォントファイルは以下の通りです。
/usr/share/fonts/truetype/droid/DroidSansFallbackFull.ttf
~/.PlayOnLinux/wine/linux-x86/1.4.1/share/wine/fonts/tahoma.ttf
~/.PlayOnLinux/wine/linux-x86/1.4.1/share/wine/fonts/tahomabd.ttf

これらの文字化けのうち、ポップアップ画面(二種類)と、[設定]の下部で生じているものを<Tahoma小>とし、それ以外を<Tahoma大>と区別します。実際に前者のフォントサイズが小さいことから便宜的に<小>と命名していますが、文字化けが生じる・生じないの挙動も、このグループ単位で遷移します。
先述にて確認した初期状態では<大><小>どちらも文字化けを生じていますが、設定によっては<大><小>どちらか一方のみが文字化けするといった場合も生じており、このことが調査に難航を来した大きな要因となりました。

文字化けに関しては、WineCfgの[画面]の[画面の解像度]の箇所からも文字化けが確認できます。

10 □□□□□ Thamoa □□□□□□□
(正常に表示される場合は)
10 ポイントの Thamoa による見本です

PlayOnLinuxでは、[iTunes 10 - 設定][Wine]タブから[Configure Wine]を選択し[Wine設定]画面を開きます。
この箇所の文字化けは<Tahoma小>に該当します。

MSDNより以下の内容を確認しています。
Character Sets Used by Fonts

Windows Character Set
...
Many fonts specify a default character. Whenever a request is made for a character that is not in the font, the system provides this default character. Many fonts using the Windows character set specify the period (.) as the default character. TrueType and OpenType fonts typically use an open box as the default character. ...

即ち欧文フォントの Tahomaにて日本語の表示が要求され、対応できなかったためにデフォルトの"open box"即ちいわゆる豆腐が生じていたとのことです。
一方 DroidSansFallbackFull は CJKフォントであることから日本語も表示可能で、メニューなど文字化けしていない箇所は同フォントを用いて表示されています。

オフライン

 

#4 2014-07-09 23:01:32

XP_Exile
メンバ
登録日: 2014-07-01

Re: Tips:Wine: PlayOnLinux上 iTunes 10 文字化け(Tahomaのいわゆる豆腐化)への対処

4. 検証環境
Lubuntu 14.04 LTS 上に、以下を構築
4-1. Wine

sudo add-apt-repository ppa:ubuntu-wine/ppa
sudo apt-get update
sudo apt-get install wine
sudo apt-get install wine1.7

インストール後メニューから[Wine]→[Programs]→[Accesories]→[Notepad]を実行し、~/.wine 環境をセットアップしておく。
Wineは、1.6.2から 1.7.19にアップグレード。("wine --version"コマンドにより確認)(投稿直前に改めてセットアップした際には 1.7.20、今回の検証の大半は前者環境でのもの)
Wineインストールの際に Tahomaおよび MS Sans Serif(後述)が以下のディレクトリにインストールされる。
/usr/share/wine/fonts/tahoma.ttf
/usr/share/wine/fonts/tahomabd.ttf
/usr/share/wine/fonts/sserife.fon

4-2. (winetricks) (実際は no operation)
wineticksは明示的にインストールしていないが、Wineインストールの際、特別パッケージとして自動でインストールされている。
winetricksを使用した Takaoフォントのインストールは実行しない。
Takaoフォントは、Ubuntu 10.04 以降の日本語ローカライズ版に組み込まれており、OSセットアップ時に下記にインストール済み。

/usr/share/fonts/truetype/takao-gothic/TakaoExGothic.ttf
/usr/share/fonts/truetype/takao-gothic/TakaoGothic.ttf
/usr/share/fonts/truetype/takao-gothic/TakaoPGothic.ttf
/usr/share/fonts/truetype/takao-mincho/TakaoExMincho.ttf
/usr/share/fonts/truetype/takao-mincho/TakaoMincho.ttf
/usr/share/fonts/truetype/takao-mincho/TakaoPMincho.ttf

winetricksからレジストリエディターを起動すると、これらのフォントが登録されていることが確認できる。

[HKEY_CURRENT_USER\Software\Wine\Fonts\External Fonts] (抜粋)
... ("@"は縦書フォント)
"@Takao Pゴシック (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\fonts-japanese-gothic.ttf"
"@Takao P明朝 (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\fonts-japanese-mincho.ttf"
"@TakaoExゴシック (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\takao-gothic\\TakaoExGothic.ttf"
"@TakaoEx明朝 (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\takao-mincho\\TakaoExMincho.ttf"
"@Takaoゴシック (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\takao-gothic\\TakaoGothic.ttf"
"@Takao明朝 (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\takao-mincho\\TakaoMincho.ttf"
...
"Takao Pゴシック (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\fonts-japanese-gothic.ttf"
"Takao P明朝 (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\fonts-japanese-mincho.ttf"
"TakaoExゴシック (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\takao-gothic\\TakaoExGothic.ttf"
"TakaoEx明朝 (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\takao-mincho\\TakaoExMincho.ttf"
"Takaoゴシック (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\takao-gothic\\TakaoGothic.ttf"
"Takao明朝 (TrueType)"="Z:\\usr\\share\\fonts\\truetype\\takao-mincho\\TakaoMincho.ttf"
...
同様のエントリーが下記のキーにも存在。
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Fonts]
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Fonts]
更に [HKEY_CURRENT_USER\Software\Wine\Fonts\Cache\]以下に、各フォントのキーが組み込まれている。

$ readlink -f /usr/share/fonts/truetype/fonts-japanese-gothic.ttf
/usr/share/fonts/truetype/takao-gothic/TakaoPGothic.ttf
$ readlink -f /usr/share/fonts/truetype/fonts-japanese-minccho.ttf
/usr/share/fonts/truetype/fonts-japanese-minccho.ttf
$  (メモ: レジストリ上の TakaoPゴシック/TakaoP明朝のパスはリンク)

$ fc-match
fonts-japanese-gothic.ttf: "Takao Pゴシック" "Regular"
$ fc-match sans-serif
fonts-japanese-gothic.ttf: "Takao Pゴシック" "Regular"
$ fc-match serif
fonts-japanese-mincho.ttf: "Takao P明朝" "Regular"
$ (メモ: Takaoのプロポーショナルが標準フォントとして選択される)

即ち、Takaoフォントは、Wineからも利用可能なフォントとして組み込まれていることから、改めて winetricksを使用してのインストールは今回は行わない。
総じて、iTunes 10を PlayOnLinux上で動作させる限りにおいて、基本的に winetricksでの操作は不要。
(ここでの記述はド初心者の備忘録的側面が顕著ですが、ご容赦のほど orz)

4-3. PlayOnLinux
4-3-1 PlayOnLinux セットアップ

wget -q "http://deb.playonlinux.com/public.gpg" -O- | sudo apt-key add -
sudo wget http://deb.playonlinux.com/playonlinux_precise.list -O /etc/apt/sources.list.d/playonlinux.list
sudo apt-get update
sudo apt-get install playonlinux

バージョンは 4.2.2を使用
インストール直後[ゲーム]→[PlayOnLinux]で起動(画面 手順9〜14参照)
初回起動時の PlayOnLinux環境構築の過程にて、MS Core Fontsのインストールが促される。
~/.PlayOnLinux/fonts ディレクトリに .ttf フォントが展開され、Tahoma(二種)も含まれる。.PlayOnLinux は隠しディレクトリ。

4-3-2. iTunes 10のセットアップ
PlayOnLinux画面より、[インストール]→[マルチメディア]→[iTunes 10]を選択。
最初に wine 1.4.1がダウンロードされ、~/.wine とは別個に新しい仮想(virtual)ドライブ(prefixと称する)が用意される。
winetricks使用時には "WINEPREFIX=~/.PlayOnLinux/wineprefix/iTunes10" と参照。
wine用のフォントディレクトリとして下記が展開され、Tahoma(二種)および Microsoft Sans Serif(sserife.fon)等もここにコピーされる。
~/.PlayOnLinux/wine/linux-x86/1.4.1/share/wine/fonts

$ ls ~/.PlayOnLinux/wine/linux-x86/1.4.1/share/wine/fonts
coue1255.fon  hvgasys.fon   smalleg.fon   sserifeg.fon  vgas1257.fon
coue1256.fon  jsmalle.fon   smaller.fon   sserifer.fon  vgas874.fon
coue1257.fon  jvgasys.fon   smallet.fon   sserifet.fon  vgasys.fon
coure.fon     marlett.ttf   ssee1255.fon  svgasys.fon   vgasyse.fon
couree.fon    smae1255.fon  ssee1256.fon  symbol.ttf    vgasysg.fon
coureg.fon    smae1256.fon  ssee1257.fon  tahoma.ttf    vgasysr.fon
courer.fon    smae1257.fon  ssee874.fon   tahomabd.ttf  vgasyst.fon
couret.fon    smalle.fon    sserife.fon   vgas1255.fon
cvgasys.fon   smallee.fon   sserifee.fon  vgas1256.fon

(一度 sserife.fon がインストールされなかった場合がりました。後述するように結構重要なファイルのため、ご確認を。)

途中"Do you want to install iTunes 10 to sync an USB device?"の問いに[はい]と答えると、"Wine does not support USB yet. You will not able to sync your iDevices with PlayOnLinux. Sorry."でインストールが終了する。Apple Mobile Device Supportコンポーネントはセットアップ完了後に削除することとする。

参考: wine FAQ 5.6. ハードウェアデバイス用ドライバをインストールするのに Wine を利用できますか?
できません。いくつかのプリンタドライバは将来的には例外ですが、Wine では既にハードウェアが OS 上で動作している必要があります。この問題の技術上の理由は、多くのアプリケーション同様、Wine がカーネルモードではなくユーザーモードで動いているためです。

Wine Geckoのセットアップ照会に[OK]で応えるとダウンロードにより組み込まれる。

iTunes のインストーラーで構成するオプションとして、Default iTunes Language: には Japaneseを選択。他のオプションはチェックを外す。

インストール完了後、PlayOnLinux 右側ペインの Actionsより、iTunes 10[設定]を選択。
[Wine]タブ→[Wine Uninstaller]を選択し、以下のコンポーネントを削除。
- Apple Mobile Device Support (iDevicesとの syncのための機能)
- Apple Software Update
- Bonjour
後の二つは、Wine上での iTunesのネットワーク接続ができないために無用として削除している。
先に 3. での画面フローにて現れたメッセージで「Bonjourサービス」云々はここで削除したことに起因したもの。
ただし iTunes Storeに接続できなかった、というエラーメッセージは、ここでの構成とは無関係に発生する。
Apple Mobile Device Supportがあると、iTunesを繰り返し起動しているうちに distnoted.exeプロセスが複数起動し、メモリを圧迫することからも削除が望ましい。
以下のコンポーネントのみ残す。
- Apple Application Support
- iTunes
- Wine Gecko 1.4

4-3-3. PlayOnLinuxによるテスト手順
今回のテストは以下の手順を繰り返す形で実行しています。
(1) [PlayOnLinux-設定][Wine-レジストリエディタ]にて、レジストリのセットアップ
(2) [PlayOnLinux-設定][Wine-Windows reboot]による Wine環境再起動
(3) [PlayOnLinux-メイン]から、iTunes 10 を起動
(4-1) <フェーズ 1> 画面の文字表示の確認と、lsof コマンドによる使用フォント確認
(4-2) <フェーズ 2> 画面の文字表示の確認と、lsof コマンドによる使用フォント確認

レジストリの編集方法

wine FAQ 7.17. Wine の レジストリを編集するにはどうすればいいですか?
Wine のレジストリは ~/.wine 内にある .reg ファイルに保存されていますが、使われているエンコーディングのため、これらのファイルを手動で直接編集すべきではありません。常に Wine に搭載されている regedit を使うようにしてください。これはターミナルで wine regedit と入力して使用することができます。Wine の regedit は Windows 版の regedit と実質同等であり、レジストリファイルのインポートとエクスポートもサポートしています。
UsefulRegistryKeys も参照してください。

試験運用中なLinux備忘録・別館 2. Wine → 2.4 レジストリ → 2.4.2. Wineのレジストリファイル

Microsoft Support: .reg ファイルを使用してレジストリ サブキーおよび値を追加、変更または削除する方法

@IT .regファイルを「手書き」してレジストリに読み込ませる方法
@IT Windows 2000のレジストリ ファイルはUnicode形式
Windows 2000のレジストリ エディタでは、互換性を維持するために、従来のASCIIコード形式のレジストリ ファイルも読み込めるようになっているが、筆者が試したところでは、バイナリデータが記述されたエントリを含む、比較的大きなサイズのレジストリ ファイル(ASCII形式)で試したところ、読み込めない場合があった。したがって確実な処理を望むなら、ASCIIコード形式のレジストリ ファイルは、Unicode形式に変換してから読み込むようにしたほうがよい。

私の場合、エンコーディングにおける制約を回避するため、以下の手順でインポートファイルを使用しています。
最初に主要なキーをエクスポートしておきます。
レジストリエディタの左側にて、対象となるキーを選択します。右側画面にキーの内容が表示されていることを確認した上で、キーを右クリックし、[エクスポート]を選択。
[ファイルの種類:]にて[Win9x/NT4 登録ファイル(REGEDIT4)]を選択することでテキスト形式でファイル出力されます。([ファイルの種類:]が[登録ファイル(*.reg)]だとバイナリ出力に。)
エディター(Lubuntuでは Leafpad)で、追加したい内容もしくは変更したい内容のみを記述し、無用な箇所は削除します。
冒頭で紹介した例では以下のようになります。

REGEDIT4

[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\FontSubstitutes]
;(修正前) "MS Shell Dlg"="MS UI Gothic"
"MS Shell Dlg"="TakaoExGothic"
"MS UI Gothic"="TakaoExGothic"

";"から始まる行はレジストリエディタからは無視されるのでコメントなどに使用します。
保管に関し、拡張子は .reg とし、上記に引用した@ITの文書では、Unicode(UTF-16)形式を推奨していましたが、私自身は[ファイルの種類:]に[Win9x/NT4 登録ファイル(REGEDIT4)]とあることから、[文字コード]を CP932 [改行コード]を CR+LF で保管していて、それでも今回のテストで使用した内容であれば読み込みに支障はなかったです。
(試験運用中なLinux備忘録・別館 2.10.2. IPAモナーフォントインストール用verbファイルにて iconvコマンドで -t CP932 を指定している、その他同サイト上のサンプルも CP932でエンコードされていることを参照の上、今回の検証では CP932を使用しています。)

インポートはレジストリエディタ[ファイル]メニューから[レジストリをインポート]を選択し、準備したファイルをインポートします。
F5キーでキーの内容が更新されたことを確認します。指定した内容が反映されない場合は入力ファイルにエンコード上の不整合がある可能性が考えられます。
レジストリ操作において、対象となるする主要なキーをレジストリエディタの[お気に入り]に登録しておくとアクセスに便利です。

[PlayOnLinux-設定][Wine-Windows reboot] を選択すると、~/.PlayOnLinux/wine/*.reg ファイル(三種)が更新され、iTunes 10用仮想ドライブ(prefix)の Windows環境が再起動されます。

iTunes により使用されたフォントは "lsof | grep iTunes | grep '\.tt.'" の出力して確認します。

メモ: '\.tt.'で ".ttf", ".ttc"共にマッチ
単に tt. だと "http"もマッチするため、メタ文字でないピリオド'\.'を先行させ、''で括る
参照: 正規表現: 便利なgrepの使い方
grep によるパターンの検索

確認されたフォントは、末尾に "| grep -v tahoma" のように追記して消し込むことにより、使用フォントを網羅した確認を行います。

オフライン

 

#5 2014-07-09 23:26:44

XP_Exile
メンバ
登録日: 2014-07-01

Re: Tips:Wine: PlayOnLinux上 iTunes 10 文字化け(Tahomaのいわゆる豆腐化)への対処

5. 検証過程
5-1. Wineデスクトップ ユーザーインターフェース フォント
5-2. フォントリンク
5-3. フォント代替(FontSubstitutes)
5-4. フォント置換(Replacements)

5-5. (参考)フォント フォールバック(Fallback)
5-6. その他の対処方法

先述の 3.にて、PlayOnLinux 初期構成において、<フェーズ 1>でのメッセージ、並びに<フェーズ 2>でもプルダウンメニューの項目や設定画面の大半など正常に日本語が表示されている箇所がありました。
それらの一部は、下記の操作インターフェースを使用してのカスタマイズが可能となっています。
[PlayOnLinux - iTunes 10 設定]→[Wine - Configure Wine]→[Wine設定 - デスクトップ統合]

試験運用中なLinux備忘録・別館 2. Wine → 2.2 フォント →
2.2.1. ユーザインターフェース(UI)のフォント
UIのフォントの多くは以下の優先順位で決められる。
1. 「MS UI Gothic」として認識されるフォント
...
メニューなどのフォントはGUI設定ツールwinecfgの「デスクトップ統合」タブの「外観 - 項目」から項目選択後右のボタンから設定することもでき、...。
winecfgで使用フォントが指定できる箇所(Wine 1.4時点)
- アクティブ タイトルのテキスト
- ヒントのテキスト
- メッセージ ボックスのテキスト
- メニューのテキスト
...
記事リンク: 試験運用中なLinux備忘録
Wine 0.9.43のwinecfgでのフォント設定
...
「フォントの指定」ダイアログから
- フォント名
- フォントスタイル
- フォントサイズ
を指定することで、それぞれのフォントを設定できる。
...
残念ながら、UIフォントに関しては、ここの設定だけでは化けてしまう部分が残ってしまうため、現状では、${WINEPREFIX}/dosdevices/c:/windows/fonts/の中に、使用したいフォントファイルへのシンボリックリンクを入れるか、フォント置換でMS UI Gothicを設定する。

参照: Globalization文書
Figure 4: A simplified font selection dialog box.
Another approach to run–time font selection is to display a font selection common dialog box, from which the user can select the desired font. (See Figure 4.) With the ChooseFont API, you can control the list of fonts that are returned to the user, and you can limit the fonts to a given character set.

[フォントの指定]ダイアログにて設定可能な項目は限定されていますが、メニュー上のエントリに文字化けが生じているという場合は、この設定により対処可能となります。

私の方で調査した内容は以下の通りです。
上記の四つのフォントは、[メッセージ ボックスのテキスト]を除き、[外観 - 項目]にてフォントの色が変更可能。初期構成では[アクティブ タイトルのテキスト]は白、[ヒントのテキスト]および[メニューのテキスト]は黒で構成されている。
[外観 - 項目]から選択可能な項目でテキスト関連のものには、[フォント]ボタンを押しての構成はできないが、色のみ変更可能な以下の項目がある。
- ウィンドウのテキスト (黒)
- コントロールのテキスト (黒)
- 灰色テキスト (灰)
- 選択項目のテキスト (白)
- 非アクティブ タイトルのテキスト (白)

最初に試みたのは、iTunes 10の英語版をセットアップし、[Wine設定 - デスクトップ統合]画面にて上記のフォントのうち、黒色かつ色の変更可能なもの(メッセージ ボックスのテキストを除く)の色を変更した上で起動。文字化けの生じていない英語版の画面にて各項目の配置を確認した。結果は以下の通り。

メニューのテキスト

プルダウン メニュー上に表示される項目は文字化け無し。
メイン画面上、トップ メニューの上段[ファイル][編集][ヘルプ]等、下段[ミュージック][曲][アルバム]等はメニュー項目に該当せず(色が反映しない)<Tahoma大>で文字化け→不明

コントロールのテキスト

ボタン上のテキストは文字化け無し
例外: [ようこそ][ミュージック(ライブラリ)]画面の大ボタン各二つ、コントロールに該当せず(色が反映しない)<Tahoma大>で文字化け →不明
[設定]画面上部のタブアイコンのテキスト[一般][再生][詳細]等<Tahoma大>で文字化け

ウィンドウのテキスト

(その他ダイアログを構成する文字列)
正常に日本語表示 (<Tahoma大・小>とフォントが異なることを確認)
文字化け<Tahoma小> (メッセージ"QuickTime","iTunes Store"および[設定]下部)

不明(色による識別不可)

[ようこそ]画面および[ミュージック]画面、全般的に<Tahoma大> (色は黒)

メッセージ ボックスのテキスト

該当なし(色は黒で変更できないが、フォントは設定可能: [ようこそ][ミュージック]画面はここでの設定を踏襲していない)

[ウィンドウのテキスト]にて正常に日本語表示されている箇所と、<Tahoma大>および<Tahoma小>の箇所とを英語版の画面にて比較し、使用されたフォントがそれぞれ異なっていることを確認しています。(特に小文字の"g"にて顕著)

PlayOnLinuxの初期構成において、<フェーズ 1>では日本語表示に異常はなく、lsofコマンドにより Droid Sans Fallbackフォントを使用していることが確認できます。ただし初回の起動時[ソフトウェア使用許契約]の画面の際には、Droid Sans Fallbackフォントに加え、Tahomaの使用が検知されました。即ち Droid Sans Fallbackフォントにより日本語が表示されている場合でも、lsof コマンドで確認した場合、Tahomaが顕在する場合としない場合とがあるようです。
これに加え、Tahomaの<大>および<小>を加えて、少なくとも四通り Tahomaから実際の出力に割り振るまでのパターンがあるものと考えられます。
結局のところ、今回の調査を通じこのあたりの仕組みを解明することはできませんでした。
このあたりを調査するには、GDIまわりの挙動をあたる必要があるかもしれません。

補足: GDIに関して
今回の検証に GDI(Graphics Device Interface)についてアプローチすることはありませんでした。
テキストの出力処理に GDIの占める位置づけから、文字化けの対処にて GDIを考慮する必要があるケースがあるかもしれません。

PlayOnLinux上での iTunes 10環境においては、[設定 - Wine - Configure Wine]からの[Wine設定]の[ライブラリ]タブ画面[DLLオーバーライド]の[既存のオーバーライド:]として[*gdiplus(ネイティブ版)]が設定されています。

参照: MSDN文書 フォントとテキストの使用
GDI+ と GDI には、Windows フォームでテキストを描画するためのクラスがいくつか用意されています。GDI+ の Graphics クラスにはいくつかの DrawString メソッドがあり、これらのメソッドを使用して、テキストの位置、外接する四角形、フォント、書式などのさまざまな特徴を指定できます。... GDI のメソッドを使用して、位置、フォント、および書式を指定することも可能です。...

色の変更は、レジストリの下記のキーに反映される。
[HKEY_CURRENT_USER\Control Panel\Colors]

[フォントの指定]にて、フォントを構成し、[OK]で確定すると、レジストリの下記のキーに反映される。
[HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics]
ただし設定内容はレジストリエディタ画面上でも16進での表示となる。

PlayOnLinux初期構成にて文字化けを生じていない箇所について、以下での調査にあたり便宜上 Wineデスクトップ ユーザーインターフェース フォントと仮称することとします。いずれも Droid Sans Fallbackフォントを使用していることを確認済みですが、レジストリ上の設定内容の保管先となる上記キーには初期構成では該当する項目が確認できず、その都度決定されているものと考えられます。
一方[フォントの指定]ダイアログにて、@Droid Sans Fallbackが選択肢の先頭にあるのが名前順の先頭であるように、Wineデスクトップ ユーザーインターフェース フォントの選択も当リスト上の名前順を反映して決定されているのではないかと推定し、その確認のために、Droid Sans Fallbackを Wine環境から削除し、リスト上の次のエントリの @TakaoPGothicに更新されるかどうかを試してみました。

/usr/share/fonts/truetype/droid ディレクトリごと削除
レジストリエディタで、以下のキーから Droid Sans Fallback 関連の内容を削除
[-HKEY_CURRENT_USER\Software\Wine\Fonts\Cache\@Droid Sans Fallback] → キーごと削除
[-HKEY_CURRENT_USER\Software\Wine\Fonts\Cache\Droid Sans Fallback] → キーごと削除
[HKEY_CURRENT_USER\Software\Wine\Fonts\External Fonts] → 値の先頭に"-"を付加し無効化
"@Droid Sans Fallback (TrueType)"="-Z:\\usr\\share\\fonts\\truetype\\droid\\DroidSansFallbackFull.ttf"
"Droid Sans Fallback (TrueType)"="-Z:\\usr\\share\\fonts\\truetype\\droid\\DroidSansFallbackFull.ttf"
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Fonts] → 値の先頭に"-"を付加し無効化
"@Droid Sans Fallback (TrueType)"="-Z:\\usr\\share\\fonts\\truetype\\droid\\DroidSansFallbackFull.ttf"
"Droid Sans Fallback (TrueType)"="-Z:\\usr\\share\\fonts\\truetype\\droid\\DroidSansFallbackFull.ttf"
(ここでのレジストリ操作は、実際にはレジストリエディタGUI上で実行しています。)

[設定 - Wine - Windows Reboot]後、iTunes 10を起動すると、Wineデスクトップ ユーザーインターフェース フォント並びに[フォントの指定]ダイアログ上のフォント選択肢リストの先頭エントリが、期待通り @TakaoPGothic即ち TakaoPゴシックと変更されていました。

同様に、@TakaoPゴシックを削除し、次のエントリの@TakaoP明朝に切り替わるかについても検証を試みました。

リンクファイル /usr/share/fonts/truetype/fonts-japanese-gothic.ttf を削除
レジストリの操作
[-HKEY_CURRENT_USER\Software\Wine\Fonts\Cache\@Takao Pゴシック] → キーごと削除
[-HKEY_CURRENT_USER\Software\Wine\Fonts\Cache\Takao Pゴシック] → キーごと削除
[HKEY_CURRENT_USER\Software\Wine\Fonts\External Fonts] → 値の先頭に"-"を付加し無効化
"@Takao Pゴシック (TrueType)"="-Z:\\usr\\share\\fonts\\truetype\\fonts-japanese-gothic.ttf"
"Takao Pゴシック (TrueType)"="-Z:\\usr\\share\\fonts\\truetype\\fonts-japanese-gothic.ttf"
ackFull.ttf"
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Fonts] → 値の先頭に"-"を付加し無効化
"@Takao Pゴシック (TrueType)"="-Z:\\usr\\share\\fonts\\truetype\\fonts-japanese-gothic.ttf"
"Takao Pゴシック (TrueType)"="-Z:\\usr\\share\\fonts\\truetype\\fonts-japanese-gothic.ttf"
ackFull.ttf"
(ここでのレジストリ操作は、実際にはレジストリエディタGUI上で実行しています。)

[設定 - Wine - Windows Reboot]後、iTunes 10を起動すると、Wineデスクトップ ユーザーインターフェース フォント並びに[フォントの指定]ダイアログ上のフォント選択肢リストの先頭エントリが、期待通り @TakaoPMincho 即ち TakaoP明朝に変更されていることを確認しました。

一連の調査(詳細は割愛しますが)を通じ、[設定 - Wine Configuration][デスクトップ統合][フォントの指定]ダイアログにリストされるエントリーは、[HKEY_CURRENT_USER\Software\Wine\Fonts\Cache\]のエントリを参照しているように見受けられます。ただし実際に削除を反映するには、ファイルの削除、およびレジストリエントリも@つき(縦書用)・@なし共に全て削除ないし無効化しなければなりませんでした。ただし[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Fonts]上のエントリは残していても結果に影響することはありません。

ここでの検証で確認した限りにおいてですが、Wineにおけるデスクトップ ユーザーインターフェース フォントの選択は、後述する MS shell Dlgキーワードによる制御に対する省略時構成として、[Wine Configuration(WineCfg)][デスクトップ統合]にて明示的に設定されていない限り、レジストリ[HKEY_CURRENT_USER\Software\Wine\Fonts\Cache\]キー以下のフォントのエントリより名前順にピックアップされているものと考えられます。

レジストリの[HKEY_CURRENT_USER\Software\Wine\Fonts\Cache\]キーについて、Wine以下に配置されているように、Windows OS由来ではなく、Wineで独自に組み込まれたキーのようですが、WineHQ文書 Useful Registry Keysも含め、このキーについて解説した文書を確認できませんでした。

オフライン

 

#6 2014-07-09 23:59:14

XP_Exile
メンバ
登録日: 2014-07-01

Re: Tips:Wine: PlayOnLinux上 iTunes 10 文字化け(Tahomaのいわゆる豆腐化)への対処

5. 検証過程
5-1. Wineデスクトップ ユーザーインターフェース フォント
5-2. フォントリンク
5-3. フォント代替(FontSubstitutes)
5-4. フォント置換(Replacements)

5-5. (参考)フォント フォールバック(Fallback)
5-6. その他の対処方法

5-2-1. ソリューション要約
最初に、結論として冒頭で紹介した内容を再掲し、若干の補足を加えます。
ここでの設定では、Tahomaによる文字化けの生じる日本語の箇所を指定したフォントにより補完する形での対応となります。
CJKフォント WenQuanYi Micro Hei を使用する場合

REGEDIT4

[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink]
"Tahoma"="wqy-microhei.ttc,WenQuanYi Micro Hei"

日本語表示可能な他のフォントを使用する場合 (下記は TakaoPGothic での例)

REGEDIT4

[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink]
"Microsoft Sans Serif"="wqy-microhei.ttc,WenQuanYi Micro Hei"
"Tahoma"="Z:\usr\share\fonts\truetype\fonts-japanese-gothic.ttf"

省略時構成では構成されていないキーのため、新規にキーを追加しています。
"Tahoma"に対し、日本語表示可能なフォントファイルを指定します。
WenQuanYi Micro Hei は複数のTrue Typeフォント(ttf)からなるコレクション(ttc)のため、使用する書体(font face)名をカンマで続けて特定する必要があります。
前者のフォントファイル名のみ指定する方法は、WenQuanYi Micro Hei でのみ有効で、他のファイルの場合は、<Tahoma小>は正しく日本語表示されますが、<Tahoma大>の文字化けが解消しません。

後者のように、フォントファイルをフルパスで指定することにより、<Tahoma大>の文字化けを解消することが可能ですが、<Tahoma小>の文字化けを解消するためには、追加で "Microsoft Sans Serif"の指定が必要です。
WenQuanYi Micro Hei もフルパスで指定した場合には、"Microsoft Sans Serif"の指定が必要です。

ファイルのパスは、レジストリの下記のキーから取得します。
[HKEY_CURRENT_USER\Software\Wine\Fonts\External Fonts] または
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Fonts]

以下のフォントでは正常に表示できませんでした。
- Droid Sans Japanese: <Tahoma大>が豆腐化
- Un Batang/Un Batang Bold: <Tahoma大>にて「ミュ□ジック」「ム□ビ□」「簡□」「□連」など

5-2-2. フォントリンクの仕組み
今回の調査にて参照したドキュメントのうち、下記が特に有用でした。

Windows 2000/XPのFont Link機能 (Font Linking)
...この機能を使うと英語のフォントに、日本語のフォントが組み込めます。 ...
...Tahomaという260KBたらずの欧文フォントがなぜ日本語が表示できるのか...
(引用者コメント: 私が今回紹介した設定では複数行文字列を使用していないが、その手順も含め詳細に紹介されています。)

なぜtahomaでハングルが表示できるのか?
(引用者コメント: フォントリンクを解除することにより豆腐文字化けが生じることを示していますが、逆にフォントリンクを構成することにより、豆腐化が解消するのではとの示唆が得られます。)

Microsoft Globalization文書より
Font Linking:
Unlike font fallback, in which the selected font is internally replaced by a predefined font, in font linking it is possible to link one or more fonts (called "linked fonts") to another font (called the "base font"). Once you link fonts, you can use the base font to display code points that do not exist in the base font, but that do exist in one of the linked fonts. For example, linking a hangul font and a Japanese font to a Tahoma font allows you to display both Korean and Japanese characters in Tahoma font.
Note: Font linking can only add glyphs to a base font; you cannot override or replace glyphs in the base font.
...
Important: Font linking is a mechanism enabled within GDI and takes priority over font fallback.

MSDN文書 リンク フォントを有効にする
Windows CE にはフォントをリンクする機能があるので、1 つ以上の TrueType フォントを別の TrueType フォントにリンクすることができます。通常、フォントのリンク機能は、ローマ字フォントで非ローマ字を表示できるようにするために使用されます。...
(引用者コメント: 例として "Tahoma"="\\Windows\\msgothic.ttc,,l,r ,MS ゴシック" が紹介されているが、フォントファイル名の後に指定したパラメータについての説明が無い、一方他の文書にないキーワードについても言及)

端的には、フォントリンクは "ベースフォント"="リンク(linked)フォントファイル" の形で構成します。
上記内容を踏まえ、最初に Windows XPのレジストリから、該当キーにてベースおよびリンクフォントがどう構成されているかを確認しました。
レジストリエディタ画面から確認する場合、複数文字列値のデータも開くと複数行に展開して表示されています。
以下が確認できた構成です。

Windows XP 環境を参照
キー [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink]

Lucida Sans Unicode (Unicode 実ファイル名:L_10646.TTF)

MSGOTHIC.TTC,MS UI Gothic (日本語)

Microsoft Sans Serif (欧文 実ファイル名:sserife.fon)

MSGOTHIC.TTC,MS UI Gothic (日本語)
SimSun.TTC,SimSun (中国語-簡体字・明朝系)
gulim.ttc,gulim (ハングル)
mingliu.ttc,PMingLiU (中国語-繁体字・明朝系)

MS PGothic (日本語 実ファイル名:MSGOTHIC.TTC,(書体名:)MS PGothic)

L_10646.TTF (Lucida Sans Unicode)

MS UI Gothic (日本語 実ファイル名:MSGOTHIC.TTC,(書体名:)MS UI Gothic)

L_10646.TTF [color=gray](Lucida Sans Unicode)
SimSun.TTC,SimSun (中国語-簡体字・明朝系)
gulim.ttc,gulim  (ハングル)
mingliu.ttc,PMingLiU (中国語-繁体字・明朝系)

Tahoma (欧文 実ファイル名:tahoma.ttf)

MSGOTHIC.TTC,MS UI Gothic (日本語)
SimSun.TTC,SimSun (中国語-簡体字・明朝系)
gulim.ttc,gulim  (ハングル)
mingliu.ttc,PMingLiU (中国語-繁体字・明朝系)

参考 MSDN文書フォント バージョン

ここでは、五つのベースフォントのそれぞれに、一つもしくは複数のリンクフォントが関連付けられています。
欧文フォントに対し、日・中・韓のフォントを、日本語フォントに対し、中・韓および Unicodeのフォントを補完するよう構成されており、こうしたフォントリンク構成により、Windows XPにおいて日本語並びに中国語や韓国語をも含めた多言語出力が実現していることが確認できます。

5-2-3. Wine環境におけるフォントリンク構成
Windows XP環境と同様のフォントリンク構成を Wine環境においても整備することにより、文字化けの問題を解消するという方針で検証に臨むこととします。
しかしながら、実際の Wine環境を確認すると、ベースフォントについて、上記にてファイル名(下線部)を補足してますが、これら五つのうち実際に存在しているのは Tahoma および Microsoft Sans Serif の二種類のみで、いずれも欧文フォントです。

~/.PlayOnLinux/wine/linux-x86/1.4.1/share/wine/fonts/sserife.fon
~/.PlayOnLinux/wine/linux-x86/1.4.1/share/wine/fonts/tahoma.ttf
~/.PlayOnLinux/wine/linux-x86/1.4.1/share/wine/fonts/tahomabd.ttf

一方、これらに割り当てられるべきリンクフォントについても、全て Wine環境に存在しないファイルとなります。
(これでよく一部でも日本語表示されているのが不思議、と 5-1.の Wineデスクトップ ユーザーインターフェース フォントの確認を実施したのが実際の経緯となります。)

Ubuntu Japanese Team Wiki より
UbuntuTips/Application/Wine
...
全般のフォント

絶対にWindowsのフォントをインストールしないでください。ライセンス違反になります。

どうしてもフォントが必要な場合、代替フォントを設定できます。レジストリエディタからReplacementsを検索し、対象となるキーと値を設定してください。

そこで Wine環境にて使用可能なフォントをレジストリのエントリから参照しつつ、それらを使用して、フォントリンクを構成することを試みました。
XPでのフォントリンク構成においては、日本語だけではなく、中国語および韓国語のフォントも複数文字列値で組み込まれていましたが、同様に複数フォントを複数文字列値で指定する代わりに、検証の便宜上から CJKフォントを使用することとし、WenQuanYi Micro Hei および Droid Sans Fallback を手始めに検証を実施しました。

REGEDIT4

[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink]
"Lucida Sans Unicode"="wqy-microhei.ttc,WenQuanYi Micro Hei"
"Microsoft Sans Serif"="wqy-microhei.ttc,WenQuanYi Micro Hei"
"MS PGothic"="wqy-microhei.ttc,WenQuanYi Micro Hei"
"MS UI Gothic"="wqy-microhei.ttc,WenQuanYi Micro Hei"
"Tahoma"="wqy-microhei.ttc,WenQuanYi Micro Hei"

この enQuanYi Micro Heiを使用した構成は幸先良く文字化けが解消しました。
ところが、同じように Droid Sans Fallbackで構成した場合はうまくゆきません。
以下、詳細は割愛しますが、Tahomaをベースフォントとして、CJKフォントに限らず日本語表示可能なフォントをリンクフォントとして構成し、他の四つのベースフォントは全て必要かどうかと選択した構成など、多くのパターンを検証した上での帰結が冒頭で紹介した構成となります。
これらの検証にあたり、WenQuanYi Micro Heiを使用する場合の優位性が顕著であったことから、検証シナリオ、特にTahoma以外のベースフォント構成は専ら同フォントを使用する形を優先して実施しており、同フォント以外のものを割り当てる検証は少数に限られているため、私の方で未検証なパターン(複数文字列値を構成する場合など)で、フォントリンクとして他にも有効な構成があり得ると考えられます。

5-2-4. 他のアプリケーションへの応用
フォントリンクのベースフォントには、今回検証した五つ以外のフォントを組み込むことが可能です。

Windows 2000/XPのFont Link機能 (Font Linking)(再掲)
Windows 2000では、Tahoma, MS PGothic, MS UI Gothic, Microsoft Sans Serif, Lucida Sans Unicodeで、
Windows XPでは、レジストリをみると上と同じなのですが、デフォルトですべてのフォントに働くようです。

即ち、先に実機で確認したように、Windows XPでは実際に五つのファイルがベースフォントとして構成されていましたが、他のファイルもベースフォントとしてフォントリンクを構成することが可能です。

豆腐状の文字化けは、欧文フォントにて自身が字体(glyph)を保持していない多国語のコードをハンドリングできないために生じているという理解のもとに、まずは lsof コマンドで文字化けを生じているフォントを特定し、次にそれをベースフォントとして、フォントリンクを構成するアプローチが想定されます。

今回の検証では、ベースフォントとして、XP同様の五つを指定する形から着手し、結局有用だったのは、Tahoma と Microsoft Sans Serif、即ち Wine環境に実際に存在しているファイルをベースフォントとする構成でした。

一方、5-2-5.考慮点(その 2)にて紹介するように、MS UI Gothic に対しフォントリンクを構成する場合、実ファイル(msgothic.ttc)が存在していなくとも、Wineデスクトップのユーザー インターフェース フォントを制御することとなります。これは 5-3.にて検証しているように、FontSubstitutes(フォント代替)設定にて "MS Shell Dlg"="MS UI Gothic" と指定された Wineデスクトップのユーザー インターフェース フォント指定が、フォントリンクを通じて波及しているものと考えられます。
この設定により、Wineデスクトップのユーザー インターフェース フォントが変更されますが、今回の iTunes 10の Tahomaの文字化けの解消には寄与しないというのが、今回の検証での結論となります。

参考
Windows 7では 40の、Windows 8.1では 59のベースフォントがフォントリンクとして構成されてました。(自前の環境ではなかったのですが)

Windows 8.1 環境 フォントリンクでのベースフォント
Batang, BatangChe, Dotum, DotumChe, Ebrima, Ebrima Bold, Gadugi, Gadugi Bold, Gadugi, Gadugi Bold, Gulim, GulimChe, Gungsuh, GungsuhChe, Khmer UI, Khmer UI Bold, Lao UI, Lao UI Bold, Lucida Sans Unicode, Malgun Gothic, Malgun Gothic Bold,
Meiryo, Meiryo Bold, Meiryo UI, Meiryo UI Bold,
Microsoft JhengHei, Microsoft JhengHei Bold
, Microsoft JhengHei UI, Microsoft JhengHei UI Bold,
Microsoft Sans Serif,
Microsoft YaHei, Microsoft YaHei Bold
, Microsoft YaHei UI, Microsoft YaHei UI Bold,
MingLiU, MingLiU_HKSCS, MingLiU_HKSCS-ExtB, MingLiU_ExtB,
MS Gothic, MS Mincho, MS PGothic
, (Win7_only)MS PGothic MC, MS PMincho, MS UI Gothic,
Nirmala UI, Nirmala UI Bold, Nirmala UI Semilight,
NSimSun, PMingLiU, PMingLiU-ExtB,
(Win7_only)Segoe Media Center, Segoe Media Center Light, Segoe Media Center Semibold,
Segoe UI, Segoe UI Bold, Segoe UI Light, Segoe UI Semibold, Segoe UI Semilight,
SimSun, SimSun-ExtB,
Tahoma

太字は、Windows 7と共通、斜字体は Windows 7のみのエントリ
下線は、Windows XPと共通の五エントリ

ただし、これらのエントリが他言語化対応のためという訳ではないようです。
Globalization文書のフォントリンクの記述の後半にて、フォントサイズの調整のためにフォントリンクが拡張されたとの記述が見受けられます。

Microsoft Globalization文書より
Font Linking:
...
Even so, when font linking occurs, GDI will attempt scale the linked font with the aim of making the glyphs from the linked font appear to match in size the glyphs from the base font. In Windows XP, an algorithm was used that operates in terms of various font metrics. In Vista, this algorithm was found not to give satisfactory results in all scenarios; in particular, it did not give good results when linking to new East Asian fonts that have no embedded bitmaps.
To resolve this problem, an alternate scaling mechanism was introduced: explicit scaling factors for particular linked fonts could be specified in font linking registry entries. Scaling factors are specified as a pair of positive integers. For instance, the value
    MEIRYO.TTC,Meiryo,128,85
indicates that the scaling algorithm should apply the scaling factors 128 and 85 whenever the given base font is linked to the Meiryo font.

5-2-5. 考慮点
(その 1) Microsoft Sans Serif フォント(sserife.fon)について
今回フォントリンクとして構成の対象となっていますが、iTunes 起動の際に"lsof | grep iTunes | grep sserif" としてもマッチせず、ファイルのプロパティから最新アクセスを確認しても、iTunesの起動時刻に反映している訳でありません。
最初にベースフォント五つを全て WenQuanYi Micro Heiで構成し、文字化けが解消したことを出発点にいろいろな組み合わせをテストする中で残った形となります。
後述の 5-3-2.にて Windowsにおいて、デスクトップ ユーザーインターフェース フォントを規定する MS Shell Dlg というキーワードについて紹介しますが、そこで参照する資料の内容の一部を先行して引用しておきます。

MSDN文書Using MS Shell Dlg and MS Shell Dlg 2
On Windows NT 4.0, Windows 2000 or XP, Windows Server 2003, and Windows Vista, both of the logical fonts map to Unicode-based TrueType fonts. MS Shell Dlg usesMicrosoft Sans Serif (which is distinct from MS Sans Serif) for Latin, Greek, Cyrillic, Arabic, Hebrew, and Thai characters; MS UI Gothic for Japanese; Gulim for Korean; Simsun for Simplified Chinese; PMinglu for Traditional Chinese; etc.

即ち、日本語環境における MS UIゴシックと同様に、欧米を含む大多数の言語においては、Microsoft Sans Serif がデスクトップ ユーザーインターフェース フォントとして割り当てられているとのことです。同フォントは欧文フォントであることから、そこに含まれない字体(Glyph)等はフォントリンクにより補うこととなります。そしてWindows OS環境にて実際に同フォントをベースフォントとしたフォントリンクが構成されていることを確認しています。
同じく後述の 5-3-3.にて参照する資料にて、同ファイルが、Windows 2000以降 Tahomaが使用されるまで(NT 4まで)、英語環境 Windowsにおける標準のデフォルト フォントに位置づけられていたとのことです。
更に、後述の 5-5. フォント フォールバックにて、多数のフォントが同ファイルにフォールバックするとの記述を確認しています。
以上のように、Microsoft Sans Serifフォントは、大多数の言語環境にて特別な位置づけを占めています。

しかしながら、今回の日本語環境における iTunes 10の Tahomaの文字化けの発生メカニズムないし解消方法において、Microsoft Sans Serifフォントがどう関与しているかについては、今回究明するまでには至っていません。

今回の iTunesの文字化けの問題には関連しませんが、Globalization文書には、Windows 2000以前の環境において生じる Microsoft Sans Serif フォントの豆腐状の文字化けについて言及されています。
Globalization文書 "Fonts in Dialog Resource Files"の箇所を参照のこと

(その 2) MS UI Gothic にてフォントリンクを構成する場合の影響および注意点
MS UI Gothicは、初期構成にて後述の 5-3.にて検証する "MS Shell Dlg" にフォント代替(FontSubstitutes)指定されていることから、Wineデスクトップ ユーザーインターフェース フォントに規定されています。

試験運用中なLinux備忘録・別館 2. Wine → 2.2.1. ユーザインターフェース(UI)のフォント
UIのフォントの多くは以下の優先順位で決められる。
1. 「MS UI Gothic」として認識されるフォント

重要
バージョン1.3.30から1.4-rc2のWineでは「MS UI Gothic」の置換設定を行わないと豆腐に文字化けしたり「ー」や「…」が縦向きになったりする。これについてはバージョン1.4-rc3で改善されたが、...

...
openBVEなどを動かしたときに豆腐のように文字化けするが、フォントリンク(Font Link)機能により解消できることがある。方法はWindows上と同様でHKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink以下に対象フォント名の複数行文字列型の項目を用意し「[用いたい日本語フォントのファイル名],[そのフォントの名前]」を対象フォント(Tahomaなど)に含めたい分だけ各行に記述する。(例については割愛)

フォントリンクで MS UI Gothic をベースフォントとして構成すると、同ファイルが存在しないために、リンクフォントとして構成されたフォントが検索され Wineデスクトップ ユーザーインターフェース フォントとして使用されます。
しかしながら使用するフォントによっては、上記引用文書にて[重要]とある現象と同様に長音記号「ー」が縦になるという不具合を生じる場合があります。

~/.wine 環境(1.7.20)では問題を生じない。
PlayOnLinuxが iTunes 10用に prefixをセットアップする際にダウンロードするバージョン 1.4.1の Wineに由来する問題と見受けられる。

この事象はレジストリエディタや、WineCfgの画面でも発生します。

正常に表示されるフォント

wqy-microhei.ttc, DroidSansFallbackFull.ttf, DroidSansJapanese.ttf
TakaoPゴシック(TakaoPGothic.ttf), TakaoP明朝(TakaoPMincho.ttf),
梅UIゴシック (ume-ugo4.ttf), 梅UIゴシックO5 (ume-ugo5.ttf), 梅ゴシック (ume-tgo4.ttf), 梅ゴシックC4 (ume-tgc4.ttf), 梅ゴシックC5 (ume-tgc5.ttf), 梅ゴシックO5 (ume-tgo5.ttf), 梅ゴシックS4 (ume-tgs4.ttf), 梅ゴシックS5 (ume-tgs5.ttf), 梅明朝 (ume-tmo3.ttf), 梅明朝S3 (ume-tms3.ttf)

異常を生じるフォント

TakaoExゴシック(TakaoExGothic.ttf), TakaoEx明朝(TakaoExMincho.ttf), Takaoゴシック(TakaoGothic.ttf), Takao明朝(TakaoMincho.ttf)
梅Pゴシック (ume-pgo4.ttf), 梅PゴシックC4 (ume-pgc4.ttf), 梅PゴシックC5 (ume-pgc5.ttf), 梅PゴシックO5 (ume-pgo5.ttf), 梅PゴシックS4 (ume-pgs4.ttf), 梅PゴシックS5 (ume-pgs5.ttf), 梅P明朝 (ume-pmo3.ttf), 梅P明朝S3 (ume-pms3.ttf), UnBatang.ttf, UnBatangBold.ttf(豆腐)

なお、FontSubstitutes にて MS UI Gothic(および MS Shell Dlg)を構成する場合には、このような不具合は生じませんでした。

5-2-5. コメント
フォントリンク構成を、XP 環境を参照し、そこでの構成に近づけるというアプローチから着手した検証でしたが、実際には、かなりの試行錯誤を要してしまいました。
Tahomaに指定するフォントをフルパスで指定するかどうかで動きが異なる(特に WenQuanYi Micro Hei)というあたりは未だに不可解です。
Tahomaで文字化けを生じているところのみ置換されるという点、Wineデスクトップの省略時の Droid Sans Fallbackでのユーザーインターフェースの文字に特に違和感がないという個人的好みから、バランスのよい画面になっているというのが個人的所感です。

参考
Droid Sans Fallbackは Andoroidプロジェクトから派生しており、WenQuanYi Micro Heiも Droid Sansフォントから派生しているとのことです。

16000字超の漢字と11000字超のハングルが入った軽量CJKフォント Droid Sans Fallback

Wikipedia WenQuanYi
WenQuanYi (simplified Chinese: 文泉驿; traditional Chinese: 文泉驛; pinyin: Wénquányì; aka: Spring of Letters) is an open-source project of Chinese computer fonts licensed under GNU General Public License.
...
WenQuanYi Micro Hei (文泉驿微米黑), WenQuanYi Micro Hei Mono (文泉驿等宽微米黑) are derived from the Droid Sans font (merged with Droid Sans Fallback) and readable in compact sizes.

オフライン

 

#7 2014-07-10 00:24:21

XP_Exile
メンバ
登録日: 2014-07-01

Re: Tips:Wine: PlayOnLinux上 iTunes 10 文字化け(Tahomaのいわゆる豆腐化)への対処

5. 検証過程
5-1. Wineデスクトップ ユーザーインターフェース フォント
5-2. フォントリンク
5-3. フォント代替(FontSubstitutes)
5-4. フォント置換(Replacements)

5-5. (参考)フォント フォールバック(Fallback)
5-6. その他の対処方法

5-3-1. ソリューション要約
最初に、結論として冒頭で紹介した内容を再掲し、若干の補足を加えます。
ここでの設定では、MS Shell Dlg に明示的に値を構成するため、Wineデスクトップ環境のユーザーインターフェースのフォントも含め置換します。
省略時構成のキーの下記の箇所を修正します。

[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\FontSubstitutes]
”MS Shell Dlg"="MS UI Gothic"

例として、TahomaExGothic で構成する場合は、以下のようになります。

REGEDIT4

[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\FontSubstitutes]
”MS Shell Dlg"="TakaoExGothic"
"MS UI Gothic"="TakaoExGothic"

この設定により<フェーズ 1>で表示される画面も含め指定したフォントで構成される。
両キーワードで異なるフォントを指定した場合、MS Shell Dlg で指定したフォントが使用され、<Tahoma大>は正常に日本語表示されるが、<Tahoma小>の文字化けが解消しない。
MS UI Gothic の指定が無い場合は、<大><小>共に文字化けとなる。

FontSubstitutesでは書体(font face)名を指定します。
レジストリの下記のキーから名前を取得します。
[HKEY_CURRENT_USER\Software\Wine\Fonts\Cache\<フォント名>]
English Name での値、もしくはそのサブキー(下記の Regularの他、Boldなど)
[HKEY_CURRENT_USER\Software\Wine\Fonts\Cache\<フォント名>\Regular]
Full Name の値
WenQuanYi Micro Heiなど、前者が無いため後者にて指定します。

以下のフォントでは正常に表示できませんでした。
- Droid Sans Japanese: 英数字を含まないため<小>にて英数字の欠落、<大>の豆腐化
- Un Batang および Un Batang Bold: 文字化け解消せず(<大・小>共)

フォントリンクにて MS UI Gothic に指定した際に長音記号「ー」が縦になるといった問題を生じたフォントも、FontSubstitutes での指定では不具合を生じない。

5-3-2. MS Shell Dlg
Globalization文書では、FontSubstitutes についての記述はフォントリンクの場合と比較すると対照的に端的でした。

Globalization文書より
Font Substitution:
Font substitution is used by GDI to translate a request for one face name into a request for another face name. (以下、実例については割愛)

MSDN文書 REG: Fonts Entries
FONTSUBSTITUTES ENTRIES
The entries in the FontSubstitutes subkey define substitute typeface names for fonts under the following Registry path:
   HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes
You should not need to modify these entries. This subkey is usually used by applications with a special need to equate font names.
Alternate name   REG_SZ   Actual name
...
(引用者コメント: 下線部のようにユーザーによる操作についてネガティブに言及されている点に留意のこと)

最初に、省略時のキーのうち、今回の問題に関連ありそうなキーワードとして、下記に着目しました。

[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\FontSubstitutes]
"MS Shell Dlg"="MS UI Gothic"
"MS Shell Dlg 2"="Tahoma"

Substituite(代用する、代える)するのに、Wine環境にファイル(msgothic.ttc)が存在しない MS UI Gothicと、現に文字化けを生じている Tahomaを以ってするというのはいかがなものか、という発想から、これら四つを全て[左辺]とし、[右辺]に日本語表示可能なフォントを指定する方針で調査に着手しました。
MS Shell Dlg に指定したフォントにより、<Tahoma大>はすぐに正しく表示されるようになるのですが、"MS UI Gothic"に同じフォントを指定するまで、<Tahoma小>の文字化けは解消せず、両者が一致していたならば、他の二つ(MS Shell Dlg 2, Tahoma)の指定は必要ではありませんでした。

なお、フォント代替(FontSubstitutes)にて Tahomaを左辺に、右辺には代替指定する他のフォント名をセットした場合でも、lsof コマンドの出力より Tahomaが使用されていることが確認されており、FontSubstitutesにより Tahomaの使用を抑制するものではないように見受けられます。

MSDN文書: Font-name
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes
... Associates an alternative font with the actual font that a program requests or a document uses. ...
For example, the following entry indicates that Arial can be substituted for Helvetica, if Helvetica is not available...
(引用者註) 末尾にあるように、FontSubstitutesでの代替は、そもそも左辺に指定したフォントが使用できない場合に機能するということのようです。

以下、フォント代替(FontSubstitutes)構成において、特に重要なエントリである MS Shell Dlg に関し補足します。
実際に MS Shell Dlg という名前のフォントが存在している訳ではなく、文書によっては擬似フォントととも称されています。

(比較的古いバージョンでの解説、日本語訳があることから参照の便のため付加)
MSDN文書 言語の問題
フォント
Windows には、特定のスクリプトを表示する場合に適切なフォントを選択する機能があります。Windows では、MS Shell Dlg という新しい書体名を使ってこれを実現しています。MS Shell Dlg は、コード ページ 1252 の中に含まれない文字を持つカルチャ/ロケールを Windows でサポートするためのマップ機構です。フォントではなく、存在しないフォントを表す書体名です。MS Shell Dlg 書体名は、現在のカルチャ/ロケールに関連付けられた既定(default)のシェル フォントに変換(map)されます。

下線部分を英文原文より
It is not a font, but is instead a face name for a nonexistent font. The MS Shell Dlg face name maps to the default shell font associated with the current culture/locale.
(引用者: Wine環境にて default shell fontとして、mapされるフォントを、当文書ではデスクトップ ユーザーインターフェース フォントと称し、その決定の仕組みを調査しています。)

たとえば、米国英語版 Windows 98 では、MS Sans Serif に変換されます。... 米国英語版 Windows 2000 では、Tahoma に変換されます。ただし、MS Shell Dlg は、東アジア言語の Windows 9x では動作しません。詳細については、「Localization and the Shell Font」を参照してください。

(引用者コメント: リンク先を以下のようにたどり、後で参照するUsing MS Shell Dlg and MS Shell Dlg 2に至ります。
Localization and the Shell Font This content has moved to another location.→
Internationalization for Windows Applications International Fonts and Text Display を選択 →
International Fonts and Text Display Using MS Shell Dlg and MS Shell Dlg 2 を選択(下記にて参照)

フォントの名前とサイズを扱う最善の方法は、それらをローカライズ可能なリソースとして考えることです。MS Shell Dlg を使用すると、さまざまな言語の Windows NT/Windows 2000 でさまざまな言語のアプリケーションを実行するときに発生する問題が解決されます。フォントをローカライズ可能なリソースとして設定しておくと、ローカライズ担当者がローカライズされた UI のフォントを変更できるようにするという問題が解決されます。

MSDN文書MBCS プログラミングにおける一般的なアドバイス
ダイアログ ボックスのフォントを選択するときは、MS Sans Serif または Helvetica ではなく MS Shell Dlg を使用します(英文では命令形)。MS Shell Dlg は、ダイアログ ボックスの作成に使用する前に、システムで(by the system)適切な(correct)フォントに置き換えらます。 MS Shell Dlg を使用すると、このフォントを扱うためのオペレーティング システムのすべての変更内容が自動的に有効になります。

MSDN文書Using MS Shell Dlg and MS Shell Dlg 2
The MS Shell Dlg and MS Shell Dlg 2 logical fonts allow your application to implement dialog boxes, menus, etc., that display well on all supported Windows operating systems and across all languages.

Map the Logical Fonts
...
On Windows NT 4.0, Windows 2000 or XP, Windows Server 2003, and Windows Vista, both of the logical fonts map to Unicode-based TrueType fonts. MS Shell Dlg uses Microsoft Sans Serif (which is distinct from MS Sans Serif) for Latin, Greek, Cyrillic, Arabic, Hebrew, and Thai characters; MS UI Gothic for Japanese; Gulim for Korean; Simsun for Simplified Chinese; PMinglu for Traditional Chinese; etc.
MS Shell Dlg 2 simply uses the Tahoma font, and characters that are not implemented in Tahoma are available through font linking. The main advantage of Tahoma over Microsoft Sans Serif is that Tahoma has a native bold font face. ...
...
Windows 2000 and later: MS Shell Dlg 2 maps to Tahoma, which is the default font used throughout the operating system. An application that runs only on this operating system can specify DS_SHELLFONT with MS Shell Dlg 2 to map to Tahoma.
...
Applications that never run on Windows 95, Windows 98, or Windows Me can use either Microsoft Sans Serif or Tahoma explicitly, and save the level of indirection involved in using MS Shell Dlg or MS Shell Dlg 2. Because of font linking, specifying Microsoft Sans Serif or Tahoma provides appropriate glyphs for all languages.

上記文書にて logical fontについて言及されているが、論理フォントがセットされ実際のフォントファイルを使用して出力されるまでの仕組みの詳細については下記を参照のこと
MSDN文書 Font Creation and Selection

Globalization文書より
Because the desired behavior is to have the UI font of your application follow the desktop (Shell) UI font, and because the default Shell font is different from one localized language of the operating system to another (for example, Microsoft Sans Serif for English, Tahoma for Arabic, and so on), the best practice is to always use the higher–level font face name known as "MS Shell Dlg." MS Shell Dlg is actually not a font. Rather, it is a font face name that gets mapped to the right font depending on the font–substitution settings of the operating system. By setting your default resource font as MS Shell Dlg, you are assured of providing the appropriate font solution, ...

"Using MS Shell Dlg and MS Shell Dlg 2"には重要な内容が記述されていることから、ポイントを整理しておきます。
なお、要約の便宜上、Windows XP以降と端折る形とします。(英文原文ではバージョンの詳細が記述されてあります。)
- MS Shell Dlg および MS Shell Dlg 2 を活用することにより、アプリケーションは全Windowsシステムおよび全言語にて正しく文字表示される。
- MS Shell Dlg が使用するフォントは地域により異なるが、欧米など大半は Microsoft Sans Serifが、日本では MS UIゴシックが規定されている。(中・韓は略)
- MS Shell Dlg 2 は Tahomaを使用、Tahoma内にインプリメントされていない文字の表示はフォントリンクによりハンドリング可能。
- Tahomaはシステムのデフォルト フォント
- アプリケーションにて MS Shell Dlg および MS Shell Dlg 2 を使用しない場合でも、Microsoft Sans Serif または Tahoma を適切に使用する限りにおいては、フォントリンクにより多国語化対応が可能。

上記での MS Shell Dlg および MS Shell Dlg 2 におけるフォントのマッピングが、先に参照したレジストリ上の下記のエントリとして反映されています。

[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\FontSubstitutes]
”MS Shell Dlg"="MS UI Gothic"
”MS Shell Dlg 2"="Tahoma"

このキーは、日本語版 Windows OS本来の構成であり、Wine環境もこれを踏襲しています。
(Windows XP, 7, 8.1にて確認、8.1 では ”@MS Shell Dlg"="@MS UI Gothic"が追加されていた。)

これまでの検証における Wineデスクトップ ユーザーインターフェース フォントの動きについて整理を試みます。

(対照) Windows XP構成

フォント代替(FontSubstitutes):

"MS Shell Dlg"="MS UI Gothic"(ファイル msgothic.ttc 日本語表示可能)

フォントリンク:

"MS UI Gothic"="<フォントファイル指定(Unicode,中国語,ハングル)>"
(MS UIゴシックが日本語表示を実行しているため制御が渡らない)

(英数・日本語以外で制御を受ける)

WindowsデスクトップUIフォント: フォント代替にて明示的に指定された MS UIゴシックにより日本語表示

Wine初期構成 (Windows OSを踏襲)(PlayOnLinux iTunes 10 prefixは Wine 1.4.1かつ XPベース)

フォント代替(FontSubstitutes):

"MS Shell Dlg"="MS UI Gothic"(ファイル msgothic.ttc 無し)

フォントリンク:

(構成なし)

WineデスクトップUIフォント: 5-1.の仕組みに基づき Droid Sans Fallbackに決定

フォントリンク構成

フォント代替(FontSubstitutes):

"MS Shell Dlg"="MS UI Gothic"(ファイル msgothic.ttc 無し)

フォントリンク:

"MS UI Gothic"="<フォントファイル指定>"
(MS UIゴシック ファイルが無いため、MS Shell Dlgからの制御を受ける)

WineデスクトップUIフォント: システムリンクにて構成されたフォントファイルを使用

フォント代替構成

フォント代替(FontSubstitutes):

"MS Shell Dlg"="<フォント指定>"

フォントリンク:

"MS UI Gothic"="<フォントファイル指定>"
(フォント代替にて指定したフォントが日本語表示を実行しているため制御が渡らない)

(英数・日本語以外で制御を受ける)

WineデスクトップUIフォント: フォント代替にて明示的に指定されたフォントを使用

フォント代替(SontSubstitute)にて MS Shell Dlg に対し割り当てられたフォントがシステム上に存在するならば、そのフォントがデスクトップ ユーザーインターフェース フォントとして使用されます。
MS Shell Dlg に対し割り当てられたフォントが存在しない場合、もしくはそのフォントがハンドリングできない他国の文字コードをハンドリングする必要がある場合には、フォントリンクが検索されますが、フォントリンクが構成されていなかった場合には所定のデフォルト フォント(今回の環境では Droid Sans Fallback)が使用されます。

5-3-3. Tahoma
先に引用した文書にて、Tahomaが Windows 2000以降におけるデフォルト フォントであると言及されていました。

MSDN文書Using MS Shell Dlg and MS Shell Dlg 2
Map the Logical Fonts
...
Windows 2000 and later: MS Shell Dlg 2 maps to Tahoma, which is the default font used throughout the operating system.

Windows特に XPにおいて Tahomaが占める役割について文書にあたってみました。

MSDN文書
フォント
ガイドライン - フォントと色
- UI テクノロジとターゲットとする Windows のバージョンに基づいて、フォントを選択し、最適なウィンドウ レイアウトにします。
(マトリックスを要約) [UI テクノロジ:Win32またはWinForms (非WPF(Windows Presentation Foundation))][Vista以前の Windows]の[使用するフォントと最適化]
Windows® XP および Windows 2000 をターゲットとする場合は、8 ポイント MS Shell Dlg 2 擬似フォントを使用します。このフォントは Tahoma にマッピングされます。
Windows の以前のバージョンをターゲットとする場合は、8 ポイント MS Shell Dlg 擬似フォントを使用します。このフォントは、Windows 2000 および Windows XP では Tahoma に、Windows 95、Windows 98、Windows Millennium Edition、Windows NT 4.0 では MS Sans Serif にそれぞれマッピングされます。

SystemFonts.DefaultFont プロパティ .NET Framework 4
(アプリケーションのダイアログ ボックスおよびフォームで使用できる既定のフォント)
Control.DefaultFont プロパティ .NET Framework 4
(コントロールの既定のフォント)
オペレーティング システムおよびローカル カルチャに応じて DefaultFont プロパティによって返される値を次の表に示します。
システムおよびカルチャ → フォント
- Windows NT 4x、日本語バージョン → MS UI Gothic、9 ポイント
- Arabic Windows → Tahoma、8 ポイント
- その他のオペレーティング システムまたはカルチャ → MS Shell Dlg 論理フォント。通常は Microsoft Sans Serif、8 ポイント
MS Shell Dlg は、システム レジストリのフォント セットにマッピングされます。
上記のフォントがインストールされていない場合、既定のフォントは Tahoma、8 ポイントとなります。 8 ポイントの Tahoma がインストールされていない場合、DefaultFont は、GenericSansSerif プロパティの値を返します。

Wine環境では、MS UI Gothicフォント(msgothic.ttcファイル)が存在しないため、Tahoma 8ポイントがデフォルト フォントとなると理解しています。

5-3-4. コメント
フォント代替(FontSubstitutes)については、当初 MS Shell Dlg キーワードの役割を把握していなかったために、フォントリンクのように仕組みを理解した上でのアプローチではなく、試行錯誤に終始した感があります。
今回投稿のため文書化する過程で、MS Shell Dlg キーワードにより制御される動きについて、5-1.および 5-2., 5-3.と通底した形で理解することができました。

オフライン

 

#8 2014-07-10 00:30:12

XP_Exile
メンバ
登録日: 2014-07-01

Re: Tips:Wine: PlayOnLinux上 iTunes 10 文字化け(Tahomaのいわゆる豆腐化)への対処

5. 検証過程
5-1. Wineデスクトップ ユーザーインターフェース フォント
5-2. フォントリンク
5-3. フォント代替(FontSubstitutes)
5-4. フォント置換(Replacements)

5-5. (参考)フォント フォールバック(Fallback)
5-6. その他の対処方法

フォント置換(Replacements)については、設定対象となるキーが [HKEY_CURRENT_USER\Software\Wine\Fonts\Replacements] と、Windowsから踏襲したものではない、Wineにて付け加えられた仕組みとなります。
よって WineHQからドキュメントを参照しました。

WineHQ文書 Useful Registry Keys
Replacements
["Wingdings"="Winedings" would enumerate the Winedings font both as Winedings and Wingdings. However if a real Wingdings font is present the replacement does not take place.]

ここではフォント代替(FontSubstitutes)と同様、書体(font face)名を指定します。
置換対象となるフォントが存在しない場合に、指定されたフォントが使用されるとのことです。
先にフォント代替(FontSubstitutes)においても、左辺側、代替されるフォントが存在しない場合に、右辺に指定したフォントへの代替がなされるとありましたが、フォント置換(Replacements)に関しても、存在しないフォントを存在するフォントにてカバーするというメカニズムが類似しています。
相違として私の方で想定している点としては以下のようになります。
フォント代替(FontSubstitutes)は、デスクトップ ユーザーインターフェース フォントを制御する MS Shell Dlg キーワードを扱う。
Windows OSと共通するキーで、[HKEY_LOCAL_MACHINE]配下のキー、即ちシステム・レベルで作用する。
これに対し、Replacementsキーは Windowsには無い Wine独自に追加されたキーで、[HKEY_CURRENT_USER]配下のキーとして、ログインユーザーレベルの構成に該当する、といった点です。
この点について、定義上の明確な定義について、文書等では現時点では確認できていませせん。

また今回の iTunes 10の文字化けの場合は、Tahomaフォントが実際に存在していて、それが文字化けを生じているといった事象のため、Tahomaを他のフォントに置換するというアプローチは取りえません。

今回の検証は PlayOnLinux上での iTunes 10環境(prefix)で実施していますが、PlayOnLinux環境の場合に留意すべき点として、デフォルトでは、フォント置換(Replacement)は全く構成されていません。
これに対し、~/.wine に構成されているオリジナルの Wine環境においては、後述するように、予め所定の置換構成が組み込まれています。

先に 5-3.の末尾にて、日本語環境にて MS UI Gothicが存在しないため、デフォルト フォントが Tahomaとなっているのではないかと推察しましたが、それを踏まえ、下記の構成について検証を試みました。

[HKEY_CURRENT_USER\Software\Wine\Fonts\Replacements]
"MS UI Gothic"="Ume UI Gothic"

結果としては、<Tahoma小>は日本語表示できていましたが、<Tahoma大>の文字化けが解消していませんでした。
ただし Wineデスクトップ ユーザーインターフェース フォントは梅UIゴシックに置換されており、置換自体は機能していなながらも iTunesにおける文字化けの解決には不十分なようです。
また lsof コマンドで確認したところ、梅UIフォントおよび Tahoma(二種類)の使用が確認されました。

もう一つ検証を行ったシナリオです。
iTunesのフォント構成は、TextStyles.plist というファイルに保持されています。
PlayOnLinux上では、
~/.PlayOnLinux/wineprefix/iTunes10/drive_c/Program Files/iTunes/iTunes.Resources/ja.lproj/TextStyles.plist
このファイル内にて指定されているフォントは下記の通りです。

Segoe UI
Segoe UI Semibold
Segoe UI Light
Segoe Print
Tahoma
Arial
ArialMT

これらのうち、Tahomaおよび Arial以外は Wine環境に存在しないフォントなので、これらに対する置換構成を試みてみました。

[HKEY_CURRENT_USER\Software\Wine\Fonts\Replacements]
"Segoe UI"="WenQuanYi Micro Hei"
"Segoe UI Semibold"="WenQuanYi Micro Hei"
"Segoe UI Light"="WenQuanYi Micro Hei"
"Segoe Print"="WenQuanYi Micro Hei"
"ArialMT"="WenQuanYi Micro Hei"

結果としては、<Tahoma大・小>共に豆腐状の文字化けは解消しませんでした。

最初のテストケースにおいて、設定した梅UIゴシック フォントがアクティブになっていたように、フォント置換によるアプローチ自体は基本的には有用であることが今回の検証にて確認できました。
ただ、iTunesの場合は、Tahomaが、<大>と<小>と区別すべき異なる挙動を示すといった特殊な動きをすることから、これらを一括して解決するだけの十分な対応策とはなり得なかったようです。

参考
今回の検証対象としての PlayOnLinux環境においては初期構成でフォント置換(Replacements)は全く構成されていません。

それに対しオリジナルの Wine環境(~/.wine)[Wine 1.6(1.7にアップグレードしても同様) + winetricks]の環境では、以下のような置換構成が用意されていました。

[HKEY_CURRENT_USER\Software\Wine\Fonts\Replacements]
"Arial Unicode MS"="Droid Sans Fallback"
"Batang"="UnBatang"
"Dotum"="UnDotum"
"Gulim"="UnDotum"
"MS Gothic"="Ume Gothic"
"MS Mincho"="Ume Mincho"
"MS PGothic"="Ume P Gothic"
"MS PMincho"="Ume P Mincho"
"MS UI Gothic"="Ume UI Gothic"
"PMingLiU"="WenQuanYi Micro Hei"
"SimSun"="WenQuanYi Micro Hei"
"宋体"="WenQuanYi Micro Hei"
"新細明體"="WenQuanYi Micro Hei"
"MSPゴシック"="Ume P Gothic"

winetricksで fakejapaneseをセットアップ([Select the default wine prefix:OK][Install a font:OK]より)すると、最初に Takaoフォントを ~/.wine/drive_c/windows/Fonts にダウンロードした上で、フォント置換構成に Takaoフォントを組み込む形で変更します。

[HKEY_CURRENT_USER\Software\Wine\Fonts\Replacements]
"Arial Unicode MS"="Droid Sans Fallback"
"Batang"="UnBatang"
"Dotum"="UnDotum"
"Gulim"="UnDotum"
"MS Gothic"="TakaoGothic"
"MS Mincho"="TakaoMincho"
"MS PGothic"="TakaoPGothic"
"MS PMincho"="TakaoPMincho"

"MS UI Gothic"="Ume UI Gothic"
"PMingLiU"="WenQuanYi Micro Hei"
"SimSun"="WenQuanYi Micro Hei"
"宋体"="WenQuanYi Micro Hei"
"新細明體"="WenQuanYi Micro Hei"
"MSPゴシック"="Ume P Gothic"

winetricksにより Takaoフォントが追加される際に、レジストリ上では下記の改変が生じています。
[HKEY_CURRENT_USER\Software\Wine\Fonts\External Fonts]
エントリ削除→ "@Takao Pゴシック"="Z:\\usr\\share\\fonts\\truetype\\fonts-japanese-gothic.ttf"
エントリ削除→ "@Takao P明朝"="Z:\\usr\\share\\fonts\\truetype\\fonts-japanese-mincho.ttf"
エントリ削除→ "@TakaoExゴシック"="Z:\\usr\\share\\fonts\\truetype\\takao-gothic\\TakaoExGothic.ttf"
エントリ削除→ "@TakaoEx明朝"="Z:\\usr\\share\\fonts\\truetype\\takao-mincho\\TakaoExMincho.ttf"
エントリ削除→ "@Takaoゴシック"="Z:\\usr\\share\\fonts\\truetype\\takao-gothic\\TakaoGothic.ttf"
エントリ削除→ "@Takao明朝"="Z:\\usr\\share\\fonts\\truetype\\takao-mincho\\TakaoMincho.ttf"
エントリ削除→ "Takao Pゴシック"="Z:\\usr\\share\\fonts\\truetype\\fonts-japanese-gothic.ttf"
エントリ削除→ "Takao P明朝"="Z:\\usr\\share\\fonts\\truetype\\fonts-japanese-mincho.ttf"
エントリ削除→ "TakaoExゴシック"="Z:\\usr\\share\\fonts\\truetype\\takao-gothic\\TakaoExGothic.ttf"
エントリ削除→ "TakaoEx明朝"="Z:\\usr\\share\\fonts\\truetype\\takao-mincho\\TakaoExMincho.ttf"
エントリ削除→ "Takaoゴシック"="Z:\\usr\\share\\fonts\\truetype\\takao-gothic\\TakaoGothic.ttf"
エントリ削除→ "Takao明朝"="Z:\\usr\\share\\fonts\\truetype\\takao-mincho\\TakaoMincho.ttf"

[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Fonts]
エントリ削除→ "@Takao Pゴシック"="Z:\\usr\\share\\fonts\\truetype\\fonts-japanese-gothic.ttf"
エントリ削除→ "@Takao P明朝"="Z:\\usr\\share\\fonts\\truetype\\fonts-japanese-mincho.ttf"
エントリ削除→ "@TakaoExゴシック"="Z:\\usr\\share\\fonts\\truetype\\takao-gothic\\TakaoExGothic.ttf"
エントリ削除→ "@TakaoEx明朝"="Z:\\usr\\share\\fonts\\truetype\\takao-mincho\\TakaoExMincho.ttf"
エントリ削除→ "@Takaoゴシック"="Z:\\usr\\share\\fonts\\truetype\\takao-gothic\\TakaoGothic.ttf"
エントリ削除→ "@Takao明朝"="Z:\\usr\\share\\fonts\\truetype\\takao-mincho\\TakaoMincho.ttf"
(変更前) "Takao Pゴシック"="Z:\\usr\\share\\fonts\\truetype\\fonts-japanese-gothic.ttf"
(変更後) "TakaoPGothic (TrueType)"="TakaoPGothic.ttf"
(変更前) "Takao P明朝"="Z:\\usr\\share\\fonts\\truetype\\fonts-japanese-mincho.ttf"
(変更後) "TakaoPMincho (TrueType)"="TakaoPMincho.ttf"
(変更前) "TakaoExゴシック"="Z:\\usr\\share\\fonts\\truetype\\takao-gothic\\TakaoExGothic.ttf"
(変更後) "TakaoExGothic (TrueType)"="TakaoExGothic.ttf"
(変更前) "TakaoEx明朝"="Z:\\usr\\share\\fonts\\truetype\\takao-mincho\\TakaoExMincho.ttf"
(変更後) "TakaoExMincho (TrueType)"="TakaoExMincho.ttf"
(変更前) "Takaoゴシック"="Z:\\usr\\share\\fonts\\truetype\\takao-gothic\\TakaoGothic.ttf"
(変更後) "TakaoGothic (TrueType)"="TakaoGothic.ttf"
(変更前) "Takao明朝"="Z:\\usr\\share\\fonts\\truetype\\takao-mincho\\TakaoMincho.ttf"
(変更後) "TakaoMincho (TrueType)"="TakaoMincho.ttf"
キー [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Fonts]についても同様。
(winetricks使用の際は、こうしたレジストリ エントリの変更を留意のこと)

参考: linux Bean 14.04におけるフォント置換構成
[HKEY_CURRENT_USER\Software\Wine\Fonts\Replacements]
"Arial Unicode MS"="Droid Sans Fallback"
"Batang"="UnBatang"
"Dotum"="UnDotum"
"Gulim"="UnDotum"
"MS Gothic"="Ume Gothic"
"MS Mincho"="Ume Mincho"
"MS PGothic"="Ume P Gothic"
"MS PMincho"="Ume P Mincho"
"MS UI Gothic"="Ume UI Gothic"
"PMingLiU"="WenQuanYi Micro Hei"
"SimSun"="WenQuanYi Micro Hei"
"宋体"="WenQuanYi Micro Hei"
"新細明體"="WenQuanYi Micro Hei"
"MS ゴシック"="Takaoゴシック"
"MS 明朝"="Takao明朝"
"MS Pゴシック"="Takao Pゴシック"
"MS P明朝"="Takao P明朝"

"MSPゴシック"="Ume P Gothic"

オフライン

 

#9 2014-07-10 00:36:10

XP_Exile
メンバ
登録日: 2014-07-01

Re: Tips:Wine: PlayOnLinux上 iTunes 10 文字化け(Tahomaのいわゆる豆腐化)への対処

5. 検証過程
5-1. Wineデスクトップ ユーザーインターフェース フォント
5-2. フォントリンク
5-3. フォント代替(FontSubstitutes)
5-4. フォント置換(Replacements)

5-5. (参考)フォント フォールバック(Fallback)
5-6. その他の対処方法

フォント フォールバックは、フォントリンクと同様、テキスト出力を処理しているフォントが自身のファイル内に含まれていない字体ないしスクリプトを必要とする出力要求に対処するための方法です。両者のシナリオの比較として、フォントリンク(5-2-2.参照)にて参照した Globalization文書の該当箇所を再掲します。

Microsoft Globalization文書より
Font Linking:
Unlike font fallback, in which the selected font is internally replaced by a predefined font, in font linking it is possible to link one or more fonts (called "linked fonts") to another font (called the "base font"). Once you link fonts, you can use the base font to display code points that do not exist in the base font, but that do exist in one of the linked fonts. For example, linking a hangul font and a Japanese font to a Tahoma font allows you to display both Korean and Japanese characters in Tahoma font.
Note: Font linking can only add glyphs to a base font; you cannot override or replace glyphs in the base font.
...
Important: Font linking is a mechanism enabled within GDI and takes priority over font fallback.

上記の例では、欧文フォントの Tahomaが、日本語およびハングルのフォントとフォントリンクを構成しておくことにより、日本語やハングルの字体(Glyph)を借用しながら、実際の文字の描出は Tahomaが処理を続けるというシナリオとなっています。
これに対し、フォント フォールバックは、文字出力を Tahoma以外のフォントに切り替えるというもので、下記の例では、Tahomaが Telgu語(インド南東部)の字体のレンダリングをハンドリングできないと Uniscribeが検知し、フォールバック フォントとして予め指定されている Gautamiフォントに制御を移すというシナリオが紹介されています。

Globalization文書より
Font Fallback:
Uniscribe can detect if the currently selected font doesn't support a particular script and can automatically switch–or fall back–to a predefined font that has appropriate glyphs for the desired script.
Here is an example to better understand this mechanism. A user running Windows XP selects the Tahoma font to enter some text first in English, next in Hebrew, and then in Telugu. Since Tahoma is an OpenType font, it provides support for Latin and Hebrew scripts, but does not contain any Telugu glyphs. Uniscribe detects this lack of font support and automatically renders the Telugu script by using its fallback font, which is Gautami.
...
For most of the scripts, the call font is set to Microsoft Sans Serif (an OpenType font).

日本語出力に関連し、フォント フォールバックが関連するかという点について、下記の文書を参照しました。

MSDN文書 Script and Font Support in Windows
Since before Windows 2000, text-display support for new scripts has been added in each major release of Windows. This article describes changes made in each major release.
...
Windows XP
...
The font fallback mechanism in Uniscribe was extended to support fallback for Unicode supplementary planes: for each plane from 1 to 16, a single fallback font can be specified in the registry.
This change, along with earlier changes in Windows 2000, to support supplementary-plane characters allows Windows XP to support CJK Extension B characters.

即ち、CJK拡張漢字 B の出力においてフォント フォールバックが使用されるとのことですが、今回文字化けを生じている文字は普通に Basic Multilingual Plane (BMP)の 65,536文字に含まれている文字であろうという点から、今回の iTunes 10の文字化けへの対処に、フォント フォールバックは関与し得ないと判断し、検証作業は実施していません。

(参照: BMPについて) MSDN文書 Surrogates and Supplementary Characters
Windows applications normally use UTF-16 to represent Unicode character data. The use of 16 bits allows direct representation of 65,536 unique characters, but this Basic Multilingual Plane (BMP) is not nearly enough to cover all the symbols used in human languages. Unicode version 4.1 includes over 97,000 characters, with over 70,000 characters for Chinese alone. ...

また下記に参照した WineHQの文書にて言及されているように、フォント フォールバックの仕組みを Wine上で制御するためのキーがレジストリ上に用意されているとのことです。Globalization文書でも言及されていましたが、多くのフォントがデフォルトのフォールバック フォントを Microsoft Sans Serifとしているという点に、フォントリンクの場合と同様、同フォントが重要な役割を担っていることが見て取れます。

参考 Uniscribe

Wikipedia Uniscribe
Uniscribeは、Microsoft Windowsにおいて、Unicodeによって符号化されたテキストを描画するためのレンダリングサービスである。「USP10.DLL」というダイナミックリンクライブラリとして実装されている。...
Uniscribeの主な目的は以下のとおり:
1. テキストの入力列を表示列にする。
2. 文脈に応じてグリフの置換を行う (例えばアラビア文字での、語中の位置に依存する字形など)。
3. テキストの書字方向 (LTR [左から右] かRTL [右から左] か、横書きか縦書きか、など) に基づき、表示されるテキストを並べ替える。

Wiki Wine.org Uniscribe support in WINE
About Fallback Fonts
Uniscribe will fallback to known good fonts for some scripts. Like the native Microsoft usp10 WINE's will by default fall back to given fonts. If you install these fonts on your system or setup font overrides you will get this immediate benefit. I have also added another way to setup an override. You can setup registry keys in [HKEY_CURRENT_USER\Software\Wine\Uniscribe\Fallback]. The key will be the scripts OpenType tag in hex and the value is the font face you want to use as the fallback for that font.

オフライン

 

#10 2014-07-10 00:39:08

XP_Exile
メンバ
登録日: 2014-07-01

Re: Tips:Wine: PlayOnLinux上 iTunes 10 文字化け(Tahomaのいわゆる豆腐化)への対処

5. 検証過程
5-1. Wineデスクトップ ユーザーインターフェース フォント
5-2. フォントリンク
5-3. フォント代替(FontSubstitutes)
5-4. フォント置換(Replacements)

5-5. (参考)フォント フォールバック(Fallback)
5-6. その他の対処方法

ここまでは Wineにて提供された仕組み、即ちレジストリ上の設定により対処を試みてきましたが、それ以外に試した手法についてご紹介します。
しかしながらいずれも文字化けの問題解消には至りませんでした。

5-6-1. Tahomaフォントの削除
ネットで Wine, tahoma, 文字化け, 豆腐といったキーワードで検索すると、Tahomaフォントを削除することで対処したという記事が散見されます。
私自身最初にこの方法を試してみました。
手順の詳細は割愛しますが、5-1.にてフォントを削除した場合と同様に、ファイルおよびレジストリのエントリを削除した上で、FontSubstitutesで、Tahomaに日本語表示可能なフォントを割り当てるという形です。
結果として、文字化けは解消せず、Tahomaの代わりに Arialが Tahomaの代わりに使用されていました。
次に Arialを削除すると、今度は豆腐すら表示されず、それまで表示されていた英数字も表示されなくなり、問題状況として悪化する始末でした。

5-6-2. iTunes 10 TextStyles.plist
先にフォント置換(5-4.参照)にて、iTunesのテキスト設定情報を保持した TextStyles.plist ファイルを参照しましたが、実際にこのファイルをエディタで編集し、フォントを全て日本語表示可能なフォントに変更してみました。
結果としては、文字化けの状況に変化はありませんでした。

次に iTunesのフォントを変更可能なフリーツール iTunes Tuneupを試してみました。
Tune-up iTunes 11.1
[紹介記事]iTunes10のフォントを変更するツール(Tune-up iTunes)
展開したファイルを、PlayOnLinux[設定 - Wine - Command Prompt]から実行します。
もしくは PlayOnLinux[設定 - 一般]の[Make a new shortcut from this virtual drive]によりショートカットを追加し、PlayOnLinuxから起動します。
しかしながら、同ツールで日本語表示可能なフォントを指定しても、<大><小>共に文字化けが生じる状況に変わりはありませんでした。
また同ツール自体が文字化けを生じます。
今回の投稿の前にテスト環境を再構築した最新の環境のもとでは Droid Sans Fallbackにより正常に日本語表示で起動できましたが、その時も[適用]ボタンを押した時の「iTunesのパッチあてが終了しました。」メッセージの画面が豆腐状の文字化けとなります。iTunes 10自体の文字化けは結局解消していません。

オフライン

 

#11 2014-07-10 00:47:37

XP_Exile
メンバ
登録日: 2014-07-01

Re: Tips:Wine: PlayOnLinux上 iTunes 10 文字化け(Tahomaのいわゆる豆腐化)への対処

5-7.(補足) 検証した日本語表示可能フォント、およびIPAモナーフォントの組み込み
5-7-1. 検証した日本語表示可能フォント
今回日本語表示可能なフォントとしては、レジストリ上以下のキーにて名前の先頭に"@"が付加し、縦書フォントとしても使用されるエントリがあるフォントを選択し使用しています。
[HKEY_CURRENT_USER\Software\Wine\Fonts\External Fonts]
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Fonts]
使用フォント リスト(csv形式)

コード:

フォント名;書体(font face)名;フォントファイル名;フォントファイル名(フルパス)
TakaoExゴシック;TakaoExGothic;TakaoExGothic.ttf;Z:\usr\share\fonts\truetype\takao-gothic\TakaoExGothic.ttf
TakaoEx明朝;TakaoExMincho;TakaoExMincho.ttf;Z:\usr\share\fonts\truetype\takao-mincho\TakaoExMincho.ttf
TakaoPゴシック;TakaoPGothic;fonts-japanese-gothic.ttf;Z:\usr\share\fonts\truetype\fonts-japanese-gothic.ttf
TakaoP明朝;TakaoPMincho;fonts-japanese-mincho.ttf;Z:\usr\share\fonts\truetype\fonts-japanese-mincho.ttf
Takaoゴシック;TakaoGothic;TakaoGothic.ttf;Z:\usr\share\fonts\truetype\takao-gothic\TakaoGothic.ttf
Takao明朝;TakaoMincho;TakaoMincho.ttf;Z:\usr\share\fonts\truetype\takao-mincho\TakaoMincho.ttf
Droid Sans Fallback;Droid Sans Fallback;DroidSansFallbackFull.ttf;Z:\usr\share\fonts\truetype\droid\DroidSansFallbackFull.ttf
Droid Sans Japanese;Droid Sans Japanese;DroidSansJapanese.ttf;Z:\usr\share\fonts\truetype\droid\DroidSansJapanese.ttf
WenQuanYi Micro Hei;WenQuanYi Micro Hei;wqy-microhei.ttc,WenQuanYi Micro Hei;Z:\usr\share\fonts\truetype\wqy\wqy-microhei.ttc,WenQuanYi Micro Hei
WenQuanYi Micro Hei Mono;WenQuanYi Micro Hei Mono;wqy-microhei.ttc,WenQuanYi Micro Hei Mono;Z:\usr\share\fonts\truetype\wqy\wqy-microhei.ttc,WenQuanYi Micro Hei Mono
梅Pゴシック;Ume P Gothic;ume-pgo4.ttf;Z:\usr\share\fonts\truetype\horai-umefont\ume-pgo4.ttf
梅PゴシックC4;Ume P Gothic C4;ume-pgc4.ttf;Z:\usr\share\fonts\truetype\horai-umefont\ume-pgc4.ttf
梅PゴシックC5;Ume P Gothic C5;ume-pgc5.ttf;Z:\usr\share\fonts\truetype\horai-umefont\ume-pgc5.ttf
梅PゴシックO5;Ume P Gothic O5;ume-pgo5.ttf;Z:\usr\share\fonts\truetype\horai-umefont\ume-pgo5.ttf
梅PゴシックS4;Ume P Gothic S4;ume-pgs4.ttf;Z:\usr\share\fonts\truetype\horai-umefont\ume-pgs4.ttf
梅PゴシックS5;Ume P Gothic S5;ume-pgs5.ttf;Z:\usr\share\fonts\truetype\horai-umefont\ume-pgs5.ttf
梅P明朝;Ume P Mincho;ume-pmo3.ttf;Z:\usr\share\fonts\truetype\horai-umefont\ume-pmo3.ttf
梅P明朝S3;Ume P Mincho S3;ume-pms3.ttf;Z:\usr\share\fonts\truetype\horai-umefont\ume-pms3.ttf
梅UIゴシック;Ume UI Gothic;ume-ugo4.ttf;Z:\usr\share\fonts\truetype\horai-umefont\ume-ugo4.ttf
梅UIゴシックO5;Ume UI Gothic O5;ume-ugo5.ttf;Z:\usr\share\fonts\truetype\horai-umefont\ume-ugo5.ttf
梅ゴシック;Ume Gothic;ume-tgo4.ttf;Z:\usr\share\fonts\truetype\horai-umefont\ume-tgo4.ttf
梅ゴシックC4;Ume Gothic C4;ume-tgc4.ttf;Z:\usr\share\fonts\truetype\horai-umefont\ume-tgc4.ttf
梅ゴシックC5;Ume Gothic C5;ume-tgc5.ttf;Z:\usr\share\fonts\truetype\horai-umefont\ume-tgc5.ttf
梅ゴシックO5;Ume Gothic O5;ume-tgo5.ttf;Z:\usr\share\fonts\truetype\horai-umefont\ume-tgo5.ttf
梅ゴシックS4;Ume Gothic S4;ume-tgs4.ttf;Z:\usr\share\fonts\truetype\horai-umefont\ume-tgs4.ttf
梅ゴシックS5;Ume Gothic S5;ume-tgs5.ttf;Z:\usr\share\fonts\truetype\horai-umefont\ume-tgs5.ttf
梅明朝;Ume Mincho;ume-tmo3.ttf;Z:\usr\share\fonts\truetype\horai-umefont\ume-tmo3.ttf
梅明朝S3;Ume Mincho S3;ume-tms3.ttf;Z:\usr\share\fonts\truetype\horai-umefont\ume-tms3.ttf
Un Batang;Un Batang;UnBatang.ttf;Z:\usr\share\fonts\truetype\unfonts-core\UnBatang.ttf
Un Batang Bold;Un Batang Bold;UnBatangBold.ttf;Z:\usr\share\fonts\truetype\unfonts-core\UnBatangBold.ttf

5-7-2. IPAモナーフォントの組み込み

IPAモナーフォント
概要: ...このフォントは、Windowsで作成された各種文書を他のOSで表示する際に便利に使うことができます。フォントの幅と高さをWindowsで標準添付されている日本語フォントに合わせてあるので、レイアウトの崩れを最小限に抑えることができます。

フォント リスト(csv形式)
フォント名;書体(font face)名;フォントファイル名
IPA モナー UIゴシック;IPAMonaUIGothic;ipagui-mona.ttf;
IPA モナー Pゴシック;IPAMonaPGothic;ipagp-mona.ttf;
IPA モナー P明朝;IPAMonaPMincho;ipamp-mona.ttf;
IPA モナー ゴシック;IPAMonaGothic;ipag-mona.ttf;
IPA モナー 明朝;IPAMonaMincho;ipam-mona.ttf;

(ケース 1) 手動でフォントを追加
上記サイトより ファイル opfc-ModuleHP-1.1.1_withIPAMonaFonts-1.0.8.tar.gz をダウンロード。
展開後、fonts/*.ttf の五つのファイルを以下のディレクトリにコピー
~/.PlayOnLinux/wineprefix/iTunes10/dosdevices/c:/windows/Fonts

参照
試験運用中なLinux備忘録・別館 2.2.1. ユーザインターフェース(UI)のフォント
試験運用中なLinux備忘録 ${WINEPREFIX}/dosdevices/c:/windows/Fonts/の優先度
${WINEPREFIX}/dosdevices/c:/windows/Fonts/ (デフォルトでは、${HOME}/.wine/drive_c/windows/Fonts/)は、Wine環境におけるC:\WINDOWS\Fonts\で、ここに入れられたフォントは、フォント選択ダイアログに出る他、ユーザインターフェースのフォントとしても使われる。 (引用者より: 下線部は wine 1.3.29までと前者文書にて言及)
ただし、フォント置換(${WINEPREFIX}/user.reg中の「Software\\Wine\\Fonts\\Replacements」)で「MS UI Gothic」に対してフォントを割り当てている場合、フォント置換のほうが優先されるようだ。

[PlayOnLinux - iTunes 10][設定 - Wine - Windows reboot]で Windows環境を再起動。
レジストリのキー[HKEY_CURRENT_USER\Software\Wine\Fonts\Cache]以下に各フォントのキーが追加されている。(縦書き"@<フォント名>"も含む)
この状況にて文字化け対応処置を実施したところ、フォントリンク、フォント代替(FontSubstitutes)共に<Tahoma大>が解消しない。
レジストリエディタから以下のキーを追加

[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Fonts]
"IPA モナー Pゴシック (TrueType)"="ipagp-mona.ttf"
"IPA モナー P明朝 (TrueType)"="ipamp-mona.ttf"
"IPA モナー UIゴシック (TrueType)"="ipagui-mona.ttf"
"IPA モナー ゴシック (TrueType)"="ipag-mona.ttf"
"IPA モナー 明朝 (TrueType)"="ipam-mona.ttf"

今度はフォントリンク、フォント代替(FontSubstitutes)共に文字化けが解消する。
フォントリンクの場合、フォントファイル指定はルート(/)=Z:\ からのフルパスで指定が必要。(ファイル名のみだと<大>が豆腐化)

(ケース 2) IPAモナーフォントインストール用verbファイルを使用

参照および入手先
試験運用中なLinux備忘録・別館 2. Wine → 2.10. winetricks用の自作verbファイル →
2.10.2. IPAモナーフォントインストール用verbファイル
処理内容
IPAモナーフォントをダウンロード
IPAモナーフォントの全フォントファイルをWine環境(prefix)内に配置し、これらを登録
「MS ゴシック」などの対応するフォント名で使用するための置換設定を各フォントについて行う

「表15 設定されるフォント名の対応一覧」より(引用者が表をレジストリ設定ファイル形式に変更)
[HKEY_CURRENT_USER\Software\Wine\Fonts\Replacements]
;"置換名(Windowsアプリケーションが使用する名前)"="使用されるIPAモナーフォントのフォント名"
"MS UI Gothic"="IPA モナー UIゴシック"
"MS ゴシック"="IPA モナー ゴシック"
"MS 明朝"="IPA モナー 明朝"
"MS Pゴシック"="IPA モナー Pゴシック"
"MS P明朝"="IPA モナー P明朝"

インストールの実行

$ WINEPREFIX=~/.PlayOnLinux/wineprefix/iTunes10 /usr/bin/winetricks ./ipamona.verb

この構成のもとで検証を実施すると、フォントリンク、フォント代替(FontSubstitutes)共に文字化けが解消する。
フォントリンクの場合、フォントファイル指定はルート(/)=Z:\ からのフルパスで指定が必要。(ファイル名のみだと<大>が豆腐化)

また 5-2-5.考慮点(その 2)にて言及した、MS UI Gothicをベースとしたフォントリンクを構成した場合の不具合(長音記号「ー」の縦化)は、IPAモナーフォントにおいても発生します。

オフライン

 

#12 2014-07-10 00:54:20

XP_Exile
メンバ
登録日: 2014-07-01

Re: Tips:Wine: PlayOnLinux上 iTunes 10 文字化け(Tahomaのいわゆる豆腐化)への対処

6. 残された疑問点
今回の検証を通じ、iTunes 10の文字化けに対し、フォントリンクおよびフォント代替(FontSubstitute)の二通りの対処方法を提示しました。
今回の検証は、ネットでの情報収集に始まり、テストの実施、結果の整理と文書化という一連の流れを通じ、最初の段階ではまったく不案内だったフォント関連の諸々の仕組みについて、一定の段階までは見通しよく理解できるようになりました。

しかしながら、今回の Tahomaの文字化けについては、対処法的に一応の手順を示すことができたとはいえ、実際には試行錯誤を繰り返した中でたまたまうまくいったケースに遭遇したという僥倖によるところが大です。

Tahomaが豆腐状に文字化けするという現象は、原理的には欧文フォントの Tahomaが、自身では保持していない字体(glyph)や描出のためのスクリプトを必要とする多国語の出力要求を処理できないために生じているものです。
それを回避するために、フォントリンクや、フォント代替(FontSubstitutes)の仕組みが使用されます。
しかしながら、iTunes 10の場合は、今回<Tahoma大><Tahoma小>と異なる挙動が混在しているように複雑な様相を生じており、それに加えて、Tahomaをもととしなががらも正常に日本語が表示されている場合([ウィンドウのテキスト]にて)も存在しているようなので、そうした相違が生じる仕組みないし内部フローまでブレイクダウンした事象の解明に至ることができませんでした。
具体的には、フォントリンクにて、ベースフォントに Microsoft Sans Serifを構成する必要がある理由や、フォント代替(FontSubstitutes)で MS Shell Dlgだけでは不十分で、MS UI Gothicに同じフォントを指定しなければならない理由といった点について現時点では不明なままとなっています。
そうした意味での「対処方的」なソリューションに過ぎません。

今回のアプローチは、lsofコマンドの出力から使用されるフォントのトラッキングを行うといったものでした。
それより詳細なメカニズムの調査には、より深いレベルをトラッキングするためのテクニックないしツールと、エキスパート レベルの知見が必要と見込まれます。

私自身としては、これまでで既に当初の想定より大幅に長くかかってしまったこともあり、いったん区切りをつけることとします。

7. 終わりに
率直なところ、私自身としては音楽プレーヤーとしては、機能の大半が制約される Wine上での iTunesよりは、Linux上にてネイティブに稼働するアプリケーションの方を選びます。実際 iDeviceの類いを持っている訳でないですし。

PlayOnLinuxについて試しがてら戯れにセットアップし、Windows上で蓄積したライブラリからの再生はできていながら、画面が豆腐という、ちょっと残念なステータスにある状況に遭遇したことに、Linuxを使用するようになってから、日本語入力環境と、日本語表示という最もコアとなるべき機能に当惑する場面があったことで、後者について調べてみようかと折々企図していたのを実際に調べてみるトリガーとなった、それがたまたま iTunesだったというだけでした。

今回の調査にあたり、Globalization文書のように、各種のテクニックを包括しつつ、それらの背景となる OpenTypeフォントのテクノロジーの基礎をも踏まえたドキュメントが参照できたのは、単なる情報の寄せ集めとなることを少しでも減らす助けとなり、実に幸いでした。
とはいえ、今回参照した多数の資料に、私の理解・整理が不十分で忸怩たる部分(特にフォールバックや、Microsoft Sans Serif、Tahomaのあたりなど)も含まれており、もしくは意図せずとも誤解や誤謬も混入しているかもしれません。
私自身も調査内容の確度を高めるため、MSDNの文書を参照するなど、極力 Windowsテクノロジーに還元し、根拠付けられることを志向したのですが、私自身 Windowsについては一ユーザーに過ぎず、エキスパートの方々からするとツッコミの入れどころだらけだろうと案じてもいます。
それでもこうして公開することにより、私が忙殺されたような試行錯誤を回避できるといったように、少しはどなたかのお役にたてるかも知れず、また私のテクニカル レベルを超えた内容について、エキスパートの方からの助言が得られれば、今回の調査では未達成の課題も解明してゆく手掛かりが得られるのではないかという期待もあります。

当初は iTunes以外のアプリケーションについても調査することを計画していましたが、iTunesだけで多大に当初の見込みを超過する始末と相成り、いったんインターバルをおき、一休みさせていただくこととしました。

上記 6.にて残された課題として挙げているように、iTunes 10での日本語表示にあたり、Tahomaに対する出力処理が正常系・異常系含め複数パターンあるという点について、今回はその分岐の内部フローを解明できないままという状況にあります。
この課題が明確になれば、もしくはこうした挙動をトラッキングする一般的な手順が定立すれば、iTunesに限らず、他のアプリケーションにおける文字化け異常に対し、汎用的な問題判別・問題解決手順を確立できるのではないかと期しています。

具体的には、ソリューション ガイドとして、
(1) 文字化けのタイプを確認
(タイプによる分岐)
(2-A) 豆腐状の文字化けの場合、lsof コマンドにより使用フォントを確認
(フォントによる分岐)
...

ここでの分岐に内容を盛り込むためには、各種アプリケーションについて、文字化け問題の問題判別・問題解決シナリオを蓄積してゆくことが必要となります。
この時期柄ということから、夏休みの自由研究!のノリで、チャレンジされてみるというのもいかがでしょうか?
、という形で、当レポートを締めくくることとします。

最後に、今回の調査にあたり、実に数多くのサイトを参照し、かつ当レポートにて引用させていただきました。
各サイトの情報提供者の皆様に改めてお礼申し上げます。
更に、これほどまで長文のレポートをここまで読んでいただいた皆様へも、恐縮しつつお礼申し上げます。
ありがとうございました。

(しばらくネットのアクセスできない環境となるため、お問い合わせなどタイムリーにお返事できませんが、ご容赦願います。)

オフライン

 

#13 2014-07-10 17:31:49

S_T_M
メンバ
登録日: 2012-06-03

Re: Tips:Wine: PlayOnLinux上 iTunes 10 文字化け(Tahomaのいわゆる豆腐化)への対処

別にいい内容ではありますけど、
iTunesの機能が制限されているのは、Wineの方針のためです。
文字化けでしたら、適当にgdiplus.dllをインストールしてMSのフォントを入れたら治った記憶がありますが。

オフライン

 

#14 2014-07-10 19:14:02

KuroS
メンバ
登録日: 2010-05-23

Re: Tips:Wine: PlayOnLinux上 iTunes 10 文字化け(Tahomaのいわゆる豆腐化)への対処

>文字化けでしたら、適当にgdiplus.dllをインストールしてMSのフォントを入れたら治った記憶がありますが。

これは、「Windowsで使用を許可されている(ライセンスされている)フォントをLinuxで使う」ということですか?

これに関しては重大なライセンス違反なので、「個人的にやってみたら出来た。」程度なら良いのですが(良くはないのですが)このような場で書き込んで良い内容ではないと思います。

オフライン

 

Board footer

Powered by FluxBB