Protonは、Windows 専用のゲームを Linux オペレーティング システムで実行できるようにする Steam クライアントで使用するツールです。これを容易にするために Wine を使用します。
ほとんどのユーザーは、Steam クライアント自体が提供する Proton を使用する必要があります。詳細については、この Steam コミュニティの投稿を参照してください。
ソース コードは、上級ユーザーが Proton を変更できるようにするために提供されています。たとえば、特定のタイトルで別のバージョンの Wine を使用したいユーザーもいるかもしれません。
変更ログはWiki から入手できます。
https://github.com/ValveSoftware/Proton を複製し、必要なブランチをチェックアウトして、Proton のソースを取得します。
次のコマンドを使用して、最新の Proton のクローンをシステムに作成できます。
git clone --recurse-submodules https://github.com/ValveSoftware/Proton.git proton
ブランチ間を切り替えるときは、必ずサブモジュールを更新してください。
git checkout experimental_6.3
git submodule update --init --recursive
サブコンポーネントを変更したい場合は、今すぐ変更してください。たとえば、Wine に変更を加えたい場合は、変更をwine/
ディレクトリに適用します。
Proton の大部分は Proton SDK コンテナ内でビルドされ、ホスト側での依存関係はほとんどありません。
Docker または Podman のセットアップが必要です。ルートレス Podman セットアップを強くお勧めします。セットアップ手順については、ディストリビューションのドキュメントを参照してください (Arch Podman / Docker、Debian Podman / Docker など)。
ほとんどのビルド コマンドを実行するトップレベルの Makefile が提供されています。
リポジトリをチェックアウトしてそのサブモジュールを更新した後、動作する Docker または Podman セットアップがあると仮定して、次の簡単な手順で Proton をビルドしてインストールできます。
make install
ビルド システムに依存関係が欠落している場合、ビルド システムはすぐに失敗し、明確なエラー メッセージが表示されます。
ビルドが完了したら、新しい Proton ツールを表示するために Steam クライアントを再起動する必要がある場合があります。 Steam クライアントでのツールの名前は、現在チェックアウトされている Proton のブランチに基づきます。 build_name
変数を使用してこの名前をオーバーライドできます。
他のビルド ターゲットとオプションについてはmake help
参照してください。
mkdir ../build && cd ../build
../proton/configure.sh --enable-ccache --build-name=my_build
configure.sh
実行すると、Proton をビルドできるMakefile
が作成されます。スクリプトはコンテナが機能しているかどうかをチェックし、ホスト側の依存関係が不足している場合はプロンプトを表示します。コマンドは、ビルド専用に作成されたディレクトリから実行する必要があります。
構成スクリプトは、使用する動作中の Docker または Podman セットアップを検出しようとしますが、 --container-engine=<executable_name>
を使用して互換性のあるエンジンを強制的に使用することができます。
--enable-cache
フラグを使用して ccache を有効にできます。これにより、 $CCACHE_DIR
または$HOME/.ccache
がコンテナ内にマウントされます。
--proton-sdk-image=registry.gitlab.steamos.cloud/proton/soldier/sdk:<version>
使用して、Proton SDK イメージのカスタム バージョンを使用してビルドできます。
他の構成オプションについては--help
を確認してください。
注: SELinuxが使用されている場合、Proton ビルド コンテナーはユーザーのファイルにアクセスできない可能性があります。これは、SELinux のファイルシステム ラベルが原因で発生します。 --relabel-volumes
スイッチを渡すと、コンテナ エンジンがバインド マウントのラベルを変更し、コンテナ内からそれらのファイルにアクセスできるように構成できます。これをシステム ディレクトリで使用すると危険になる可能性があります。慎重に作業を進め、コンテナ エンジンのマニュアルを参照してください。
make
重要なメイクターゲット:
make install
- Proton をユーザーの Steam ディレクトリにインストールします。詳細については、Proton をローカルにインストールするセクションを参照してください。
make redist
- ~/.steam/root/compatibilitytools.d/
にコピーできる再配布ビルド ( redist/
) を作成します。
make deploy
- デプロイメントビルドを作成します ( deploy/
)。これは、Steamworks 経由で Steam ユーザーに Proton をデプロイするために使用されるものです。
make module=<module> module
- 指定された wine モジュールの 32 ビット バージョンと 64 ビット バージョンの両方をビルドします。これにより、1 つのモジュールで迅速な反復が可能になります。このターゲットは、Proton を構築した後にのみ役立ちます。
make dxvk
/ make vkd3d-proton
- DXVK / vkd3d-proton を再構築します。
シンボルの除去を防ぐには、 UNSTRIPPED_BUILD=1
make
呼び出しに追加します。これは、クリーンなビルド ディレクトリでのみ使用してください。
例えば:
mkdir ../debug-proton-build && cd ../debug-proton-build
../proton/configure.sh --enable-ccache --build-name=debug_build
make UNSTRIPPED_BUILD=1 install
Steam には複数のバージョンの Proton が同梱されており、ゲームはデフォルトで使用するか、Steam 設定の Steam プレイ ページで選択できます。 Steam は、マシンにインストールできる Proton のローカル ビルドを使用したゲームの実行もサポートしています。
Proton のローカル ビルドを Steam にインストールするには、選択したツール名で~/.steam/root/compatibilitytools.d/
に新しいディレクトリを作成し、そのパスの下に再頒布可能ビルドを含むディレクトリを配置します。
make install
target はこのタスクを実行し、現在のユーザーの Steam フォルダーに Proton ビルドをインストールします。新しいツールを選択するには、Steam クライアントを再起動する必要があります。
ローカル ツールを正しくインストールすると、次のようになります。
compatibilitytools.d/my_proton/
├── compatibilitytool.vdf
├── filelock.py
├── LICENSE
├── proton
├── proton_dist.tar
├── toolmanifest.vdf
├── user_settings.sample.py
└── version
Steam でローカル ビルドを有効にするには、[設定] ウィンドウの [Steam プレイ] セクションに移動します。ビルドが正しくインストールされている場合は、互換性ツールのドロップダウン リストに「proton-localbuild」が表示されるはずです。
このソフトウェアの各コンポーネントは、ライセンス条項に従って使用されます。詳細については、ここのLICENSE
ファイルと、各サブモジュールおよびディレクトリ内のLICENSE
、 COPYING
などのファイルを参照してください。 Proton のビルドされたバージョンを他のユーザーに配布する場合は、これらのライセンスの条項に従う必要があります。
Proton ビルドでは、デフォルトでシンボルが削除されています。 Steam で「デバッグ」ベータ ブランチに切り替えることもできます (ライブラリで Proton を検索、プロパティ... -> ベータ -> 「デバッグ」を選択) か、ストリップせずにビルドすることができます (「デバッグ ビルド」セクションを参照)。
シンボルは、付属の.debug
ファイルを通じて提供されます。これらのファイルは、デバッグ ツールによって明示的にロードする必要がある場合があります。 GDB にはヘルパー スクリプトwine/tools/gdbinit.py
(source it) があり、マップされたすべてのファイルのシンボルをロードするload-symbol-files
(略してlsf
) コマンドを提供します。
デバッグのヒントについては、docs/DEBUGGING.md を参照してください。
compile_commands.json
Clangd LSP サーバーおよび同様のツールで使用します。
cmake または meson (例: vkd3d-proton) を使用してビルドされたプロジェクトには、自動的にcompile_commands.json
が付属します。オートツール (wine など) の場合は、bear を使用してコンパイル データベースを作成する--enable-bear
を使用してビルドを構成する必要があります。ビルドが若干遅くなるため、デフォルトではオンになっていません。
ビルド システムは、作成されたすべての apply_commands.json ファイルを、 compile_commands/
という名前のビルド サブディレクトリに収集します。
パスは実際のソース (つまり、rsync コピーではない) を指すように変換されます。ただし、自動生成されるconfig.h
などはビルド ディレクトリに依存する可能性がありますが、wine の場合は、変更がコミットされないため、ソース ディレクトリでtools/make_requests
実行すると有益な場合があります。
その後、いくつかの方法でそのファイルを Clangd に使用するようにエディターを構成できます。
compile_commands.json
へのパスを指定できます。.clangd
ファイル経由、例: cd src/proton/wine/
cat > .clangd << EOF
CompileFlags:
CompilationDatabase: ../build/current-dev/compile_commands/wine64/
EOF
ln -s ../build/current-dev/compile_commands/wine64/compile_commands.json .
Proton は、特定のゲームの実行を支援するために実行時に調整できます。 Steam クライアントは、 STEAM_COMPAT_CONFIG
変数を使用して、既知のゲームのいくつかのオプションを設定します。これらのオプションは、以下で説明する環境変数を使用してオーバーライドできます。
すべてのゲームに対してこれらの環境オーバーライドを設定する最良の方法は、 user_settings.sample.py
名前をuser_settings.py
に変更し、適切に変更することです。このファイルは、Steam ライブラリの Proton インストール ディレクトリ (通常は~/.steam/steam/steamapps/common/Proton #.#
) にあります。
特定のゲームのランタイム構成を変更する場合は、Steam クライアントのゲームのProperties
ダイアログにあるSet Launch Options
設定を使用できます。変数を設定し、その後に%command%
を入力します。たとえば、Vulkan ベースの DXVK レンダラーの代わりに OpenGL ベースの wined3d レンダラーを使用するには、「 PROTON_USE_WINED3D=1 %command%
」と入力します。
オプションを有効にするには、変数を0
以外の値に設定します。オプションを無効にするには、変数を0
に設定します。 Steam のデフォルト設定を使用するには、変数をまったく指定しないでください。
以下はすべて実行時オプションです。これらは Wine プレフィックスへの永続的な変更には影響しません。オプションを削除すると、以前の動作に戻ります。
互換構成文字列 | 環境変数 | 説明 |
---|---|---|
PROTON_LOG | 有用なデバッグ ログを$PROTON_LOG_DIR/steam-$APPID.log にダンプするための便利なメソッド。デフォルトのロギングを有効にするには1 に設定するか、デフォルトのWINEDEBUG チャネルに追加される文字列に設定します。 | |
PROTON_LOG_DIR | 指定したディレクトリにログ ファイルを出力します。デフォルトはホームディレクトリです。 | |
PROTON_WAIT_ATTACH | ゲームプロセスを起動する前に、デバッガーが steam.exe にアタッチされるのを待ちます。起動時にゲーム プロセスにアタッチするには、子プロセスをフォローするようにデバッガーを設定する必要があります。 | |
PROTON_CRASH_REPORT_DIR | クラッシュ ログをこのディレクトリに書き込みます。古いログはクリーンアップされないため、最終的にディスク容量をすべて消費する可能性があります。 | |
wined3d | PROTON_USE_WINED3D | d3d11、d3d10、および d3d9 には、Vulkan ベースの DXVK の代わりに OpenGL ベースの wined3d を使用します。 |
nod3d11 | PROTON_NO_D3D11 | d3d9 にフォールバックしてより適切に実行できる d3d11 ゲームの場合は、 d3d11.dll 無効にします。 |
nod3d10 | PROTON_NO_D3D10 | d3d9 にフォールバックしてより適切に実行できる d3d10 ゲームの場合は、 d3d10.dll とdxgi.dll 無効にします。 |
dxvkd3d8 | PROTON_DXVK_D3D8 | DXVK のd3d8.dll を使用します。 |
noesync | PROTON_NO_ESYNC | eventsfd ベースのインプロセス同期プリミティブは使用しないでください。 |
nofsync | PROTON_NO_FSYNC | futex ベースのインプロセス同期プリミティブは使用しないでください。 ( FUTEX_WAIT_MULTIPLE サポートのないシステムでは自動的に無効になります。) |
noxim | PROTON_NO_XIM | デフォルトで有効になっています。 XIM (X 入力メソッド) サポートを使用しないでください。 XIM サポートは、バージョン 1.7 より古い libx11 でクラッシュを引き起こすことが知られています。 |
disablenvapi | PROTON_DISABLE_NVAPI | NVIDIA の NVAPI GPU サポート ライブラリを無効にします。 |
nativevulkanloader | Proton の組み込み Vulkan ローダーの代わりに、ゲームに同梱されている Vulkan ローダーを使用します。これにより VR サポートが無効になりますが、いくつかのゲームで必要になります。 | |
forcelgadd | PROTON_FORCE_LARGE_ADDRESS_AWARE | Wine ですべての実行可能ファイルに対して LARGE_ADDRESS_AWARE フラグを強制的に有効にします。デフォルトで有効になっています。 |
heapdelayfree | PROTON_HEAP_DELAY_FREE | アプリケーションの解放後の使用に関するバグを回避するために、一部のメモリの解放を遅らせます。 |
gamedrive | PROTON_SET_GAME_DRIVE | ゲームを含む Steam ライブラリを指す S: ドライブを作成します。 |
noforcelgadd | Forcelgadd を無効にします。 this とforcelgadd 両方が設定されている場合は、enabled が優先されます。 | |
oldglstr | PROTON_OLD_GL_STRING | 非常に長い拡張文字列でクラッシュする古いゲームのために、GL 拡張文字列の長さを制限するためにいくつかのドライバー オーバーライドを設定します。 |
vkd3dfl12 | ドライバーのサポートに関係なく、Direct3D 12 の機能レベルを強制的に 12 にします。 | |
vkd3dbindlesstb | force_bindless_texel_buffer をVKD3D_CONFIG に配置します。 | |
nomfdxgiman | WINE_DO_NOT_CREATE_DXGI_DEVICE_MANAGER | IMFDXGIDeviceManager のサポートが不完全であることによる一部のゲームでのビデオの問題を回避するには、ハックを有効にします。 |
noopwr | WINE_DISABLE_VULKAN_OPWR | Vulkan の他のプロセス ウィンドウ レンダリングを無効にするハックを有効にすると、ブリットが 1 フレーム遅れているために Wayland で問題が発生することがあります。 |
hidenvgpu | PROTON_HIDE_NVIDIA_GPU | Nvidia GPU を常に AMD GPU として報告するように強制します。一部のゲームが Windows のみの Nvidia ドライバー機能に依存している場合、これが必要になります。 Direct3D からのレポートにのみ影響する DXVK の nvapiHack 構成も参照してください。 |
WINE_FULLSCREEN_INTEGER_SCALING | 整数スケーリング モードを有効にして、アップスケーリング時にピクセルをシャープにします。 | |
cmdlineappend: | コロンの後に文字列を引数としてゲーム コマンドに追加します。複数回指定できます。コンマとバックスラッシュはバックスラッシュでエスケープします。 | |
xalia | PROTON_USE_XALIA | 一部のキーボード/マウス インターフェイスにゲームパッド UI を追加できるプログラムである Xalia を有効にします。 |
seccomp | PROTON_USE_SECCOMP | 注: Proton 5.13 で廃止されました。古いバージョンでは、一部の DRM 保護が機能するために必要なネイティブ システムコールをエミュレートするために seccomp-bpf フィルターを有効にします。 |
d9vk | PROTON_USE_D9VK | 注: Proton 5.0 では廃止されました。古いバージョンでは、d3d9 には OpenGL ベースの wined3d の代わりに Vulkan ベースの DXVK を使用します。 |