Wineをベースとして、Windows用のゲームを動かすことに特化させる追加のパッチやLinux版Steamとの統合などを組み込んだ派生版Wineで、SteamのValve社と商用WineのCodeWeavers社が協力して開発している。
Direct3Dの9から11は標準でVulkanによる実装のDXVKを使用するが、Steamのゲームごとの “起動オプション” にPROTON_USE_WINED3D=1 %command%
を入力して起動するなどして環境変数PROTON_USE_WINED3D
を1
にして実行することでWineのDirect3D実装を使用することもできる。12はWineと同様にVulkanで実装されたvkd3dを用いる。
DXVKがDirect3Dの9から11までのAPIをVulkanで実装している関係で、ある程度古めのゲームのプレイであってもVulkanに対応した世代のGPUの使用を強く推奨する。
Protonの5.13以上のバージョンでは、Linux版Steamは “Steam Linux Runtime (Soldier)” と呼ばれる独自のGNU/Linux環境のコンテナを用いてその中でProtonを実行する。このとき、一部の共有されるディレクトリを除いてLinux OS上のプログラムやデータのファイルにはアクセスできず、ゲームは隔離された環境(サンドボックス内)で動くことになる。
ProtonはSteamで公開されていないゲームに対して使うこともできるが、特定の環境変数が必須だったり、使い方が独自なところがある。
Protonにはバージョンの系統があり、バージョンの値自体はベースとなるWineのバージョンに基づいて付けられる。
例として、2020-2022年においては
のようにバージョン系統が分かれており、それぞれが独立したSteam AppId(ゲームやツールを識別するための固有の番号)を持ち、アップデートによって強制的に新しいバージョン系統に移行させられることはない。ただし最新ではなくなった系統はしばらくして更新が止まる。
各バージョン系統はProtonにおけるメジャーリリース番号のようにとらえることもできる。
ソースはGitHubのリポジトリにあり、バイナリは
のいずれかにより入手する。
バイナリのインストール先は[Steamライブラリ]/steamapps/common/Proton [バージョン]/
となる。一旦インストールすると、Steam上のゲームと同様にアップデートが利用可能なときに更新されるようになる。
初期状態のSteamライブラリは、Steamのインストール先のディレクトリとなる。これは
XDG_DATA_HOME
が定義されているかどうかで決まる:
$XDG_DATA_HOME/Steam/
[ホームディレクトリ]/.local/share/Steam/
[ホームディレクトリ]/.steam/debian-installation/
[ホームディレクトリ]/.steam/
Proton 7.0(AppIdは1887720
)をコマンドでインストールする例。
6.3系までのProtonは匿名ログインでもダウンロードできたが、7.0からは “ERROR! Failed to install app ‘1887720’ (No subscription)” というエラーが表示されて失敗するようになってしまい、Steamアカウントがインストールに必要となった。
インストールにSteamアカウントが必要なのは公式版のProtonのみで、後述の派生版Protonは制約なく入手できる。
+force_install_dir
の後ろにはインストール先のディレクトリを指定し、+login
以降はそれらの後ろに続ける。
$ wget https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz
$ tar zxf steamcmd_linux.tar.gz
$ ./steamcmd.sh +force_install_dir ~/proton_7_0 +login [your_steam_account] +app_update 1887720 validate +quit
最後のsteamcmd.sh
を再度実行すると、同一バージョン系統内のアップデートがある場合に適用される。AppIdはProtonのバージョン系統ごとに変わるので、新しい系統がリリースされたらそのAppIdを調べ、それに対してsteamcmd.sh
を実行する。
Steamクライアントからどのバージョン系統のProtonを使用するかは、ゲームごとの “互換性” の設定でインストール済みの一覧から指定できる。
Steamクライアントからは全てのゲームで同一バージョンを使用するように設定することもできるが、ゲーム単位で個別に設定したほうが不具合が出たときに柔軟に対応できる。
SteamのWindows用ゲームに対してはSteamクライアントのゲームの “プレイ” ボタンなどからゲームを開始するだけでよい。初回実行時はゲームによっては必要なランタイムパッケージのインストールが自動で行われ、少し余計に時間がかかる。これはProtonのバージョン系統を切り替えた際にも行われることがある。
DXVK上のDirect3Dを含め、Vulkanを使用しているゲームを開始する際にはVulkanシェーダの処理が発生する場合があり、それなりの時間を要するが、これはゲーム中のフレームレートの安定に役立っているらしい。
コマンドを用いて手動でゲームを動かすには、中のproton
コマンドを用いてプログラムを実行するか、Wineと同様に内のwine
コマンドを指定して実行する。ここでは前者についてを扱う。
実行には最低限STEAM_COMPAT_DATA_PATH
という環境変数が必要で、これはWineの環境変数WINEPREFIX
で指定される仮想Windows環境を拡張したProton用の環境の場所を指定する。新しく作るにはこの場所を空のディレクトリにしてプログラムを実行する。
Protonによって作成される環境は[Steamライブラリ]/steamapps/compatdata/[ゲームのAppId]/
に保存される。既存の環境を指定するにはこの場所を指定する。
STEAM_COMPAT_DATA_PATH
を指定して作られたProton用の環境にはpfx
という名前のディレクトリがあり、wine
コマンドを使用する場合はこのディレクトリの場所を指定して使用することができる。
標準的な書式はrun
の後ろに実行ファイルの場所とその引数(任意)となる。
$ mkdir -p /path/to/proton_prefix
$ STEAM_COMPAT_DATA_PATH=/path/to/proton_prefix /path/to/Proton\ X.Y/proton run /path/to/program.exe
run
の代わりにwaitforexitandrun
を指定すると、既に動いているプログラムがある場合に終了を待機してから開始し、同時に1つのプログラムしか動かないようにできる。
Steam用のWindowsゲームを実行するにはSteamクライアントが動いている状態でSTEAM_COMPAT_CLIENT_INSTALL_PATH
(Steamのインストール先)とSteamAppId
/SteamGameId
(先述のAppIdの番号)といった環境変数を指定して実行する。
$ STEAM_COMPAT_DATA_PATH=/path/to/steam_library/steamapps/compatdata/[Steam AppId]/ STEAM_COMPAT_CLIENT_INSTALL_PATH=/path/to/steam/installation SteamAppId=[Steam AppId] SteamGameId=[Steam AppId] /path/to/Proton\ X.Y/proton run /path/to/program.exe
Steam Linux Runtimeは通常[Steamライブラリ]/steamapps/common/SteamLinuxRuntime_soldier/
にインストールされる。この中のrun
というコマンドが手動実行に便利で
run
の後ろ(最後のオプションの後ろには--
を付ける)に実行したいコマンド行を指定する--filesystem
オプションに指定したディレクトリを共有してコンテナ内からアクセス可能にできる(複数指定して複数のディレクトリを共有することも可)として用いる。
$ STEAM_COMPAT_DATA_PATH=/path/to/steam_library/steamapps/compatdata/[Steam AppId]/ STEAM_COMPAT_CLIENT_INSTALL_PATH=/path/to/steam/installation SteamAppId=[Steam AppId] SteamGameId=[Steam AppId] /path/to/SteamLinuxRuntime_soldier/run (--filesystem /path/to/dir1 --filesystem /path/to/dir2) -- /path/to/Proton\ X.Y/proton run /path/to/program.exe
/usr
の下など、一部の階層は共有できない。
--filesystem
オプションには共有したいファイルの絶対パスを指定することもでき、共有したいファイルを含んだディレクトリをこのオプションで指定した際に他の既存のソケットなどがその階層に存在するとエラーが発生する場合などに有用。
Protonをベースに、Wine Stagingのパッチの他に幾つかのゲーム用に外部から集めた追加のパッチ群(実験的なものも含む)を組み込んだ派生版Protonで、個人プロジェクト。
GitHubのリポジトリのページにはどのゲーム用の追加の修正があるかなどが具体的に示されており、ゲームのタイトル名(例:FFXV Steam)や特定の不具合(例:GTA V Keyboard input fix)などの形で一覧がある。ここに名前があるものはGE版Proton以外では動かない可能性が高い。
2021年時点では、Vulkanの子ウィンドウの処理を実装したパッチが適用されていることから、Wine上のVulkanアプリケーションやDXVK上のゲームなどがfixme:vulkan:X11DRV_vkCreateWin32SurfaceKHR Application requires child window rendering, which is not implemented yet!
によって動かない場合は試してみる価値がある。
他には、非同期シェーダコンパイルによりフレームレート急激低下を緩和する非同期対応版DXVK(Steamのゲームごとの “起動オプション” にDXVK_ASYNC=1 %command%
を入力して起動するなどして、環境変数DXVK_ASYNC
を1
にして実行すると有効になる)を標準搭載しているため、フレームレートが急低下するゲームがある場合に試してみる価値がある。
DXVK_ASYNC=1
指定は一部のオブジェクトの描画の遅れを招く原因になる他、マルチプレイヤーなゲームにおいての使用は推奨されない(マルチプレイヤーのゲーム用のアカウントがBAN処分を受ける原因になりうる)。
GitHubのリポジトリにあるリリース一覧から直接ダウンロードできる。
通常のProtonと同様にSteamクライアントから選択できるようにするには、Steamのインストール先の階層にあるcompatibilitytools.d
ディレクトリ(無ければ作成する)にGE-Proton[バージョン]-[GEのリリース]
(2022年2月のGE-Proton7-1
以降)やProton-[バージョン]-GE-[バージョン]
(2022年2月まで)のディレクトリがあるように配置する。
[(Steam installation)]-+-[compatibilitytools.d]-+-[GE-Proton7-12]
| +-[Proton-6.0-GE-1]
| |
| ...