本文的操作需要Root權限,免Root的版本請看 Termux Proot安裝Box86。
註:不是所有程式都能用Box64 + Wine跑,請先在x86架構的Linux PC上用Wine測試,確認你的Windows程式能正常執行再用Box64執行。如果有任何問題,請優先向 Box64開發者回報看看。
這篇文章探討如何讓Box86與Box64共存於同一個手機上的ARM 64位元環境,這樣子就可以按情況執行32位元或者64位元的Wine + Windows exe應用程式,甚至是同時執行。
(左邊32位元彈珠檯,右邊64位元播放器)
前3個段落討論如何設定環境,第4段和第5段討論Wine執行策略:如何不要讓32位元和64位元互相干擾。
1. 安裝chroot並開啟多架構支援#
首先用Linux Deploy在手機安裝64位元chroot Ubuntu,升級至Ubuntu 20.04。
開啟多架構支援:
dpkg --add-architecture armhf
- 由於Linux Deploy的Ubuntu的
source.list
不完整,因此編輯/etc/apt/sources.list
,修改成如下:
deb [arch=arm64,armhf] http://ports.ubuntu.com/ focal main restricted
deb [arch=arm64,armhf] http://ports.ubuntu.com/ focal-updates main restricted
deb [arch=arm64,armhf] http://ports.ubuntu.com/ focal universe
deb [arch=arm64,armhf] http://ports.ubuntu.com/ focal-updates universe
deb [arch=arm64,armhf] http://ports.ubuntu.com/ focal multiverse
deb [arch=arm64,armhf] http://ports.ubuntu.com/ focal-updates multiverse
deb [arch=arm64,armhf] http://ports.ubuntu.com/ focal-backports main restricted universe multiverse
- 安裝相關套件
sudo apt update
sudo apt install git build-essential cmake wget gcc-arm-linux-gnueabihf zenity:armhf libasound*:armhf libstdc++6:armhf mesa*:armhf
2. 編譯Box86和下載Wine#
- 使用樹莓派4的參數編譯Box86
cd
git clone https://github.com/ptitSeb/box86
cd box86
mkdir build; cd build; cmake .. -DRPI4ARM64=1 -DARM_DYNAREC=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo
make -j$(nproc)
sudo make install
cd
rm -rf box86
- 下載Wine 7.0-rc5
mkdir wine
cd wine
wget https://www.playonlinux.com/wine/binaries/phoenicis/upstream-linux-x86/PlayOnLinux-wine-7.0-rc5-upstream-linux-x86.tar.gz
tar -xvf *.tar.gz
cd
3. 編譯Box64和下載Wine64#
- 編譯Box64
git clone https://github.com/ptitSeb/box64.git
cd box64
mkdir build; cd build; cmake .. -DRPI4ARM64=1 -DARM_DYNAREC=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo
make -j$(nproc)
sudo make install
cd
rm -rf box64
- 下載Wine64 6.17
cd
mkdir wine64
cd wine64
wget https://www.playonlinux.com/wine/binaries/phoenicis/upstream-linux-amd64/PlayOnLinux-wine-6.17-upstream-linux-amd64.tar.gz
tar -xvf *.tar.gz
cd
4. 使用$WINEPREFIX區隔執行環境#
這邊有二個重要的環境變數。
WINEPREFIX: wine預設執行會在使用者家目錄建立
.wine
的目錄,也就是C槽。如果在執行Wine前先宣告環境變數WINEPREFIX,Wine執行時會按照WINEPREFIX的位置建立一個新目錄,這樣可以用於區隔「Box86 + Wine」與「Box64 + Wine64」,免得互相干擾。Box86/64的lib目錄: 因為這裡沒有建立符號連結,所以要執行Box86/64 + Wine之前都要先宣告環境變數BOX86_PATH和BOX86_LD_LIBRARY_PATH,指向Wine的位置,這樣Box86/64才找的到檔案。
例如我要執行32位元的Box86 + Wine,完整指令如下:
export BOX86_PATH=/home/android/wine/bin/
export BOX86_LD_LIBRARY_PATH=/home/android/wine/lib/wine/i386-unix/:/lib/i386-linux-gnu:/lib/aarch64-linux-gnu/
box86 wine *.exe
- 如果是64位元的Box64 + Wine64:
#結合前面所提的WINEPREFIX,新建一個目錄.wine64給Wine64儲存資料,跟預設的Wine分開
export WINEPREFIX=/home/android/.wine64
export WINEARCH=win64
export BOX64_PATH=/home/android/wine/bin/
export BOX64_LD_LIBRARY_PATH=/home/android/wine/lib/wine/i386-unix/:/lib/i386-linux-gnu:/lib/aarch64-linux-gnu/
box64 wine64 *.exe
- 注意這些環境變數是暫時的,開新的終端機頁面就會失效。
5. 來執行exe吧#
實際執行影片(彈珠台)
6. 缺陷#
即使Box86和Box64二者共存,Winetrciks還是無法正常執行。參考官方的做法建立符號連結也不行,Winetricks會混亂。
7. 參考資料#
- [linux deploy debian容器使用box86和box64注意事项 - Bilibili](linux deploy debian容器使用box86和box64注意事项 )
- box86/docs/COMPILE.md - Github