Just $ A sandbox

プログラミングと計算機科学とかわいさ

LinuxでWindowsアプリケーションを動かしたい人のためのWineの設定

この記事はwineに関して私が蓄積したベストプラクティスとバッドノウハウをまとめたものです。

Wineとは

Wineとは、Linux*1Windowsアプリケーションが動くエミュレータではない何か*2です。

はじめに、Wineで全てのWindowsアプリが動くわけではないことを念頭に置いてください。まるで動かないものもあります。
この記事は、色んなアプリが動くようになる可能性が高くなるように設定をしています。

Wineで動かしたいアプリがあるのであれば

に行くと何か情報が得られるかもしれません。

環境

今回使用したのは以下の環境下です。

Wineのインストールにはなるべくパッケージを使っていれてください。
人柱気質たっぷりならソースからビルドでもよいかもしれません。

Wineで使うdllや必要なフレームワークを手軽にインストールしたり管理してくれるものです。必須です。

注: Wineは、こまめにバージョンを上げればよいというものではありません。特に開発段階のものをインストールするときは注意してください。バージョンがあがって今まで動いていたものが動かなくなってしまうこともあります。

設定

以下では具体的にWineの設定をしてみます。どんなアプリを動かしたいかによって入れるものや順番が変わるので注意してください。

フォントの文字化けを直す

デフォルトでは日本語の部分が豆腐状態(□□□□みたいな)だと思うのでまずはフォントをインストールします。

~$ winetricks allfonts

これで必要なフォントは入ります。

フォントを綺麗にする

お好みのフォント(例えばVL Gothic Font Family)のttfを~/.wine/drive_c/windows/Fontsに入れます。
そして~/.wine/user.regを以下のように編集します。

[Software\\Wine\\Fonts\\Replacements] 1240428288
"MS Gothic"="VL Gothic"
"MS PGothic"="VL PGothic"
"MS Sans Serif"="VL PGothic"
"MS Shell Dlg"="VL Gothic"
"MS UI Gothic"="VL PGothic"
"Tahoma"="VL PGothic"
"\xff2d\xff33 \x30b4\x30b7\x30c3\x30af"="VL Gothic"
"\xff2d\xff33 \xff30\x30b4\x30b7\x30c3\x30af"="VL PGothic"

.NET Framework系アプリを動かす

winetricks > Select the default wineprefix > Install a Windows DLL or componentから

などを入れます。

dotnetは(10->)20->30->35の順番でしか入りません。途中でコケたらその後のものは入りませんが、40だけは別に入れることができます。
ie7,8がないと上手く動かないものがあるようです。
msxml, mfc, vcrun, wshなどは必要ないかもしれません(必要があれば勝手に入る)。

メニューのフォントが化けるor綺麗じゃない場合は

~$ winecfg

デスクトップ統合 > 項目のメニューバーのテキストのフォントなどをいじると変えることができます。

ゲームを動かす

  • d3dx*
  • devenum
  • dinput, dirac
  • directmusic, directplay, dmsynth, dsound
  • dxdiag, ffdshow
  • quartz
  • vcrun*
  • wmp*

などを入れます。

d3dxは9,10,11を入れれば大丈夫だと思います。

上手く動かない

汎用

コマンドラインからwineを実行すると、たくさんメッセージが出ると思います。

err:[name]:[message]

となっているものがあれば、[name]のdllがおかしいことが多いです。
fixme:hogehogeは無視して大丈夫です。

~/.wine/drive_c/windows/system/system32の中に指定されたdllを(どうにかして手に入れて*3 )入れるか置換して、winecfgのライブラリからその名前のものを"ネイティブ版"として追加すると上手く行くことがあります。

kernel32.dll, gdi32.dll, user32.dll, ntdll.dll, ole.dllなどは置き換え無いほうがいいかもしれません。

(ゲームなどの)音が鳴らない・割れる

winecfgオーディオのところにドライバがセットされて、音をテストして上手く行くことを確認してください。
また、winetricksで音関係のdllをいれてください(dsoundとかdirectmusicとか)。

音割れが激しい場合はPulseAudioを消して再起動すると直ることがあります(PulseAudio周りのドライバがおかしい場合)。

強制終了する

ゲームであれば、動画の再生の際にコーデックがないなどの理由で強制終了してしまうことがあります。
wmpやその他の動画コーデックをいれてみてください。

詰んだ

以下のようなエラーが出たら詰んでいることが多いです。

  • Unhandled page fault on read accessなどのメモリ関係の強制終了
  • gstreamerのエラー(ディストリ用パッケージを入れると動くかも?)
  • 一部のole関係のエラー
  • 一部のinitialization系エラー(ゲームを動かす要件を満たしてないことが多い)
  • 一部のerr:module:import_dll Libraryなどのエラー(dllをネイティブ版で置き換えると上手く行くことも)
  • 何が悪いのかよく分からないエラー(何が悪いのか分かっていない場合は解決手段も分からないので詰んでる)

詰んだら一からやり直しましょう。
~/.wineをリネームして(削除でも構いませんが残しておくほうがあとあと便利だと思います)、全ての設定をしなおすと上手く行くことがあります。
(動いてるという報告があって)どうしても動かない場合は経験上これが早いです。

まとめ

  • Wineは便利だけど闇
  • 特にゲームは闇
  • winetricksで必要なものを揃えよう
  • エラーメッセージを読もう
  • 割とよく詰む

参考

情報が古いものもあるので気をつけてください。

*1:MacにもWineBottlerという名前で移植されています

*2:Wine Is Not an Emulatorの略

*3:dll-filesなどから探すかそれ以外の方法を考えてください。