快轉到主要內容

用Box86 + Wine在ARM Linux裝置玩x86架構的Windows exe遊戲

智慧型手機 真Linux手機 Box86 Box64 PinePhone Wine Steam Mobian
🗓️ 民國111年 壬寅年
✍ 切換正體/簡體字
目錄

🇺🇸 English version

本文討論如何在ARM架構的Linux裝置跑x86架構的Wine,執行Windows exe。

Box86和Box64是x86 → ARM指令的轉譯器。有了Box86再搭配Wine,就可以執行Windows exe軟體。

如此一來,Raspberry Pi這類ARM開發板就能玩x86架構的Windows遊戲了,連Steam也能裝。

至於Linux手機也可以執行Box86,比如支援Mobian與Arch Linux ARM系統的PinePhone Pro。

在Github上有一篇寫給PinePhone Pro的教學: Raezroth/Linux-ARM-Gaming-Chroot

雖然我有買PinePhone,但是若要玩遊戲,還是拿性能較強的小米Poco F1出來吧,這支可以刷 Mobian

影片操作示例

下面的教學是參考Raezroth教學後針對Mobian寫的,手動設定chroot環境,安裝Box86,開啟Steam,轉譯x86版的Proton玩Windows遊戲。

注意我的桌面環境為Wayland協定的GNOME。

1. 設定chroot環境
#

首先要建立Debian的chroot容器環境。為什麼不直接在Mobian裝就好了?因為要讓Box86和Box64同時存在,有必要建立隔離的32位元環境。

  1. 安裝以下套件
sudo apt update
sudo apt install debootstrap debian-archive-keyring x11-xserver-utils dbus-x11
  1. 建立gaming目錄。將擁有者變更為root才能初始化systemd。
mkdir gaming
sudo chown root:root gaming
  1. 用debootstrap下載Debian系統檔案,選最新版sid,架構為32位元armhf
sudo debootstrap --arch armhf --components=main,universe sid gaming http://ftp.tw.debian.org/debian/
  1. 新增startg.sh指令稿,填入以下內容:
cd gaming
sudo mount -t proc /proc proc/
sudo mount -t sysfs /sys sys/
sudo mount --bind /dev dev/
sudo mount --bind /dev/pts/ dev/pts/
sudo mount --bind /run run/
sudo mount --bind /run/user/1000 run/user/1000
sudo mount -t tmpfs tmpfs tmp/
sudo chroot . /bin/bash

# 登出後取消掛載
sudo umount proc/
sudo umount sys/
sudo umount dev/
sudo umount dev/pts
sudo umount run/
sudo umount run/user/1000
sudo umount tmp/
  1. 賦予指令稿執行權限然後執行,登入chroot。
chmod + startg.sh
./startg.sh
  1. 更新與安裝VIM
apt update
apt install vim
  1. 用VIM編輯/root/.bashrc,加入以下環境變數:
export LC_ALL="C"
export LANGUAGE="C"
export PATH=$PATH:/bin:/sbin:/usr/bin:/usr/sbin:/usr/games:/usr/local/bin:/usr/local/sbin
export STEAMOS=1
export STEAM_RUNTIME=1

# 原文提及要執行Steam,此指令每次開機都要執行一次,因此我寫在這裡
chmod 1777 /dev/shm
  1. 安裝編譯用的工具
source /root/.bashrc

dpkg --add-architecture arm64

apt update

apt install sudo vim make cmake git wget gnupg libx11-dev libgl-dev libvulkan-dev libtcmalloc-minimal4 libnm0 zenity chromium alsamixergui libsdl2-dev unzip libgles-dev firefox-esr:arm64 libx11-dev:arm64 libvulkan-dev:arm64 libsdl2-dev:arm64 libgl-dev:arm64 libc6-dev:arm64 libgles-dev:arm64 libsdl2-dev zstd xz-utils
  1. 新增一般使用者,加入users群組,變更密碼
adduser --home /home/user user
usermod -g users user
passwd user
passwd root
  1. 執行visudo,找到root段加入以下內容,讓使用者擁有sudo權限:
root  ALL=(ALL:ALL) ALL
user  ALL=(ALL:ALL) ALL
  1. 切換至剛剛建立的使用者
su user
cd
  1. 在家目錄新增.profile,加入以下環境變數:
export SDL_VIDEODRIVER=wayland
export WAYLAND_DISPLAY=wayland-1
export GDK_BACKEND=wayland
export XDG_SESSION_TYPE=wayland
export XDG_RUNTIME_DIR=/run/user/1000
export DISPLAY=:1
export XSOCKET=/tmp/.X11-unix/X1
export _JAVA_AWT_WM_NONREPARENTING=1

2. 安裝Box86/Box64
#

Box86現在有事先編譯的deb檔可以安裝了,當然要 自行編譯也是可以的。

  1. 加入的 Itai-Nelken套件庫並安裝Box86:
sudo wget https://itai-nelken.github.io/weekly-box86-debs/debian/box86.list -O /etc/apt/sources.list.d/box86.list
wget -qO- https://itai-nelken.github.io/weekly-box86-debs/debian/KEY.gpg | sudo apt-key add -
sudo apt update && sudo apt install box86 -y
  1. 加入 ryanfortner的套件庫並安裝Box64:
sudo wget https://ryanfortner.github.io/box64-debs/box64.list -O /etc/apt/sources.list.d/box64.list
wget -O- https://ryanfortner.github.io/box64-debs/KEY.gpg | gpg --dearmor | sudo tee /usr/share/keyrings/box64-debs-archive-keyring.gpg
sudo apt update && sudo apt install box64-arm64 -y
  1. 回到宿主機系統(Mobian),將chroot內部的binfmt複製到宿主機:
sudo cp -r ~/gaming/etc/binfmt.d/box* /etc/binfmt.d/
  1. 重新啟動宿主機的binfmt服務。回到chroot內部的終端機。
sudo systemctl restart systemd-binfmt

3. 安裝Steam和Steam Proton
#

  1. 安裝Steam的依賴套件
xdg-user-dirs-update --force

cd ~/Downloads
wget http://ftp.debian.org/debian/pool/main/libi/libindicator/libindicator7_0.5.0-4_armhf.deb
wget http://ftp.debian.org/debian/pool/main/liba/libappindicator/libappindicator1_0.4.92-7_armhf.deb
sudo apt install ./lib*
  1. 安裝Steam的deb檔
wget https://repo.steampowered.com/steam/archive/stable/steam_latest.deb
sudo apt install ./steam_latest.deb
cd
  1. 執行Steam
steam +open steam://open/minigameslist
  1. 登入Steam後,點選左上角Steam設定→Steam Play下載安裝Proton。當啟動Windows遊戲時,Steam會自動下載Proton執行。

  2. 雖然Steam可以開啟Big Picture Mode,但這個PinePhone比較有用,因為Poco F1的USB和藍芽不正常。

4. 安裝Wine
#

Raezroth採用的是 wine-tkg,我則是採用 Wine-GE-Proton,內含Wine與Wine64。

  1. 安裝Wine:
cd ~/Downloads
wget https://github.com/GloriousEggroll/wine-ge-custom/releases/download/GE-Proton8-26/wine-lutris-GE-Proton8-26-x86_64.tar.xz
tar -xvf wine-lutris-GE-Proton8-26-x86_64.tar.xz
mv ~/Downloads/wine-lutris-GE-Proton8-26-x86_64/* ~/wine-ge-proton
  1. 將Wine的路徑加入環境變數。
echo 'PATH=$PATH:/home/$USER/wine-ge-proton/bin' >> ~/.profile

source ~/.profile

5. 測試執行Steam遊戲
#

  1. 執行x86架構Windows遊戲:This is a game,正常執行。因為Poco F1不能使用USB,所以使用Gnome Desktop Wayland的RDP遠端桌面功能,從電腦遠端輸入滑鼠鍵盤。

  2. 再來是x86架構的Linux遊戲nacrissu,正常執行。

  3. 剛剛安裝的Wine也能開普通的exe,例如Notepad++。

6. 結語
#

Box86/Box64雖可以在Android安裝,但Android核心缺乏binfmt模組,使得Steam開不起來,並且Android很難達成硬體加速。這是我選擇拿純Linux手機來跑的原因。

經過測試,Box86/Box64玩3D遊戲問題還是很多,Wine官網寫可以開啟"IL 2 1946",但Box86卻開不起來,或許跟Wine的版本也有關係。

相關文章

PinePhone Linux上跑Windows exe
智慧型手機 真Linux手機 Box86 Box64 PinePhone Wine
PinePhone半手動安裝Arch Linux ARM from barebone
智慧型手機 真Linux手機 PinePhone Arch Linux
將PinePhone手機變成伺服器 (Docker + Nextcloud)
智慧型手機 真Linux手機 Nextcloud PinePhone

留言板

此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。要討論程式碼請用Giscus,匿名討論請用Disqus。

這是Giscus留言板,需要Github帳號才能留言。支援markdown語法,若要上傳圖片請貼Imgur連結。您的留言會在Github Discussions向所有人公開。

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。