用Docker容器在手機上執行Windows exe

也許未來能執行Steam,但現在還沒到那個階段。

編譯能執行docker的手機內核後,執行32位元的Ubuntu容器,接著編譯Box86這個x86轉ARM的轉譯器,再來執行Wine。

其實用32位元Termux建立Proot環境就好了,那為何要用容器呢? 因為方便部屬,這樣我不用一直重裝Termux,我可以在64位元的手機跑32位元或64位元的Ubuntu容器,分別執行Box64和Box86。

1. 詳細步驟

  1. 執行容器,使用Ubuntu arm32的版本
1
2
3
4
5
6
7
8
9
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
  1. 安裝TigerVNC
1
2
3
echo 'APT::Sandbox::User "root";' > /etc/apt/apt.conf
apt update
apt install tigervnc-standalone-server tigervnc-common sudo vim
  1. 安裝xfce4
1
2
3
4
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的終端機
  1. 設定vncserver啟動腳本
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
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
  1. 啟動vncserver (不設定密碼是因為會崩潰)
1
2
export DISPLAY=:1
vncserver  -localhost no -geometry 1280x720 -SecurityTypes none --I-KNOW-THIS-IS-INSECURE
  1. 編譯box86
1
2
3
4
5
6
7
8
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
  1. 安裝32位元的Wine
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
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
  1. 測試完後,將這個容器儲存成本機映像檔,約2GB。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
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
  1. 附註: 如果儲存空間不夠,刪除全部docker資料後重試。
1
2
sudo docker system df
sudo docker system prune -af

2. 參考資料


感謝您的閱讀。歡迎分享Ivon的部落格(ivonblog.com)的文章,引用或轉載請註明文章網址,並遵守創用CC-姓名標示-非商業性-禁止改作 4.0 國際授權條款。如需商業使用請來信告之。

written by human, not by AI

如果本網站文章對您有幫助,歡迎請我喝杯珍珠奶茶。

留言板

點選按鈕,選擇您覺得方便的留言系統。要討論程式碼請用Giscus,匿名討論請用Disqus。

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

這是Disqus留言板,您可能會看到Disqus投放的廣告。無論有無登入皆可留言。此處留言只有本站參與者看得到。若您選擇以訪客身份匿名留言,就不會收到後續回覆通知。