長く引っぱったWINEがらみの話題も今回で一段落となります。このシリーズを書き始めて約8ヵ月、WINEに手を出してからちょうど1年くらいかかった計算です。最終回の今回はWINEの簡単な使い方やPlamo LinuxでのWINEサポートの現状等を紹介します。
WINEの使い方
WINEの使い方自体は簡単で、引数として実行したいWindowsアプリ(exeファイル)を指定するだけ です。
一例として、同人ゲームとして有名な「東方プロジェクト」の体験版を取りあげてみましょう。「 東方プロジェクト」とは、いわゆる「弾幕シューティング」タイプのゲームで、画面を華麗に埋めつくす弾幕をかわしつつ、敵のボスキャラを撃破していくゲームです。
「東方プロジェクト」のゲーム は、正式版はコミケ等で販売される商用ソフトなものの、最初の数ステージを試せる体験版がインターネット上に無料公開されているのでWINEのテストには便利です。今回はそれらの中から「東方紺珠伝~Legacy of Lunatic Kingdom」を試してみることにします。
図1 東方プロジェクトのページ
まず、ダウンロードのページから体験版をダウンロードします。ミラーサイトからダウンロードした「東方紺珠伝」の体験版はsetup_th15_001b.zipというZIP圧縮されたファイルでした。確認すると中身はexeファイル一つだけなので、そのまま展開しておきます。
$ unzip -l setup_th15_001b.zip
Archive: setup_th15_001b.zip
Length Date Time Name
--------- ---------- ----- ----
186545248 07-31-2015 18:01 setup_th15_001b.exe
--------- -------
186545248 1 file
$ unzip setup_th15_001b.zip
inflating: setup_th15_001b.exe
$ ls -lh setup*
-rw-r--r-- 1 kojima users 178M 7月 31日 2015年 setup_th15_001b.exe
-rw-r--r-- 1 kojima users 178M 5月 22日 14:17 setup_th15_001b.zip
取り出したexeファイルを引数にWINEを実行すると、Windows上で実行した場合と同様にセットアップウィンドウが開き、各種設定を"OK"していくとインストールが完了して、Linuxのデスクトップ上にアイコンが用意されます。
$ wine setup_th15_001b.exe
図2 WINEでWindows用のゲームをインストール
用意されたアイコンをダブルクリックするとゲームの画面が開き、音楽や効果音も含めてゲームが正常に動作します。
図3 WINEの実行例
このようにWINEは、Windows用のソフトウェアをWINEの提供する仮想的なWindows環境にインストールして、そのソフトウェアにはWindows環境で動いていると思いこませる一方、Linux側にはユーザ領域で動く1つのコマンドとして振舞い、WindowsとLinuxの橋渡しをするように働きます。
WINEの提供する仮想Windows環境
それではWINEはどのように仮想的なWindows環境を作っているのか、少しその内部構造を紹介してみましょう。
WINEは、起動したユーザのホームディレクトリに".wine "というディレクトリを作り、その下に各種ディレクトリや設定ファイルを用意します。
$ ls ~/.wine
dosdevices/ drive_c/ system.reg user.reg userdef.reg winetricks.log
古くからのPCユーザには見当が付くように、このdrive_c というディレクトリ以下に仮想的なWindows環境が用意されます。
$ ls ~/.wine/drive_c/
Program Files/ Program Files (x86)/ ProgramData/ users/ windows/
$ ls ~/.wine/drive_c/windows/
Fonts/ globalization/ mono/ system.ini twain.dll winhelp.exe*
Installer/ help/ notepad.exe* system32/ twain_32/ winhlp32.exe*
Microsoft.NET/ hh.exe* regedit.exe* syswow64/ twain_32.dll winsxs/
command/ inf/ rundll.exe* tasks/ twain_64/
explorer.exe* logs/ system/ temp/ win.ini
今回インストールした「東方紺珠伝」は、"~/.wine/drive_c/Program Files (x86)/"以下にインストールされていました。
$ ls ~/.wine/drive_c/Program\ Files\ \(x86\)/
Common Files/ Internet Explorer/ Windows Media Player/ Windows NT/ 上海アリス幻樂団/
$ ls ~/.wine/drive_c/Program\ Files\ \(x86\)/上海アリス幻樂団/東方紺珠伝体験版/
custom.exe* readme.txt th15tr.dat unins000.dat
omake.txt th15.exe* thbgm_tr.dat unins000.exe*
デスクトップ上に作成された「東方紺珠伝」のアイコンを調べると、確かにこのディレクトリにある"th15.exe"を起動する設定になっています。
$ cat ~/Desktop/東方紺珠伝\ 体験版.desktop
[Desktop Entry]
Name=東方紺珠伝 体験版
Exec=env WINEPREFIX="/home/kojima/.wine" wine C:\\\\Program\\ Files\\ \\(x86\\)\\\\上海アリス幻樂団\\\\東方紺珠伝体験版\\\\th15.exe
Type=Application
StartupNotify=true
Path=/home/kojima/.wine/dosdevices/c:/Program Files (x86)/上海アリス幻樂団/東方紺珠伝体験版
Icon=6C74_th15.0
StartupWMClass=th15.exe
コードを確認したわけではないものの、このデスクトップアイコンは、「 東方紺珠伝」のインストーラが作成するWindows用のショートカット(*.lnk)をLinuxのデスクトップ環境用に変換したもののようです。
$ file ~/Desktop/東方紺珠伝\ 体験版.lnk
/home/kojima/Desktop/東方紺珠伝 体験版.lnk: MS Windows shortcut, Item id list present,
Points to a file or directory, Has Working directory, Has command line arguments,
ctime=Sun Dec 31 14:41:01 1600, mtime=Sun Dec 31 14:41:01 1600,
atime=Sun Dec 31 14:41:01 1600, length=0, window=hide
先に見たデスクトップアイコンが示すように、WINEの仮想Windows内(~/.wine/以下)にインストールされたソフトウェアは、そのソフトウェアへのフルパスを直接指定して起動することも可能です。
$ wine ~/.wine/drive_c/Program\ Files\ \(x86\)/上海アリス幻樂団/東方紺珠伝体験版/th15.exe
一方、インストールしたソフトウェアを削除したい場合、インストール先のディレクトリにあるアンインストーラ("unins000.exe")をWINE経由で実行してもいいものの、"control"を引数にWINEを起動すると、昔懐しい(Windows 3.1くらいの)コントロールパネルが開き、そこにある「プログラムの追加と削除」から指定したソフトウェアを削除することができます。
図4 WINEの提供するコントロールパネル
さて、WINEの興味深い機能のひとつに「複数の仮想Windows環境を併存させる」というものがあります。先に紹介したように、デフォルトでは~/.wine/というディレクトリを使うものの、このディレクトリはWINEPREFIX という環境変数で変更可能です。加えて、WINEARCH という環境変数で64ビット環境と32ビット環境を切り替えることもできます。
たとえば~/Wine32/以下に、32ビット版のみのWINE環境を作りたい場合は、以下のようなコマンドを実行します。
$ export WINEPREFIX=~/Wine32
$ export WINEARCH=win32
$ winecfg
図5 WINEPREFIXを指定したWINE環境の構築
このようにして作った~/Wine32/には、先に見た~/.wine/と異なり、32ビット用の環境しか用意されません。
$ ls ~/Wine32
dosdevices/ drive_c/ system.reg user.reg userdef.reg wrapper.cfg
$ ls ~/Wine32/drive_c
Program Files/ ProgramData/ users/ windows/
$ ls ~/Wine32/drive_c/windows
Fonts/ globalization/ mono/ system.ini twain_32/
Installer/ help/ notepad.exe* system32/ twain_32.dll
Microsoft.NET/ hh.exe* regedit.exe* tasks/ winhelp.exe*
command/ inf/ rundll.exe* temp/ winhlp32.exe*
explorer.exe* logs/ system/ twain.dll winsxs/
このようにWINEでは、WINEPREFIX環境変数で複数の仮想Windows環境を切り替え、ソフトウェアごとに異なるフォントやDLLを利用できるようになっています。この機能を使えば、特定のDLLを必要として他と相性が悪いソフトウェア用に、カスタマイズした専用環境を用意することができます。
WINE on Plamoの現状と課題
最後にPlamo Linux上で動かすWINEの現状と課題について触れておきます。
Windows用のソフトウェア(主にゲーム :-)をあれこれ試してみたところ、今回紹介した東方プロジェクトの体験版やマージャンゲーム(たとえば「3D麻雀悠々 」 ) 、カードゲーム(たとえば「123 Free Solitare 」 )など、少し古めの小規模なゲームはたいてい動くものの、大規模な3Dオンラインゲーム(たとえば「World of Tanks 」 )などは動かないようです。
両者の違いを考えると、どうやら使っているDirectXの世代が違っていて、DirectX9くらいまでのゲームは動くものの、それ以降を使っているものはダメなようです。過去の記事 でも触れたように、WINEではDirectX9まではOpenGLを使って実行するのに対し、DirectX10以降になるとVulkanと呼ばれる新しいAPIを使って実行するそうなので、Plamo LinuxのVulkan対応が不完全なのかも? と考えています。
もっとも、Vulkan回りは現在も開発が進行中で、数週間ごとに新しいバージョンがリリースされている上、WINEの側も似たようなペースでバージョンアップしているので、もう少し両者の開発が落ちついてから取り組んでもいいかな、とも思っています。
一方、WINEの作る仮想Windows環境の問題も考えられます。というのも、WindowsのソフトウェアはさまざまなDLL(ランタイム)を必要とし、必ずしもそれらの全てがWINEによって用意されているわけではないからです。VisualBasicやVC++など、広く使われているランタイムはパッケージとして配布されているものの、バージョンが複数あったりして何を入れればいいのか調べるのはかなり厄介ですし、ソフトウェアによっては特定のフォントが必須な場合もあるようです。
また、Plamo Linux側に必要なパッケージが不足している可能性もあります。過去 にも触れたように、Plamo Linuxでは必ずしもWINEが要求する全てのライブラリを用意できたわけではなく、WINEの一部の機能を制限する形になっています。
それら制限される機能の中でも、libkrb5が対応するKerberos V認証回りは、Windowsでも標準的にサポートされるネットワーク認証機能なこともあり、対応しないとマズいかも…、と思っています。
Plamo Linuxでは、MIT Kerberos Vがフリーになる以前から、OSSなKerberosプロトコル実装であるHeimdalを採用しており、Heimdal由来のlibkrb5.soは存在するものの、WINEのconfigureからは認識されないようです。
少し視点を変えると、WINE Projectの最大サポーターでもあるCodeWeavers社 が販売しているCrossOver Linux という商用ソフトウェアもあります。"CrossOver Linux"はWINEのソースコードを元に、設定ツールやパッチ、商用サポートなどを追加したソフトウェアで、「 常に開発中」のWINEを一般ユーザにも使い易くしています。CodeWeaver社は、開発したパッチをWINE Projectに提供する等、WINEの開発にも積極的に関わっているそうです。
また、Steam と言うゲーム配信環境を提供しているValve社も、WINEを元にしたProton というソフトウェアを開発 し、SteamのLinuxクライアント環境でWindows用ゲームを直接実行できるようにしています。
このあたりを試せば何かヒントが見えるかも…、と思ってはいるものの、そもそも体験版すらコンプリートできないヘボゲーマーな筆者には、そこまでしてWINEを極める気力が出ないというのが正直なところです(苦笑) 。