快轉到主要內容

Android裝Ubuntu,Termux以QEMU模擬執行x86_64架構的Linux虛擬機

分類   智慧型手機 Termux教學
標籤   Termux QEMU Docker Podman
🗓️ 民國113年 甲辰年
✍ 切換正體/簡體字
目錄

介紹如何在Android手機/平板安裝完整的Linux系統虛擬機,免root。

Termux可以利用QEMU模擬執行Linux虛擬機,補充 proot-distro環境的不足。

為什麼要用QEMU呢?proot-distro提供的Linux環境類似於chroot,然而還是有一些套件不能跑,例如Podman、Docker、Snap、Flatpak,還有依賴Systemd的程式,所以虛擬機就有其必要。

QEMU能夠讓你模擬x86或者ARM架構的虛擬機,執行完整的Linux桌面系統。下圖為Android手機跑Xubuntu系統的畫面。

這樣幾乎所有軟體都能跑了,圖片為Podman執行結果。

順帶一提,QEMU即 Limbo PC Emulator背後使用的模擬器,在Limbo停止更新之後,你依然可以用Termux的QEMU套件跑虛擬機。

請注意: 大部分Android手機都沒有KVM核心模組(僅Pixel手機Root後可使用pKVM),所以Termux的QEMU無法像電腦Linux一樣使用KVM加速虛擬機執行。沒有KVM的情況下,QEMU虛擬機執行速度非常的慢,虛擬機裡面程式執行速度大約是Termux原生套件的五分之一不到,跑純文字的程式勉強還行,但文書處理體驗不佳,遑論玩遊戲了。

考慮到這種執行速度,你可以不要跑圖形介面,而是直接SSH進去執行程式。

1. 環境
#

  • 手機:Sony Xperia 5 II
  • 系統版本:Android 14
  • 處理器:Qualcomm Snapdragon 865
  • RAM:8GB
  • Linux虛擬機系統:Ubuntu 24.04 x86_64 (Xubuntu)

跑QEMU的手機,得使用旗艦處理器,並且RAM 8GB以上的機型。

Linux發行版使用Ubuntu,但是GNOME有點太重了,這裡選擇輕量的Xubuntu,搭載XFCE桌面。如果不要圖形介面的話,選用Ubuntu Server也是可以的。Ubuntu以外還有更輕量的選擇,那就是針對嵌入式系統設計的Alpine Linux,開機速度更快。(參見: Termux跑headless Alpine Linux QEMU虛擬機

因為沒有KVM加速,所以模擬x86還是ARM架構的虛擬機都沒有太大差別。

提示:你可以在Linux電腦上跑QEMU(有KVM速度比較快),做個已經安裝系統的qcow2映像檔,再放到手機上開機,節省系統安裝時間。

2. 安裝前置依賴套件
#

  1. 安裝VNC客戶端,例如 AVNC

  2. 安裝 Termux

  3. 開啟Termux,維持在背景執行

  4. Xubuntu官網複製ISO下載鏈接,用wget指令下載

pkg install wget

wget https://ftp.ubuntu-tw.net/mirror/ubuntu-cdimage/xubuntu/releases/24.04/release/xubuntu-24.04-desktop-amd64.iso
  1. 然後,安裝QEMU和SSH套件
pkg install qemu-system-x86_64 qemu-utils qemu-common openssh vim

3. 安裝Linux虛擬機
#

安裝指令跟 Linux電腦跑QEMU類似,但因為Android沒有KVM所以略做修改。

  1. 新增32GB的虛擬硬碟
qemu-img create -f qcow2 xubuntu.qcow2 32G
  1. 新增開機指令稿
vim startubuntu.sh
  1. 輸入以下內容
qemu-system-x86_64 -machine q35 \
-drive if=pflash,format=raw,read-only,file=$PREFIX/share/qemu/edk2-x86_64-code.fd \
-m 4096 \
-accel tcg,thread=multi \
-smp sockets=1,cores=4,threads=1 \
-cpu qemu64 \
-vga std \
-netdev user,id=n1,hostfwd=tcp::2222-:22 -device virtio-net,netdev=n1 \
-device intel-hda \
-usbdevice tablet \
-boot menu=on -drive file=xubuntu.qcow2 \
-vnc :0 \
-cdrom xubuntu-24.04-desktop-amd64.iso
  1. 指令解釋:
#執行x86_64的虛擬機
qemu-system-x86_64 -machine q35 \

#啟用UEFI開機
-drive if=pflash,format=raw,read-only,file=$PREFIX/share/qemu/edk2-x86_64-code.fd \

#分配4GB RAM
-m 4096 \

#沒有KVM所以只能用TCG加速
-accel tcg,thread=multi \

#CPU分配1插座4核1執行緒
-smp sockets=1,cores=4,threads=1 \
-cpu qemu64 \

#虛擬顯示卡
-vga std \

#使用virtio網路卡,重新導向虛擬機的SSH通訊埠供外部存取
-netdev user,id=n1,hostfwd=tcp::2222-:22 -device virtio-net,netdev=n1 \

#音效卡
-device intel-hda \

#滑鼠鍵盤
-usbdevice tablet \

# 虛擬硬碟
-boot menu=on -drive file=xubuntu.qcow2 \

#啟動VNC伺服器
-vnc :0 \

# 開機ISO
-cdrom xubuntu-24.04-desktop-amd64.iso
  1. 開機啟動
chmod +x startubuntu.sh

./startubuntu.sh
  1. 開啟AVNC APP,輸入IP:localhost:5900,連線到Xubuntu桌面

  2. 等到進入開機介面,安裝Xubuntu,之後關機。

  3. 編輯指令稿

vim startubuntu.sh
  1. 移除cdrom選項
qemu-system-x86_64 -machine q35 \
-drive if=pflash,format=raw,read-only,file=$PREFIX/share/qemu/edk2-x86_64-code.fd \
-m 4096 \
-accel tcg,thread=multi \
-smp sockets=1,cores=4,threads=1 \
-cpu qemu64 \
-vga std \
-netdev user,id=n1,hostfwd=tcp::2222-:22 -device virtio-net,netdev=n1 \
-device intel-hda \
-usbdevice tablet \
-boot menu=on -drive file=xubuntu.qcow2 \
-vnc :0
  1. 之後再用該指令稿開機,測試能否進入系統

4. SSH到虛擬機
#

  1. 在Xubuntu開啟終端機,啟用SSH服務
sudo apt install openssh-server

sudo systemctl enable --now ssh
  1. 於Termux左邊滑出來,開一個新session,嘗試SSH進去。
ssh user@localhost -p 2222
  1. SSH操作應該會比圖形界面順暢許多,畢竟只有文字。

5. 實際使用體驗
#

開機進入Xubuntu桌面至少10分鐘。

Firefox光開啟就花了五分鐘,載入Google首頁再花五分鐘,GPU加速不要妄想了。(備註:不要用Snap安裝,太慢啦)

podman run hello-world指令的執行時間…大概要30秒。

總結,跑圖形界面不實用,跑純文字程式還是有價值的。

相關文章

Android手機玩Steam上的Windows遊戲 ~ Mobox模擬器使用教學
分類   智慧型手機 Termux教學
標籤   Steam Termux Android
Android手機跑Docker:Termux安裝headless Alpine Linux QEMU虛擬機
分類   智慧型手機 Termux教學
標籤   QEMU Docker Alpine Linux Android
實驗:Android免刷機跑postmarketOS(Termux proot)
分類   智慧型手機 Termux教學
標籤   PostmarketOS Termux

留言板

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

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

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。為防止垃圾內容,有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。若要上傳圖片請善用圖床網站。