本文討論如何在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位元環境。
- 安裝以下套件
sudo apt update
sudo apt install debootstrap debian-archive-keyring x11-xserver-utils dbus-x11
- 建立gaming目錄。將擁有者變更為root才能初始化systemd。
mkdir gaming
sudo chown root:root gaming
- 用debootstrap下載Debian系統檔案,選最新版sid,架構為32位元armhf
sudo debootstrap --arch armhf --components=main,universe sid gaming http://ftp.tw.debian.org/debian/
- 新增
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/
- 賦予指令稿執行權限然後執行,登入chroot。
chmod + startg.sh
./startg.sh
- 更新與安裝VIM
apt update
apt install vim
- 用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
- 安裝編譯用的工具
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
- 新增一般使用者,加入users群組,變更密碼
adduser --home /home/user user
usermod -g users user
passwd user
passwd root
- 執行
visudo
,找到root段加入以下內容,讓使用者擁有sudo權限:
root ALL=(ALL:ALL) ALL
user ALL=(ALL:ALL) ALL
- 切換至剛剛建立的使用者
su user
cd
- 在家目錄新增
.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檔可以安裝了,當然要 自行編譯也是可以的。
- 加入的 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
- 加入 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
- 回到宿主機系統(Mobian),將chroot內部的binfmt複製到宿主機:
sudo cp -r ~/gaming/etc/binfmt.d/box* /etc/binfmt.d/
- 重新啟動宿主機的binfmt服務。回到chroot內部的終端機。
sudo systemctl restart systemd-binfmt
3. 安裝Steam和Steam Proton#
- 安裝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*
- 安裝Steam的deb檔
wget https://repo.steampowered.com/steam/archive/stable/steam_latest.deb
sudo apt install ./steam_latest.deb
cd
- 執行Steam
steam +open steam://open/minigameslist
登入Steam後,點選左上角Steam設定→Steam Play下載安裝Proton。當啟動Windows遊戲時,Steam會自動下載Proton執行。
雖然Steam可以開啟Big Picture Mode,但這個PinePhone比較有用,因為Poco F1的USB和藍芽不正常。
4. 安裝Wine#
Raezroth採用的是 wine-tkg,我則是採用 Wine-GE-Proton,內含Wine與Wine64。
- 安裝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
- 將Wine的路徑加入環境變數。
echo 'PATH=$PATH:/home/$USER/wine-ge-proton/bin' >> ~/.profile
source ~/.profile
5. 測試執行Steam遊戲#
執行x86架構Windows遊戲:This is a game,正常執行。因為Poco F1不能使用USB,所以使用Gnome Desktop Wayland的RDP遠端桌面功能,從電腦遠端輸入滑鼠鍵盤。
再來是x86架構的Linux遊戲nacrissu,正常執行。
剛剛安裝的Wine也能開普通的exe,例如Notepad++。
6. 結語#
Box86/Box64雖可以在Android安裝,但Android核心缺乏binfmt模組,使得Steam開不起來,並且Android很難達成硬體加速。這是我選擇拿純Linux手機來跑的原因。
經過測試,Box86/Box64玩3D遊戲問題還是很多,Wine官網寫可以開啟"IL 2 1946",但Box86卻開不起來,或許跟Wine的版本也有關係。