続・玩式草子 ―戯れせんとや生まれけん―

第20回Days of WINE and Struggles[7]

長く引っぱったWINEがらみの話題も今回で一段落となります。このシリーズを書き始めて約8ヵ月、WINEに手を出してからちょうど1年くらいかかった計算です。最終回の今回はWINEの簡単な使い方やPlamo LinuxでのWINEサポートの現状等を紹介します。

WINEの使い方

WINEの使い方自体は簡単で、引数として実行したいWindowsアプリ(exeファイル)を指定するだけです。

一例として、同人ゲームとして有名な「東方プロジェクト」の体験版を取りあげてみましょう。⁠東方プロジェクト」とは、いわゆる「弾幕シューティング」タイプのゲームで、画面を華麗に埋めつくす弾幕をかわしつつ、敵のボスキャラを撃破していくゲームです。

「東方プロジェクト」のゲームは、正式版はコミケ等で販売される商用ソフトなものの、最初の数ステージを試せる体験版がインターネット上に無料公開されているのでWINEのテストには便利です。今回はそれらの中から「東方紺珠伝~Legacy of Lunatic Kingdom」を試してみることにします。

図1 東方プロジェクトのページ
図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用のゲームをインストール
図2 WINEでWindows用のゲームをインストール 図2 WINEでWindows用のゲームをインストール

用意されたアイコンをダブルクリックするとゲームの画面が開き、音楽や効果音も含めてゲームが正常に動作します。

図3 WINEの実行例
図3 WINEの実行例 図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の提供するコントロールパネル
図4 WINEの提供するコントロールパネル

さて、WINEの興味深い機能のひとつに「複数の仮想Windows環境を併存させる」というものがあります。先に紹介したように、デフォルトでは~/.wine/というディレクトリを使うものの、このディレクトリはWINEPREFIXという環境変数で変更可能です。加えて、WINEARCHという環境変数で64ビット環境と32ビット環境を切り替えることもできます。

たとえば~/Wine32/以下に、32ビット版のみのWINE環境を作りたい場合は、以下のようなコマンドを実行します。

$ export WINEPREFIX=~/Wine32
$ export WINEARCH=win32
$ winecfg
図5 WINEPREFIXを指定したWINE環境の構築
図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でも標準的にサポートされるネットワーク認証機能なこともあり、対応しないとマズいかも…、と思っています。

少し視点を変えると、WINE Projectの最大サポーターでもあるCodeWeavers社が販売しているCrossOver Linuxという商用ソフトウェアもあります。"CrossOver Linux"はWINEのソースコードを元に、設定ツールやパッチ、商用サポートなどを追加したソフトウェアで、⁠常に開発中」のWINEを一般ユーザにも使い易くしています。CodeWeaver社は、開発したパッチをWINE Projectに提供する等、WINEの開発にも積極的に関わっているそうです。

また、Steamと言うゲーム配信環境を提供しているValve社も、WINEを元にしたProtonというソフトウェアを開発し、SteamのLinuxクライアント環境でWindows用ゲームを直接実行できるようにしています。

このあたりを試せば何かヒントが見えるかも…、と思ってはいるものの、そもそも体験版すらコンプリートできないヘボゲーマーな筆者には、そこまでしてWINEを極める気力が出ないというのが正直なところです(苦笑⁠⁠。

おすすめ記事

記事・ニュース一覧