也許未來能執行Steam,但現在還沒到那個階段。
編譯能執行docker的手機內核後,執行32位元的Ubuntu容器,接著編譯Box86這個x86轉ARM的轉譯器,再來執行Wine。
其實用32位元Termux建立Proot環境就好了,那為何要用容器呢? 因為方便部屬,這樣我不用一直重裝Termux,我可以在64位元的手機跑32位元或64位元的Ubuntu容器,分別執行Box64和Box86。
1. 詳細步驟#
- 執行容器,使用Ubuntu arm32的版本
sudo docker run -ti \
--net="host" \
--dns="8.8.8.8" \
-e DISPLAY=$DISPLAY \
-w /root \
-v $TMPDIR/.X11-unix:/tmp/.X11-unix \
-v $HOME/.Xauthority:/root/.Xauthority \
--platform=linux/arm \
arm32v7/ubuntu
- 安裝TigerVNC
echo 'APT::Sandbox::User "root";' > /etc/apt/apt.conf
apt update
apt install tigervnc-standalone-server tigervnc-common sudo vim
- 安裝xfce4
sudo apt install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utils
sudo apt install xfce4-terminal
sudo update-alternatives --config x-terminal-emulator
#選擇xfce4的終端機
- 設定vncserver啟動腳本
touch $HOME/.vnc/xstartup
vim $HOME/.vnc/xstartup
#填入:
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
startxfce4 &
[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
chmod +x $HOME/.vnc/xstartup
- 啟動vncserver (不設定密碼是因為會崩潰)
export DISPLAY=:1
vncserver -localhost no -geometry 1280x720 -SecurityTypes none --I-KNOW-THIS-IS-INSECURE
- 編譯box86
apt install git wget cmake build-essential python3 gcc-arm-linux-gnueabihf
git clone https://github.com/ptitSeb/box86
cd box86
mkdir build
cd build
cmake .. -DARM_DYNAREC=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo
make -j$(nproc)
make install
- 安裝32位元的Wine
cd
mkdir wine && cd wine
wget https://www.playonlinux.com/wine/binaries/phoenicis/upstream-linux-x86/PlayOnLinux-wine-6.18-upstream-linux-x86.tar.gz
tar -xvf PlayOnLinux-wine-6.18-upstream-linux-x86.tar.gz
#環境變數
export BOX86_PATH=~/wine/bin/
export BOX86_LD_LIBRARY_PATH=~/wine/lib/
export BOX86_LOG=1
ln -s ~/wine/bin/wine /usr/local/bin/wine
#雖然不建議用root執行wine
mkdir .wine
box86 wine winecfg
#更新完後執行任意exe
- 測試完後,將這個容器儲存成本機映像檔,約2GB。
sudo docker ps
sudo docker commit -a='Ivon' -m='XFCE4 insatlled' [id] arm32v7/ubuntu:v2
#日後以此為基礎執行:
sudo docker run -ti \
--net="host" \
--dns="8.8.8.8" \
-e DISPLAY=$DISPLAY \
-w /root \
-v $TMPDIR/.X11-unix:/tmp/.X11-unix \
-v $HOME/.Xauthority:/root/.Xauthority \
--platform=linux/arm \
arm32v7/ubuntu:v2
- 附註: 如果儲存空間不夠,刪除全部docker資料後重試。
sudo docker system df
sudo docker system prune -af