本記事はWine環境(WINEPREFIX)についてとこれを利用したWindowsアプリケーションの管理について書かれたものとなる。
元の記事は2007年11月に書かれたが、内容のほとんどを書き直している。
Wine環境/WINEPREFIXとは何か
Wineの仮想Cドライブやレジストリは、通常[ホームディレクトリ]/.wine/
というディレクトリの中に一緒に格納されている。このディレクトリはWineでプログラムを動かす際の “環境” としての役目を果たす[1]が、Wine実行時の環境変数によってこの場所を切り替えることができ、複数の環境を使い分けることで管理上のメリットもある。
その環境変数はWINEPREFIXで、これが未定義のときに標準の場所である[ホームディレクトリ]/.wine/
が使われる。
このWine環境(ディレクトリ)は “wineprefix” もしくは単に “prefix” と呼ばれることがある。
既存のWine環境以下を全て削除したり新しい環境を作ったりするとWineの設定やCドライブの中身を初期状態にでき、環境を使い続けている内に何か不具合が起きたときに役立つことがある。
Wine環境の中身の詳細
下はWine環境の最上位ディレクトリ以下のディレクトリツリーを図にしたものとなる(角括弧で囲まれた項目はディレクトリ)。
--+-[dosdevices]-+-[c:] | +-[d:] | ... | +-[z:] | 各ドライブへの参照 | (シンボリックリンク) | +-[drive_c] | 仮想Cドライブの実体 | +-system.reg | HKEY_LOCAL_MACHINE(HKLM) | +-user.reg | HKEY_CURRENT_USER(HKCU) | +-userdef.reg HKEY_USERS\.Default
ドライブの割り当てについて
dosdevices
内には仮想ドライブ[2]の割り当てに関係したシンボリックリンク群があり、GUI設定ツールwinecfg
の “ドライブ” タブで割り当てを変更できる。標準ではZドライブが/
を参照し、この割り当て(dosdevices/z:
)を削除することでアプリケーション側からは基本的に仮想Cドライブ(と他に手動で設定したドライブ)以外にアクセスできなくなる[3]が、winecfg
の “デスクトップ統合” タブの “フォルダ” 内の項目が仮想Cドライブの中でホームディレクトリ内の幾つかのディレクトリを参照するようになっており、(信頼できないソフトウェアを動かすときなど)環境をサンドボックス化したい場合はこれらのチェック(リンク)を外すなどする必要もある。
仮想Cドライブの種類
仮想Cドライブの中のディレクトリツリーには2つの種類がある。
64bit版のWineを用いて新しく作成された環境の仮想Cドライブはx64(64bit)版Windowsと同様に以下の構造となり、64bit版のWineでWin64アプリケーションを、32bit版のWineでWin32アプリケーションを動かすことができる。つまり、64bit/32bit両対応の環境となる。
--+-[Program Files] | 64bitアプリケーション | +-[Program Files (x86)] | 32bitアプリケーション | +-[windows]-+-[system32] | | 64bitのDLLなど | | | +-[syswow64] | | 32bitのDLLなど
32bit版のWineを用いて新しく作成された環境の場合はx86(32bit)版Windowsと同様に以下の構造となり、32bit版のWineでWin32アプリケーションを動かすときにしか使えない。
64bit版のWineがインストールされていてもこの形の環境を作成することは可能(後述)。
--+-[Program Files] | 32bitアプリケーション | +-[windows]-+-[system32] | | 32bitのDLLなど
新しいWine環境を作成する
環境の最上位ディレクトリとして使用したいパス名を環境変数WINEPREFIXに指定した状態でWineを用いて任意のWindowsアプリケーションやwinecfg
のような付属ツールなどを実行すると、その実行の際に(環境が存在しない場合に)自動的に環境が作成される。作成処理にはしばらく時間がかかる。[4]
作成処理のみを行いたい場合はwineboot
コマンドを実行する。ただし、Wine向けのMonoやGeckoといったパッケージのインストールを確認するダイアログは表示されることがあり、選択肢のボタンを押すまで処理は進まないため、作成処理のみの完全な自動化は難しい。[5]
([ホームディレクトリ]/.wine-foo に環境を作成する例) $ WINEPREFIX=~/.wine-foo wineboot
環境作成時の注意点
存在しないディレクトリの扱い
環境変数WINEPREFIXのパス名の最後の階層だけは環境作成時に存在していなくても問題ない。例えば、[ホームディレクトリ]/wineprefixes/
というディレクトリのすぐ下にfoo
やbar
といったディレクトリのWine環境群を配置したい場合、(環境の最上位ディレクトリから1つ上となる階層の)[ホームディレクトリ]/wineprefixes/
のディレクトリまでは必要だが、環境の最上位ディレクトリとなる階層の[ホームディレクトリ]/wineprefixes/foo
や[ホームディレクトリ]/wineprefixes/bar
といったディレクトリを事前に準備(作成)しておく必要はない。
([ホームディレクトリ]/wineprefixes/foo に環境を作成する例) $ mkdir ~/wineprefixes $ WINEPREFIX=~/wineprefixes/foo wineboot
作成場所に対する所有権
環境変数WINEPREFIXのディレクトリは自分が所有しているディレクトリである必要がある。
自分に書き込み権限があるディレクトリであっても自分が所有者でないディレクトリは指定できない(環境の作成に失敗する)。
(/tmp/以下に環境を作成しようとして失敗する例) $ WINEPREFIX=/tmp wineboot wine: /tmp is not owned by you (同様の例・最後の階層のディレクトリが存在しない場合) $ WINEPREFIX=/tmp/newprefix wineboot wine: '/tmp' is not owned by you, refusing to create a configuration directory there
64bit版Wineでの32bit専用環境の作成
64bit版のWineがインストールされている環境では標準で64bit/32bit両対応の環境が作成されるが、好みや事情により32bit専用の環境を作成したい場合も出てくる。
32bit専用の環境を作成する場合、環境作成の際に環境変数WINEARCHを “win32” にする。ただし、環境変数WINEPREFIXにする階層の(空の)ディレクトリを事前に作成してしまうと処理に失敗するというバグがあるので、事前に同環境変数の場所にディレクトリが存在しないようにする点に注意が必要。
(標準の場所に32bit専用環境を作成・既に[ホームディレクトリ]/.wine/が存在する場合は移動・削除などする) $ WINEARCH=win32 wineboot (環境の場所を指定する形) $ WINEPREFIX=[Wine環境の場所] WINEARCH=win32 wineboot (処理に失敗する例) $ mkdir newprefix $ WINEARCH=win32 WINEPREFIX=/path/to/newprefix wineboot wine: WINEARCH set to win32 but '/path/to/newprefix' is a 64-bit installation.
Wine環境を選択してプログラムを実行する
Windowsアプリケーションの実行時に環境変数WINEPREFIXを指定することで、実行時のWine環境を選択できる。
以下の例では[ホームディレクトリ]/wineprefixes/foo
という環境を用いて仮想Cドライブ内のC:\Program Files\Foo\
以下にあるfoo.exe
を実行するものとする。環境やアプリケーションのディレクトリや実行ファイルの名前は実際に使うものに読み替える。
端末から実行する場合
(作業ディレクトリを移動して実行する形) $ cd ~/wineprefixes/foo/dosdevices/c:/Program\ Files/Foo/ $ WINEPREFIX=~/wineprefixes/foo wine foo.exe (作業ディレクトリを移動せずに実行する形・プログラムによっては正しく動かない) $ WINEPREFIX=~/wineprefixes/foo wine "C:\Program Files\Foo\foo.exe"
シェルスクリプトを記述して実行する場合
見出し:端末から実行する場合と同様の流れをシェルスクリプトとして記述して実行する形。ランチャを手動で作成する場合(後述)にコマンドとしてこのスクリプトの場所を指定することもできる。
#! /bin/sh
export WINEPREFIX=~/wineprefixes/foo
cd ${WINEPREFIX}/dosdevices/c:/Program\ Files/Foo/
wine foo.exe
デスクトップ環境などのメニュー項目
“スタート” メニュー項目が作られるインストーラでインストールしたアプリケーションの場合、インストーラ実行時の環境変数WINEPREFIXに関係した指定はデスクトップ環境などのメニューの中にあるWine用のメニュー内に作られる項目の中に含まれており、特にファイルを編集したりする必要はない(そのまま実行すればインストーラ実行時に使用されていた環境で動作する)。アイコン画像についても[ホームディレクトリ]/.local/share/icons/
以下に配置されたものの名前が記述されており、Windows上と同じように表示される。
このメニュー項目は~/.local/share/applications/wine/Programs/
以下の.desktopファイルとして保存される。下はfoobar2000をインストールした場合の例。
~/.local/share/applications/wine/Programs/foobar2000.desktop
[Desktop Entry]
Name=foobar2000
Exec=env WINEPREFIX="/home/[ユーザ名]/wineprefixes/foobar2000" wine C:\\\\windows\\\\command\\\\start.exe /Unix /home/[ユーザ名]/wineprefixes/foobar2000/dosdevices/c:/users/Public/Start\\ Menu/Programs/foobar2000.lnk
Type=Application
StartupNotify=true
Comment=Play, organize and tag your music.
Path=/home/[ユーザ名]/wineprefixes/foobar2000/dosdevices/c:/Program Files (x86)/foobar2000
Icon=3C17_foobar2000.0
インストーラが “スタート” メニュー項目を作らないプログラムやインストーラのない(書庫を任意の場所に展開して実行するだけで使用できる)プログラムでは.desktopファイルを手動で記述する必要があるが
- “Exec” に(“env WINEPREFIX=[Wine環境のディレクトリ(絶対パス)]” を含んだ)実行コマンド
- “Path” に絶対パスの作業ディレクトリ
をそれぞれ記述するようにする。配置場所は[ホームディレクトリ]/.local/share/applications/wine/Programs/
や[ホームディレクトリ]/.local/share/applications/
。
デスクトップのランチャから実行する場合
インストーラがデスクトップ上にランチャを作成した場合は見出し:デスクトップ環境などのメニュー項目と動作、特にファイルを編集したりはせずにそのままそれを実行すればよい。デスクトップランチャが作成されない場合でも、メニュー上にのみ項目が存在すればそれをデスクトップにコピーして実行することもできる。
デスクトップやメニューに項目が自動的に作られずに手動でランチャを作成したい場合、コマンドと作業ディレクトリを以下のような形で指定してランチャを作成する(アイコンなどは好みで決める)。
- コマンド: “env WINEPREFIX=/home/[ユーザ名]/wineprefixes/foo wine foo.exe”
- 作業ディレクトリ: “/home/[ユーザ名]/wineprefixes/foo/dosdevices/c:/Program Files/Foo”
環境の分け方
Wine環境は個別のアプリケーションごとに分けてもよいが、ディスク領域もある程度使用するため、細かく分けすぎるのではなく、用途やWineの設定、使用ライブラリなどが共通したアプリケーションをひとまとめにして管理するのに使うのがよい。
下は分け方の幾つかの例。どのように分けるかは人それぞれなので、下のようにしなければならないというものではない。
- オーディオプレーヤ群で1つの環境とする
- Windowsネイティブ版の特定のシステムライブラリ(DLL)がないとうまく動かないソフトウェア群で1つの環境とする
- RPGツクール系の各種ランタイムライブラリ(RTP)全てで1つの環境とし、これらを用いて作られた作品を動かす際にその環境を指定する
- Win64アプリケーション群で1つの環境とする
- .NET Frameworkを使用するアプリケーション群で1つの環境とする
- 継続して使用したいアプリケーション群は全て1つの環境にまとめる
- Wine 1.6.2