Proton是一款與 Steam 用戶端配合使用的工具,它允許 Windows 獨有的遊戲在 Linux 作業系統上運行。它使用 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
如果您的建置系統缺少依賴項,它將很快失敗並出現明確的錯誤訊息。
建置完成後,您可能需要重新啟動 Steam 用戶端才能看到新的 Proton 工具。 Steam 用戶端中的工具名稱將基於目前簽出的 Proton 分支。您可以使用build_name
變數覆寫此名稱。
有關其他建置目標和選項,請參閱make help
。
mkdir ../build && cd ../build
../proton/configure.sh --enable-ccache --build-name=my_build
執行configure.sh
將建立一個Makefile
,讓您可以建置Proton。這些腳本檢查容器是否正常執行,並提示您是否缺少任何主機端相依性。您應該從專門為您的建置創建的目錄運行該命令。
設定腳本嘗試發現要使用的工作 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
開關傳遞給configure,以使容器引擎重新標記其綁定安裝並允許從容器內存取這些檔案。與系統目錄一起使用時這可能很危險。請謹慎操作並參閱容器引擎手冊。
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 位元版本。這允許在一個模組上進行快速迭代。這個目標只有在建構 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 Play 頁面中選擇。 Steam 還支援使用 Proton 本地版本運行遊戲,您可以將其安裝在您的電腦上。
要將 Proton 的本機版本安裝到 Steam 中,請使用您選擇的工具名稱在~/.steam/root/compatibilitytools.d/
中建立一個新目錄,並將包含可再發行版本的目錄放置在該路徑下。
make install
目標將為您執行此任務,將 Proton 版本安裝到目前使用者的 Steam 資料夾中。您必須重新啟動 Steam 用戶端才能使用新工具。
正確的本機工具安裝應類似於以下:
compatibilitytools.d/my_proton/
├── compatibilitytool.vdf
├── filelock.py
├── LICENSE
├── proton
├── proton_dist.tar
├── toolmanifest.vdf
├── user_settings.sample.py
└── version
要在 Steam 中啟用本地構建,請轉到“設定”視窗的“Steam Play”部分。如果建置正確安裝,您應該在相容性工具的下拉清單中看到「proton-localbuild」。
該軟體的每個組件均根據其許可條款使用。有關詳細信息,請參閱此處的LICENSE
文件,以及每個子模組和目錄中的LICENSE
、 COPYING
等文件。如果您將 Proton 的建置版本分發給其他用戶,您必須遵守這些授權的條款。
預設情況下,Proton 版本的符號會被刪除。您可以切換到Steam 中的“調試”beta 分支(在庫中搜尋Proton,屬性... -> BETAS -> 選擇“調試”)或在不剝離的情況下進行構建(請參閱“調試構建”部分)。
這些符號是透過隨附的.debug
檔案提供的,這些檔案可能需要由偵錯工具明確載入。對於 GDB,有一個幫助程式腳本wine/tools/gdbinit.py
(來源),它提供了load-symbol-files
(或簡稱lsf
)命令,該命令載入所有映射檔案的符號。
有關調試的提示,請參閱 docs/DEBUGGING.md。
compile_commands.json
與 clangd LSP 伺服器和類似工具一起使用。
使用 cmake 或介子(例如 vkd3d-proton)建構的項目自動附帶compile_commands.json
。對於自動工具(例如wine),您必須使用--enable-bear
配置構建,以使用bear 來建立編譯資料庫。預設情況下它不會打開,因為它會使建置速度稍微慢一些。
建置系統將所有建立的compile_commands.json檔案收集在名為compile_commands/
建置子目錄中。
路徑被轉換為指向真實來源(即不是 rsynced 副本)。它仍然可能依賴諸如自動生成的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%
。例如,輸入「 PROTON_USE_WINED3D=1 %command%
」以使用基於 OpenGL 的 wined3d 渲染器,而不是基於 Vulkan 的 DXVK 渲染器。
若要啟用選項,請將變數設為非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,使用基於 OpenGL 的 wined3d 而不是基於 Vulkan 的 DXVK。 |
nod3d11 | PROTON_NO_D3D11 | 停用d3d11.dll ,對於 d3d11 遊戲,可以回退到 d3d9 並運行得更好。 |
nod3d10 | PROTON_NO_D3D10 | 停用d3d10.dll 和dxgi.dll ,對於 d3d10 遊戲,它們可以回退到 d3d9 並運行得更好。 |
dxvkd3d8 | PROTON_DXVK_D3D8 | 使用 DXVK 的d3d8.dll 。 |
noesync | PROTON_NO_ESYNC | 不要使用基於 eventfd 的進程內同步原語。 |
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 | 使用遊戲附帶的 Vulkan 載入器,而不是 Proton 的內建 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 ,則啟用獲勝。 | |
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 | 啟用 hack 來解決某些遊戲中由於 IMFDXGIDeviceManager 支援不完整而導致的視訊問題。 |
noopwr | WINE_DISABLE_VULKAN_OPWR | 啟用 hack 來停用 Vulkan 其他進程視窗渲染,這有時會導致 Wayland 出現問題,因為 blit 落後一幀。 |
hidenvgpu | PROTON_HIDE_NVIDIA_GPU | 強制 Nvidia GPU 始終報告為 AMD GPU。如果某些遊戲依賴僅限 Windows 的 Nvidia 驅動程式功能,則需要這樣做。另請參閱 DXVK 的 nvapiHack 配置,該配置僅會影響來自 Direct3D 的報告。 |
WINE_FULLSCREEN_INTEGER_SCALING | 啟用整數縮放模式,在放大時提供清晰的像素。 | |
cmdlineappend: | 將冒號後面的字串作為參數附加到遊戲指令中。可以指定多次。用反斜線轉義逗號和反斜線。 | |
xalia | PROTON_USE_XALIA | 啟用 Xalia,這是一個可以為某些鍵盤/滑鼠介面添加遊戲手把 UI 的程式。 |
seccomp | PROTON_USE_SECCOMP | 注意:在 Proton 5.13 中已廢棄。在舊版本中,啟用 seccomp-bpf 過濾器來模擬本機系統調用,這是某些 DRM 保護發揮作用所必需的。 |
d9vk | PROTON_USE_D9VK | 注意:在 Proton 5.0 中已廢棄。在舊版本中,對於 d3d9,使用基於 Vulkan 的 DXVK 而不是基於 OpenGL 的 wined3d。 |