本文Ivon討論如何在ARM架構的樹莓派跑x86架構的Steam客戶端,遊玩x86架構的Windows遊戲。
這裡講的不是安裝Steam Link遠端串流,而是真正在樹莓派直接跑遊戲。嗯?這塊小板子的硬體撐得住嗎?可以的,樹莓派4代以後就能玩2D遊戲了,5代要玩些3D小遊戲更是沒問題。
圖例:在Raspberry Pi 5遊玩《Helltaker》遊戲
圖例:在Raspberry Pi 5遊玩《POSTAL 2》遊戲
同樣是Linux系統,樹莓派的Steam安裝過程會比在一般Linux電腦複雜,因為Steam的遊戲大部分都是x86架構,就連Steam客戶端本身也只支援x86架構,那麼在以ARM為主的樹莓派Linux系統便會遇到無法執行的難題。
所幸現在有了轉譯方案,我們可以透過ptitSeb研發的開源Box86與Box64程式,讓x86架構的遊戲程式能在ARM架構的系統上執行,效能還不會損失太多!
1. 測試環境#
- Raspberry Pi 5 8GB
- Raspberry Pi OS 12 Bookworm
- Box86 0.3.6
- Box64 0.3.0
玩遊戲建議接上實體螢幕與鍵鼠操作。若要用遠端桌面請使用支援GPU加速的RustDesk。
2. 安裝Box86與Box64#
請先 安裝Box86與Box64,記得向binfmt註冊。
Linux版Steam客戶端本身是32位元程式,所以必須用Box86安裝。但是很多Steam遊戲都是64位元的,所以你得裝Box64。
3. 安裝Steam客戶端#
- 利用Box86原始碼儲存庫提供的指令稿即可完成安裝
cd box86
./install_steam.sh
- 執行Steam,Box86會自動跳出來轉譯
steam
等待依賴套件裝完。如果Steam啟動的時候崩潰,嘗試停用Steam Client WebHelper的GPU加速。
開啟後就能下載遊戲了。具體能跑什麼遊戲呢?因為這裡是用Box86轉譯執行的,請先看 Box86相容性清單,再參考電腦 ProtonDB的資料。
如果Steam下載原生支援Linux系統的遊戲,執行的時候box86會自動跳出來轉譯。若下載Windows遊戲,請參考 Linux版Steam使用教學,到Steam設定「強制啟用相容性工具」,Steam就會在下載Winows遊戲的時候自動幫你裝好Proton相容層。
遊戲若是打不開,請觀察Steam終端機輸出的訊息,然後到Github搜尋錯誤訊息。我有遇到Steam無法按右鍵的bug,這個時候配合Shift一起按就能解決。
這裡提供另一個啟動Steam的方法,以下指令僅會開啟收藏庫的遊戲迷你列表,如此一來可減少Steam客戶端佔用的系統資源。
steam steam://open/minigameslist
另一種方法是用命令行啟動遊戲:
steam steam://rungameid/1289310
4. 3D遊戲的Vulkan問題#
Steam的2D遊戲玩起來應該沒問題,但3D遊戲就會牽扯到Vulkan驅動。
Wine在執行Windows exe的時候會透過WINED3D將DirectX的繪圖指令轉成OpenGL;而Steam Proton因為內建DXVK,會將DirectX轉成Vulkan提供更好的效能。
Box86會自動使用宿主機Vulkan驅動,讓轉譯的遊戲支援GPU加速。
- 安裝以下套件取得Vulkan驅動
sudo apt install libgdm1:armhf libudev1:armhf libgl1-mesa-dri:armhf libglapi-mesa:armhf libglu1-mesa:armhf libglx-mesa0:armhf mesa-va-drivers:armhf mesa-vdpau-drivers:armhf mesa-vulkan-drivers:armhf libsdl1.2debian:armhf libegl-mesa0:armhf
sudo apt install mesa-vulkan-drivers
- 確認宿主機Vulkan驅動狀態
vulkaninfo --summary
- 可惜的是,根據Box86開發者所述,Raspberry Pi 4、Raspberry Pi5的Vulkan驅動目前尚不支援Steam Proton內建的DXVK,故需要對Steam收藏庫的遊戲按右鍵 → 內容,編輯啟動選項,設定環境變數
PROTON_USE_WINED3D=1 %command%
,改回使用WINED3D,也就是將DirectX轉譯為OpenGL的作法。如此遊戲才能開啟。
另一種可能讓DXVK跑起來的方式:加入環境變數MESA_LOADER_DRIVER_OVERRIDE=zink
,使用Mesa的Zink驅動,它能將OpenGL的指令轉譯成Vulkan。不過這個尚屬於實驗性驅動。
若Raspberry Pi的OpenGL版本太低,Unity遊戲可能不給跑,或是出現缺少DirectX的錯誤。這時得在啟動遊戲的環境變數加上
MESA_GL_VERSION_OVERRIDE=3.2
,強制覆寫系統的OpenGL版本。如果原生支援Linux的遊戲開不起來,請讓Steam強制下載Windows版本(相容性 → 強制啟用相容性工具)再用Proton跑。
儘管做了以上措施,我發現還是有些遊戲無法執行,且把OpenGL版本提昇過高會造成遊戲圖形錯誤。
5. 安裝Protontricks與ProtonUp-QT#
ProtonUp-QT是下載第三方維護的Proton的工具。
使用Python虛擬環境安裝:
git clone https://github.com/DavidoTek/ProtonUp-Qt.git
cd ProtonUp-Qt
python3 -m venv venv
source venv/bin/activate
pip3 install -r ./requirements.txt
sudo apt install libxcb-cursor0
執行程式:
python3 -m pupgui2
指定要下載的Proton-GE就行。
雖然Protontricks讀不到經由Box86 Steam安裝的遊戲,但是下載好Proton-GE後便能在Steam客戶端切換。
Protontricks功能等同Winetricks,方便我們安裝字體與打patch。
用pipx安裝:
sudo apt install pipx
pipx install protontricks
再用以下指令啟動:
protontricks --gui --no-bwrap
選取要修改的遊戲即可操作。