protontricks是Winetricks命令的包裝器,用來支持proton環境下運行的遊戲(steam遊戲和非steam遊戲)。每個proton環境下運行的遊戲首次運行時都會創建一個以數字命名(gameID)的目錄,然後將這個目錄下的driver_c掛載到windows環境下的C盤,再運行exe程序。而protontricks的功能就是可以通過輸入gameID找到該遊戲對應的pronton環境(C盤目錄以及proton的版本),在該環境上運行exe遊戲程序。詳見《4. proton的運行架構》一節。
若不使用protontricks的可以看我的另一篇教程《steamdeck運行遊戲時同時開修改器(使用任務管理器)》: https://www.bilibili.com/read/cv21078466,protontricks的打補丁等基本功能都可以使用任務管理器實現。
2. protontricks的簡單使用2.1 protontricks的安裝與配置
在桌面系統的商店安裝」protontricks」 和 「flatseal」


用 flatseal 給 protontricks 分配所有的文件系統訪問許可權

2.2 在protontricks打遊戲補丁之前
在使用protontricks打遊戲補丁之前,對應非steam遊戲,我們必須使用steam客戶端添加一個"非steam遊戲"。選擇對應遊戲的exe, 保存。

勾選"強制使用兼容層",這里推薦使用GE-Proton

把遊戲運行一下,然後關掉,這樣就初始好該遊戲的沙盒環境了

2.3 使用protontricks給遊戲打補丁
右鍵"遊戲補丁.exe", 選擇protontricks打開.

選擇需要打補丁的遊戲, 點"OK"完成打補丁

=============== 以下的部分偏技術,有點硬核,請斟酌食用 ==============
3. protontricks的高級使用3.1 在命令行中使用(在konsole中執行)
安裝protontricks命令
echo "alias protontricks='flatpak run com.github.Matoking.protontricks'" >> ~/.bashrc
之後關閉konsole並重開konsole
獲取遊戲ID
kong@ubuntu:~$ protontricks -lFound the following games:Non-Steam shortcut: taskmgr.exe (4290865737)Non-Steam shortcut: windows app (3758420005)Plants vs. Zombies: Game of the Year (3590)
使用圖片界面運行winetricks
在windows app沙盒環境內 以圖形界面的方式運行winetricksprotontricks 3758420005 --gui
在指定遊戲的沙盒環境內運行winetricks命令
# 在windows app沙盒環境內 運行注冊表, 3758420005之後的參數直接傳給winetricksprotontricks 3758420005 regedit# 在windows app沙盒環境內 運行任務管理器, 3758420005之後的參數直接傳給winetricksprotontricks 3758420005 taskmgr# 在windows app沙盒環境內 安裝d3dx9 DLL庫, 我們常用該方式給遊戲安裝缺失的動態庫protontricks 3758420005 d3dx9
在指定遊戲的沙盒環境內運行linux命令
這里可以直接使用pronton兼容層內的wine.
# 在windows app沙盒環境內: 使用wine啟動注冊表protontricks -c "wine regedit" 3758420005# 在windows app沙盒環境內: 使用wine啟動終端應用protontricks -c "wine wineconsole.exe" 3758420005# 在windows app沙盒環境內: 使用wine啟動exe應用protontricks -c "wine Z:\\\\home\\deck\\your_path.exe" 3758420005# 在windows app沙盒環境內: 使用wine的wineconsole.exe安裝bat腳本protontricks -c "wine wineconsole.exe Z:\\\\home\\deck\\your_path.bat" 3758420005
3.2 winetricks功能protontricks是一個proton環境下的winetricks包裝器,winetricks擁有的功能,protontricks都能實現,而winetricks的功能主要為: 1. 安裝dll庫; 2.安裝字型檔
啟動winetricks
protontricks 3758420005 --gui

# 這里的IP與埠改成實際的代理埠export http_proxy="http://127.0.0.1:10809"export https_proxy="http://127.0.0.1:10809"# 啟動winetricksprotontricks 3758420005 --gui
3.3.2 protontricks運行遊戲與steam客戶端運行遊戲有何區別?桌面模式下, protontricks可以直接打開exe遊戲,但兼容性可能不及使用steam客戶端運行遊戲;
兩者運行的環境變數是不一致的,有待進一步研究。
4. proton的運行架構
涉及的客戶端:
steamapp客戶端: steamos桌面系統自帶;
protontricks客戶端: 可在桌面系統discover商店下載,使用前用flatseal分配以下文件許可權.
4.1 相關概念
沙盒環境: 為保證非steam遊戲的運行環境彼此隔離獨立,減少干擾,steam os系統為每個steam遊戲創建一個以gameId隨機數字命令的沙盒環境;
proton客戶端: 包括steamapp官方客戶端和protontricks客戶端, 可以用來管理沙盒環境下的非steam遊戲;
gameId: 用來識別某個非steam遊戲的沙盒環境,但使用steamapp官方客戶端,強制使用兼容層首次運行遊戲後,steamapp客戶端會給當前遊戲創建一個由隨機數字組成的目錄,裡面放置了driver_c系統核心。
Z掛載盤: 兼容層proton運行非steam遊戲後,會把當前linux系統的根目錄(/)掛在偽windows運行環境的Z盤符上,exe程序可以在Z盤找到遊戲補丁進行安裝。
proton兼容層: 兼容層實質為wine與winetricks的封裝,加入了遊戲運行組件庫等。非steam遊戲的沙盒環境由proton創建。兼容層可以在遊戲屬性中動態切換,保證能最大程度運行遊戲。
4.2 運行非steam遊戲原理steamos啟動非steam遊戲實質是通過proton兼容層下的wine核心,創建一個偽windows運行環境,在該環境下運行exe程序。
4.3 steam遊戲沙盒架構
proton遊戲沙盒架構
4.3.1 proton客戶端
steamapp客戶端: steamos桌面系統提供的steam客戶端,通過該客戶端選擇一個非steam遊戲運行,強制使用兼容層,並首次運行遊戲後,可以創建一個由隨機數字組成(gameId)的目錄,裡面放置了driver_c系統核心;
protontricks客戶端: steamapp的客戶端功能比較少,一些給遊戲打補丁的操作無法實現。protontricks是wiinetricks的封裝(通過gameId指定WINE_PREFIX環境變數),它的可用功能實則就是wiinetricks的所有功能,可以進行的操作有: 1. 安裝exe運行的dll庫; 2. 安裝字體; 3. 修改注冊表; 4. 安裝exe等。protontricks是一個專業向的強大工具,一些exe遊戲的遊戲補丁都可以用它來安裝;
4.3.2 遊戲沙盒環境
一個非steam遊戲對應一個遊戲沙盒環境,放置在STEAM_COMPAT_DATA_PATH目錄(默認為/home/deck/.local/share/Steam/steamapps/compatdata/xxx)下,文件夾為一串隨機數字。
每個遊戲沙盒環境包括以下內容:
driver_c: 當前沙盒環境下的windows系統的c盤內容,可以理解為windows系統運行的最小文件系統。exe程序可以訪問C盤訪問driver_c目錄下的內容;
Z掛載盤: 偽windows系統啟動後,會將當前linux系統的根目錄(/)掛載在偽windows運行環境的Z盤符上,exe程序可以訪問Z盤訪問linux系統根目錄(/)的內容,這里的概念類似windows的網路掛載盤;
注冊表: 隨機數字目錄下的system.reg和user.reg, 保存當前遊戲沙盒環境下的注冊表信息;
4.3.3 proton兼容層
兼容層實質為wine與winetricks的封裝,加入了遊戲運行組件庫等。非steam遊戲的沙盒環境由proton兼容層來創建。兼容層可以在遊戲屬性中動態切換,保證能最大程度運行遊戲。
5. 安裝一個非steam遊戲的流程5.1 安裝綠色版遊戲(無需打補丁)
使用"steam客戶端"直接添加非steam遊戲即可,然後設置強制使用兼容層,選擇"運行遊戲".

5.2 安裝綠色版遊戲(需打補丁)
該類型遊戲提供一個基礎exe文件,還有一個或多個gamePatch.exe補丁文件,需要全部安裝才能使用。
分為以下兩步:

: 使用"steam客戶端"直接添加非steam遊戲, 選擇基礎game.exe即可,然後設置強制使用兼容層,選擇"運行遊戲";
打遊戲補丁: 右鍵從protontricks客戶端打開gamePatch.exe,選擇上一步創建的遊戲,在目標遊戲的沙盒環境下安裝exe;
5.3 安裝安裝版遊戲
該類型遊戲提供一個install.exe文件,需要安裝才能使用。
分為以下三步:
創建沙盒環境: 使用"steam客戶端"直接添加非steam遊戲, 隨便選擇一個exe文件,然後設置強制使用兼容層,選擇"運行遊戲";
安裝安裝版遊戲: 右鍵從protontricks客戶端打開gamePatch.exe,選擇上一步創建的遊戲,在目標遊戲的沙盒環境下安裝install.exe;
更新遊戲路徑: 使用steam客戶端將遊戲的啟動目標改為上一步的遊戲安裝文件夾內的遊戲exe;