Windows Subsystem for LinuxでWineを動かしてみる。


WSLでWineを動かしてみる。

だれかやってるはずだと思ったし、実際挑戦してる人もいるみたいなのにまとめている人が誰もいない。
まあこの記事も結論を言ってしまえば、全く役に立ちそうにないというものだが。

WSL(Windows Subsystem for Linux)を使えば、Windows10(64bit)上で仮想マシンを用意することなくLinuxのアプリケーションを動作させることができる。
現在初期状態ではUbuntuの14.04又は16.04がインストールされるが、別にubuntu専用の環境というわけではなく、既にArchlinuxを始めとしていくつかのディストリビューションの動作が確認されている。
wineとはLinuxやOS X、BSDその他unix等、Windowsでない環境で仮想マシンを用意することなくWindowsのアプリケーションを動作させることができるアプリケーションである。

…もうおわかりいただけたであろう。WSL上でwineを動かすことができればWindows10(64bit)上で仮想マシンを用意することなくWindowsアプリを動かすことができるのである!

…ん?なにかおかしなことを言ってるかい?

注意点(問題点)

…とまあつらつら書いたがこんな変態行為をやってみようと思った時点で…というのもあるので本題に入る。
致命的な問題点だらけなのでよく読んでから実験に移るように。

重い

筆者の環境はi5-3337U、RAM4GBなのだが、はっきり言って重い。
かなりもっさりしてるので覚悟の上で。

日本語入力は今のところ未確認

uimを入れていたが私の環境では使えなかった。要検証。

音は出ない?

WSLはサウンドデバイスが設定されていない(存在しない?)ようなので音は出ない。
しかしVLCを動作させている報告もある。流石にここまでは試していないが設定次第じゃ行けるかも。

wine単体では16bitアプリケーションは動作不可能

wineから16bitアプリケーションを動作させる場合はDOSboxを呼び出すことになる。
DOSboxならwindows版が用意されているので態々WSLを使う必要性は低い。
16、32、64bitのアプリケーションがパイプラインで繋がる姿はロマンがありそうなのだが残念である。

WSLは32bitのバイナリを実行不可能

…そう、64bit向けのバイナリしか動作させることができないのである。
したがってwineも64bitのバイナリで動かす必要がある。
要望も上がっているので今後の対応に期待したいところである。

WSLはWindows8.1以前のWindowsや32bitのWindows向けには用意されていない

Windows8.1以前のWindowsや、32bitのWindows10にはWSLが用意されていない。
上の問題が絡んでいる可能性があるが、実際のところは不明。

WSL上のwineは32bitのバイナリを実行不可能?

トドメにこれである。つまり64bitなバイナリしか動かない可能性大。
確定ではないが、以下のような簡単なプログラムでも32bitだと動作できなかったあたりかなり怪しい。

#include <stdio.h>

void main(void){
    printf("Hello, world!\n");
    return;
}

コンパイラは用意するのが面倒だったのでRtools34に付いてきたmingw32、mingw64を使用した。
勿論64bitでは色々出るものの、最終的に動作した。
他にたまたまデスクトップに転がっていたmml2mid version 5.30bも試したが、やはり64bitでビルドしたものは動作するが32bit版は元々ビルドされていたものも自分でビルドしたものも動作しなかった。
Firefoxのインストーラは32bit、64bit共に動作しなかった。インストーラが32bitの可能性があるが調べていないのでわからない。

筆者の実験環境

OS:Windows10 Pro Insider Preview 14986
PC:i5-3337U
RAM:4GB

wineをインストールしてみる。

WSLのインストール方法はググればいくらでも出てくるので端折る。
更にXWindow Systemを使用するためWindows向けのxサーバをインストール、起動しておく。VcXsrvやXming等がそれだ。
或いはCygwinからインストールできるものやMobaXtermというソフトに付属しているものでも良いはずだが試してはいない。
これもググればいっぱい情報が出てくるはず。

WSLでbashを起動したら、以下のコマンドを実行。といっても特別珍しい処理はない。

echo "export DISPLAY=localhost:0.0" >> ~/.bashrc
source ~/.bashrc
sudo dpkg --add-architecture i386
sudo add-apt-repository ppa:wine/wine-builds
sudo apt update
sudo apt install --install-recommends winehq-devel
sudo apt install winetricks fonts-takao

ディスプレイ情報を.bashrcに追記、i386アーキテクチャのバイナリをインストールできるようにして、WineHQの公式ppaを追加。
その後アプリケーションリストを更新してwine-develをインストール、更にwinetricksとfonts-takaoをインストールさせている。
フォントに関しては後でWindowsのフォントを利用できるようにするのでいらないといえばいらないのだが一応。

普通はLinuxが64bit環境の場合、この後にexport WINEARCH=win32 winecfgを実行するのだが、
WSLではやってはいけない。32bitが動作しないためだ。

64bitなバイナリしか動かないとか言っときながらi386のアーキテクチャを追加しているが、依存関係上そうしないとインストールできないのでしょうがない。
これはWineHQ公式ppa以外からでも同じで、Ubuntu-wine-TeamやUbuntu初期のppaからインストールするときも必要とされる。

wine64 --version

これでバージョンが表示されれば成功だ。何度も述べている通り32bit版は操作しないので、wine --versionではエラーが出る。
このままだとwinetrickが動作しない、winecfg等を実行するためにwine64 winecfgと入力するか、
wine64 cmdとやってからwinecfgする必要があったりと色々問題がある。
これらはそのままだと32bit版のwineを呼ぶためだ。
…尤もwinetricksの自動インストール機能はエラーが出まくってまともに動かないようだが。
そこで大変汚い対策を施す。
/usr/bin下にあるシンボリックリンクの交換だと何故かうまく行かないケースがあったので今回はバイナリを直接リネームして交換した。

sudo mv /opt/wine-devel/bin/wine /opt/wine-devel/bin/wine32
sudo mv /opt/wine-devel/bin/wine-preloader /opt/wine-devel/bin/wine32-preloader
sudo cp /opt/wine-devel/bin/wine64-preloader /opt/wine-devel/bin/wine-preloader
sudo cp /opt/wine-devel/bin/wine64 /opt/wine-devel/bin/wine

これでインストール完了。

winecfg

と入力すればwineが動作するはずだ。

Windowsのフォントにシンボリックリンクを貼る。

起動が確認できたら一旦ウィンドウを閉じる。
この時点でホームディレクトリ下に.wineというディレクトリが作成されているはずだ。
しかし当然Windows用のフォントはwineには用意されていない。
Windowsの上で動いているのだからシンボリックリンクを貼ってしまえば良い。

rm -rf $HOME/.wine/drive_c/windows/Fonts
ln -s /mnt/c/Windows/Fonts $HOME/.wine/drive_c/windows/Fonts

これでwineからWindowsフォントを使用することができる。
ちょっとコマンドをいじればWindowsとデュアルブートしている場合にも応用できるが、
Windowsが休止状態(高速スタートアップによるもの含む)だとWindowsのドライブにアクセスできないので注意。

wine notepad

とやって、編集→フォントでWindowsのフォントが選択できることが確認できるはずだ。
ちなみにそのままnotepad.exeとか入力するとWindows10のメモ帳が起動してしまうので注意。
この機能はsudo sh -c "echo 0 > /proc/sys/fs/binfmt_misc/WSLInterop"で無効化(0を1にすれば有効化)できるが、
無効化したところでコマンド実行自体はできてしまう(エラーがでるようになる)のであまり意味はない印象。

Enjoy!

とりあえず一通りやることはこれで終わり。
64bitなバイナリしか動かなかったりwinetricksがまともじゃなかったりするけどとりあえず動くのは動きます。
あとは自分の好きなように色々やってみてください。
…筆者の動かしてみたかったプログラムは殆ど32bitだったけどな!