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

😃 mattintosh note 📝

Hello Raspberry Pi!

🍎 Mac × Wine の使い方 🍷

Wine Wine 実験室 Mac OS X MacPorts Homebrew

少しづつ編集中。。。

ここにある情報は基本的に 1.5 系以降のものです。

Wine のインストール方法

色々方法があります。

A)WineBottler や MikuInstaller などのアプリケーションを使う

Windows から Mac に移行した方だとわかりづらいかもしれませんが、Wine は wine.exe のように1つにまとまった形式になっておらず、基本的にはコマンドライン(ターミナルをつかうアレ)で使うものです。それにインターフェイスをつけたものが WineBottler や MikuInstaller といったアプリで、他にも派生がたくさんあり、有償の CrossOver というものもあります(ここにある情報は CrossOver については触れていません)。

いずれも内部に Wine を用いていますが、仕組みがバラバラです。恐らく日本語で扱えるのは MikuInstaller くらいですが Wine のバージョンが少し古くなっており、起動方法等も X11.app 用なので Lion 移行で使う場合は少し細工が必要です。

これらの導入方法は他に解説しているサイトが山ほどあるのでここでは省略します。

あまり多機能ではありませんが当方が日本語環境用に作成している NXWine.app と iNSTANTWiNE.app もあります。

B)MacPorts や Homebrew を使ってインストールする

MacPorts や Homebrew はパッケージ管理システムというもので AppStore みたいなものです。基本操作はターミナルで行うことになるので上記のようなサードパーティー製アプリケーションに比べるとハードルが上がります。ドキュメントも基本的に英語です(日本語解説サイトはたくさんあるけど)。また、ソースからインストールすることになるので時間が非常にかかります。

これらを使ってインストールする場合は以下の手順が必要です。

  1. Xcode を導入(Lion 移行はコマンドラインツールが必要)
  2. パッケージ管理システムのインストール

Lion 以降の場合は Xcode は AppStore から入手できます。Snow Leopard は OS のインストールディスクから、それがなければ Apple Developer Center へ登録し、インストーラーをダウンロードしなくてはいけないので結構手間がかかります。なお、Apple Developer Center への登録は無料ですが手続きはほぼ全て英語です。この辺も最近解説サイトが多いのでこちらでは省略します。

C) 自分でビルドする

XQuartz などのライブラリを流用すれば Wine のビルドはそれほど難しくありません。Git ソースを使えば開発中の新機能などを試したりすることもできます。

http://mattintosh.hatenablog.com/entry/2013/03/10/132836

D) 諦めて市販のソフトを使う

ここまでざっと読んでみてよくわからなければ市販ソフトの『CrossOver Mac』を使うのもアリかもしれません。

ネットジャパン CrossOver Mac 11

ネットジャパン CrossOver Mac 11

VMware Fusion 5

VMware Fusion 5

Parallels Desktop 8 for Mac

Parallels Desktop 8 for Mac

パッケージ管理システムのインストール

まず先に MacPorts を使うか Homebrew を使うかを決めましょう。両方インストールすることも可能ではありますがおすすめしません。当方はメインが MacPorts で Homebrew は最近使っていないので情報が古いかもしれないです。

MacPorts パッケージが豊富。バイナリ化されているものはダウンロードして再配置されるだけなのですぐにインストールできる。既にシステムにあるものでも新規にインストールしたりするので容量を多く消費する。fontconfig の仕様が X11.app や XQuartz.app のものと異なるためフォント環境の設定が必要になるかも。
Homebrew 比較的新しいパッケージ管理システム。既にシステムにあるものをそのまま使うのでビルド時間も短縮でき、容量の消費も少ない。

Wine に関することだと依存関係に gettext が含まれていないのでビルド時に日本語メッセージが生成されず、英語でしか表示できない可能性がある。また、今のところフォーミュラに Zenity が無いので Winetricks を GUI で起動することができない。

MacPorts のインストール

MacPorts はインストーラーが配布されています。該当する OS を選択してディスクイメージをダウンロードしてインストールします。

https://www.macports.org/install.php

Homebrew のインストール

Homebrew はターミナルでインストールスクリプトを実行します。詳しくは公式ガイドを見て下さい。

http://mxcl.github.io/homebrew/index_ja.html

パッケージ管理システムから Wine をインストールする

ここでは MacPorts と Homebrew での Wine のインストールについて説明します。

MacPorts

こちらのページにまとめました

Homebrew

# 1.4 ç³»
$ brew install wine
# 1.5 ç³»
$ brew install wine -devel

パッケージ管理システムによる Wine の違い

インストール先

MacPorts と Homebrew ではファイルの配置が異なります。WINELOADER は Wine 本体を呼び出すシェルスクリプトで DYLD_FALLBACK_LIBRARY_PATH などが設定されています(そのままインストールすると Wine が X11 のライブラリの場所を知らない為)。MacPorts 版は階層レベルが異なるため、Wine 本体の RPATH が install_name_tool によって変更されています。Fink 版は忘れました。

名前 prefix WINELOADER Wine 本体
MacPots /opt/local /opt/local/bin/wine /opt/local/libexec/wine/wine
Homebrew /usr/local /usr/local/bin/wine /usr/local/bin/wine.bin

依存関係

MacPorts 版の Wine は多くのパッケージが依存関係に含まれるためインストールに非常に時間がかかることがあります。Homebrew 版は依存関係も少なく、X11 ライブラリを新たにインストールしないのでそれほど時間はかかりません。

Winetricks に関しても MacPorts 版は非常に時間がかかります。これは GUI インターフェイスを提供する zenity が gtk2 を要求するからです。また、MacPorts 版は Portfile が半年以上更新されていないので手動で導入することをおすすめします。

Mac 環境での Winetricks の使い方 - mattintosh note -hatena- Mac 環境での Winetricks の使い方 - mattintosh note -hatena-

Wine の実行方法

"wine" があるディレクトリに PATH が通っていれば wine、通っていなければフルパスで実行します。

$ wine [プログラム名]
$ wine [ファイルパス]

wine コマンドは引数にプログラム名が渡された場合、

  • $WINEPREFIX/.wine/drive_c/windows/system32
  • $WINEPREFIX/.wine/drive_c/windows

にあるファイルを検索します。このパスは環境変数 WINEPATH(コロン区切り)で追加できます。Wine のレジストリ内にある PATH の値に追加することもできます。

"program.exe" のように ".exe" がなくても実行できますがこれは恐らくレジストリ内にある "PATHEXT"=".COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH" で制御していると思われます。(未確認)

WINEPREFIX とは仮想 Windows 領域を作成するパスのことで、bash などの $HOME にあたるものです。指定が無い場合は WINEPREFIX=$HOME/.wine です。

ファイルパスは全て入力する必要はなく、Finder からファイルをドラッグすればターミナルアプリケーションにパスが自動で入力されます。Finder で command + c してからターミナルアプリケーションで command + v で貼り付けることもできます。

Wine の start コマンド

以下のように実行すると Wine エクスプローラから実行されたようになり、ただファイルパスを指定するよりも実行しやすくなります。また、msiexec /i が必要なファイルもそのまま処理できます。詳しくは wine start /? で。

$ wine start /Unix /path/to/program.msi

主なコマンド

以下のコマンドに関してはシェルスクリプトが用意されているので wine 〜 というコマンドを使わずにそのコマンド単体で直接実行できます。

  • msiexec
  • notepad
  • regedit
  • winecfg
  • winefile
  • winemine

wine 〜 の各コマンドにはオプションが用意されていることがあります。各コマンドの詳細については以下のページに記載されています。

http://wiki.winehq.org/CategoryListofCommands

コマンド 処理
wine explorer Wine ファイルブラウザを起動します。
wine winefile または winefile Unix ライクなファイルブラウザを起動します。
wine winecfg または winecfg Wine 設定を起動します。
wine regedit または regedit レジストリエディタを起動します。
wine control コントロールパネルを起動します。
wine uninstaller プログラムの追加と削除を起動します。
wine notepad または notepad メモ帳を起動します。
wine iexplore Wine インターネットエクスプローラを起動します。
wine winemine または winemine マインスイーパを起動します。
wine msiexec /i msi 形式のファイルを実行するときに使用する書式。
wine start プログラムを開始したり、拡張子に基づき通常使われるプログラムで文書を開きます。
wine start /unix Unix ファイル名を使い、windows エクスプローラのようにファイルを開始します。

環境変数

$prefix は Wine のインストール先。全部は細かく書けないので公式 Wiki などを参照して下さい。

環境変数 例
WINEPREFIX WINEPREFIX=/tmp/wine 仮想 Windows 領域を作成するパス。指定がない場合は $HOME/.wine。ちなみに /tmp/wine や $TMPDIR/wine を指定すると OS 再起動時に仮想 Windows 領域のデータは自動的に削除されるのでテスト用として使ったりすることができる。
WINELOADER $prefix/bin/wine $prefix/bin 以下にある regedit や regsvr などに指定する Wine のパス。指定がなければ ${prefix}/bin/wine、それが存在しなければ $PATH 上にある wine を探す。
WINESERVER $prefix/bin/wineserver wineserver のパス。
WINEPATH WINEPATH="$HOME/Program Files/foo" Wine がプログラムを検索するパス。wine program.exe のようにファイル名のみで実行できるようになる。WINEPREFIX 以下に無いプログラムなどを呼び出す場合に便利。.exe は無くても動く。セミコロン区切りで複数指定可能。
WINEDLLOVERRIDES WINEDLLOVERRIDES="quartz,gdiplus=n" 一時的にダイナミックライブラリのオーバーライドを変更する。dll=n ならネイティブ、dll=b ならビルトイン、dll=n,b ならネイティブの後にビルトインという感じ。名前指定の他、パスでの指定も可能。セミコロン区切りで複数指定可能。
WINEDEBUG WINEDEBUG=-all デバッグメッセージ用オプション。一切に必要ないなら WINEDEBUG=-all とすることで出力を抑制できる(パフォーマンスが若干よくなるかも)。+loaddll ならロードしているライブラリの確認ができる。
WINE WINE=/usr/local/wine/bin/wine Winetricks 用変数。Winetricks に指定する WINELOADER のパス。Wine と Winetricks が異なる場所にあるときに使う。
LANG LANG=en_us.UTF-8 言語を設定するシェル変数。日本語環境なら LANG=ja_JP.UTF-8 としておくのが無難。日本語環境でも en_us.UTF-8 を指定すれば Wine を英語環境用で起動できる。

WINEPREFIX の取り扱い

Wine を実行したときに WINEPREFIX が設定されていなければ $HOME/.wine に作成される。一時的に WINEPREFIX を切り替える場合は以下のように実行する。ログアウトするまで変更を適用するなら export する。

$ WINEPREFIX=$HOME/wine wine explorer

常に WINEPREFIX の場所を変更したいのであれば使っているシェルのプロファイルなどに以下のように記述しておく。この記述は Automator や AppleScript などのアプリケーションには適用されないので注意(詳しくは以下の Automator と AppleScript の項を参照)。

export WINEPREFIX=$HOME/wine

デフォルトの WINEPREFIX を Finder で開く

デフォルトの WINEPREFIX は $HOME/.wine のようにドットファイルになっているのでそのままでは Finder に表示されない。Finder の移動コマンド(command + shift + G)で ~/.wine などと入力するか、ターミナルで open コマンドを使用する。

$ open ~/.wine
$ open $HOME/.wine

以下のコマンドを実行することでデスクトップに WINEPREFIX へのシンボリックリンクを作成することができる。

$ ln -s ~/.wine ~/Desktop/wine

フォント関連の設定

以下の記事にまとめています。

Mac と Wine のフォント関連の設定 - mattintosh note -hatena- Mac と Wine のフォント関連の設定 - mattintosh note -hatena-

ファイルパスについて

Wine では Unix パスと Windows パスが使えます。それぞれのパスは winepath コマンドで変換することでできます。

Unix Windows
/usr/local
$WINEPREFIX/dosdevices/z:/usr/local
Z:\usr\local
$WINEPREFIX/drive_c/windows/system32
$WINEPREFIX/dosdevices/c:/windows/system32
C:\windows\system32

Automator や AppleScript エディタで Wine のランチャを作る

Automator や AppleScript エディタで Wine を呼び出すアプリケーションを作成できます。注意する点はこれらのアプリケーションは $HOME/.bashrc などに記述している PATH や WINEPREFIX などは適用されない ということです。. や source コマンドでプロファイルを読み込むか、$HOME/.MacOSX/environment.plist(Leopard)や $HOME/.launchd.conf(Lion)への記述をおすすめします。

Automator

MacPorts 版 Wine を使った「シェルスクリプトを実行」アクションの例です。書き方は色々あります。

次の例ではファイル入力があればそれを Wine で開き、なければ Wine エクスプローラを起動します。WINEDEBUG=-all は必須ではないですが、どうせログを見れないので出力を抑制しておきます。

WINEPREFIX は指定しなければ $HOME/.wine ですので記述しなくても問題ありません。

# template: application
# shell: /bin/bash
# input: args

export LANG=ja_JP.UTF-8
export PATH=/opt/local/bin:$PATH
export WINEPREFIX=$HOME/.wine
export WINEDEBUG=-all

if [ "$1" ]
then
    for f in "$@"
    do
        wine start /Unix "$f"
    done
else
    exec wine explorer
fi

AppleScript

もし AppleScript がわかるなら AppleScript を使ったほうが Automator よりも起動が早くなります。こちらも Automator 同様に WINEPREFIX は特に記述しなくても問題ありません。

try
    do shell script "
        export PATH=/opt/local/bin:$PATH
        export WINEPREFIX=$HOME/.wine
        export WINEDEBUG=-all
        wine explorer
    "
end try

EXE ファイルごとにランチャを作成するなら start /Unix オプションを使います。ファイルパスはスペースや ! が含まれていたりすると正しく処理されないのでシングルクオートで囲うことをおすすめします。(詳しくは「sh エスケープ」等で検索して下さい)

try
    do shell script "
        export PATH=/opt/local/bin:$PATH
        export WINEPREFIX=$HOME/.wine
        export WINEDEBUG=-all
        # ファイルパスのスペース等に注意
        wine start /Unix '/path/to/program.exe'
        # ダブルクオートの場合はバックスラッシュでエスケープする
        # wine start /Unix \"/path/to/program.exe\"
    "
end try

AppleScript でも少しカスタマイズすれば Automator 同様にファイル入力等の処理もできます。

Mac で AppleScript を使って Wine.app を作成する - mattintosh note -hatena- Mac で AppleScript を使って Wine.app を作成する - mattintosh note -hatena-

アイコンは myapp.app/Contents/Resources/applet.icns を上書きするか、任意の名前のアイコンファイルを用意し、Contents/Info.plist 内の CFBundleIconFile の値を変更します。

その他

コピーとペースト

Wine ウィンドウ領域では command + C ではなく Windows と同じ control + C。command キーは alt キーとして動作する。

Windows アプリケーションが動かなくなった、起動しなくなった

ターミナルから実行した場合はターミナルアプリケーション上で control + C を押すことでプロセスを終了できます。wine が再度立ち上がらない場合は裏でプロセスが動いている可能性があるので killall コマンドで強制終了させます。アクティビティモニタから終了してもOK。

killall wine wineserver

RPG ツクールベースのゲームが Sophos Anti-Virus にひかっかる

『Ib』や『ゆめにっき』などの RPG ツクール 2000/2003 系のゲームが Sophos Anti-Virus でウイルスとして検出され実行できないことがある。これは「環境設定 > オンアクセス検索 > 検索の停止」で一時的に回避することができる。今後もそのファイルを検索対象から外す場合は除外アイテムに追加する。