快轉到主要內容

如何在Linux安裝Bliss OS,支援GPU加速的Android-x86虛擬機,可玩手遊

分類   資訊科技 作業系統安裝教學
標籤   Bliss OS Android-X86 KernelSU VirGL Linux QEMU-KVM Scrcpy
🗓️ 民國113年 甲辰年
✍ 切換正體/簡體字
目錄

要在Linux系統跑Android APP,Ivon在 Linux的Android模擬器一文提過多種方案。本篇文章Ivon要介紹Android-x86分支「Bliss OS」。

Bliss OS算是Android-x86的改進版,可以安裝在實體機和虛擬機,支援許多新硬體,例如Intel 10代處理器以後的GPU。Android版本也更新的比較快。

內建Google Play商店,不用另外裝轉譯器也能玩64位元的3D遊戲,可以說是很大的進步了。

本文將討論在Linux安裝Bliss OS的QEMU/KVM虛擬機,透過virglrenderer走虛擬機的GPU加速,使其能夠玩手遊。

影片版安裝過程參考:

1. 為何要選擇Bliss OS?
#

相關文章: Android-x86優質替代品 - Bliss OS介紹

Bliss OS是基於Android-x86開發的Android系統,專門設計給x86架構的電腦、平板跑Android用。在Android-x86的基礎上預載了許多實用工具,並保持活躍的開源更新模式。

比較一下便可知道,Android-x86官方網站最新的版本是Android 9.0,而Bliss OS最新測試版已來到Android 13。

Android版本舊看似不是大問題,但是在ARM轉譯上就有很大差距。Android-x86 9.0依賴Intel的「liboudini」技術,在x86架構的Android系統上執行ARM架構的APK,但只支援到32位元ARM-v7eabi的APK而已,現在有越來越多開發者只提供64位元ARM-v8a的APK哪。因此我們得改用Android 11以上的libhoudini,以相容64位元ARM架構的APK。

除了Android版本較新能相容更多電腦硬體外,Bliss OS也加入了一些讓Android變得像電腦的功能,例如強制旋轉、按鍵映射、遊戲模式、模擬觸控點擊、KernelSU(更難偵測到的root權限)等實用功能,還有用「Gearlock」取代傳統的Android recovery。

順帶一提,Bliss OS的開發團隊同時也有研發 Waydroid,所以二者的功能有些類似。

2. 安裝虛擬機需要的軟硬體
#

我的系統規格:

  • CPU:Intel i5-10210U
  • GPU:Intel® UHD Graphics 620
  • Android-x86版本:11.0
  • QEMU版本:8.1.1
  • virglrenderer版本:0.10.4

請確認CPU已經開啟虛擬化、KVM核心模組已經載入。

請在Linux系統安裝QEMULibvirtVirt Manager套件。Ubuntu參考 這篇安裝。Arch Linux參考 這篇安裝。

接著準備相容的顯示卡, virglrenderer是半虛擬化的GPU技術,可讓QEMU/KVM虛擬機在免GPU直通下獲得3D硬體加速。

virglrenderer僅適用Intel與AMD顯示卡;Nvidia閉源驅動的virglrenderer不是很穩定,且Nvidia在Android的驅動也有問題,GPU直通不可行。

如果你是Nvidia顯示卡,建議放棄硬體加速,使用Bliss OS的No HW Acceleration模式開機。

3. 開始安裝Bliss OS系統,硬碟分割
#

Bliss OS官方網站目前提供各種版本的ISO。

Bliss OS 14(Android 11)和Bliss OS 15(Android 12L)使用Intel libhoudini轉譯ARM架構的APK,在那之後的版本則是改用Google libndk。

這裡使用Bliss OS 15做示範。

  1. 官網下載ISO,選擇內建GApps的版本 (Bliss OS 15.9.x (x86_64-v2) with GApps)

  2. 開啟Virt Manager,新增虛擬機,選取ISO,系統選擇Android-x86

  3. 建議分配8GB RAM、4核心CPU。RAM越大越好,因ARM指令轉譯有時會佔用大量RAM。

  4. 至少分配64GB虛擬硬碟

  5. 勾選在安裝前自訂配置

  6. 晶片組類型選擇Q35,韌體選擇UEFI (OVMF_CODE.fd)

  7. 將硬碟設定為VirtIO

  8. 將CDROM改為SATA

  9. 將開機裝置全部勾選,並將CDROM放到最上面

  10. 將Spice監聽類型設為無,並勾選OpenGL,裝置選取Intel顯示卡

  11. 將顯示卡設定為VirtIO,並勾選3D加速

  12. 點選開始安裝系統

  13. 用鍵盤選取Bliss OS Installation

  14. 按Etner,選取Create/Modify Partition

  15. 確認使用GPT分割表

  16. 用鍵盤操作:鍵盤左右鍵移動到New,按Enter,輸入+512M,再輸入ef00變更分區類型為EFI。分區名稱設為efi,將第一個分區設為EFI分區。

  17. 鍵盤移動到Free Space,按Enter,選取New,全部按Enter,分區名稱輸入android,將第二個分區設為Linux系統分區。(可能因不對齊導致出現三個分區,不用理它)

  18. 鍵盤移動到Write,按Enter寫入變更。隨後移動至Quit退出。

  19. 選取分割好的硬碟vda2

  20. 將系統格式化為Ext4

  21. 安裝EFI/GRUB,並格式化

  22. 安裝後,點選Virt Manager的強制關機按鈕。從硬體列表移除CDROM

  23. 之後開機,選取第一個選項,預設便會載入virglrenderer加速的系統。如果你要測試沒有硬體加速的選項,請將QEMU顯示卡改成QXL,並在開機的時候選取VM Options → VBox/VMWare - No HW Acceleration開機。

Bliss OS內建Google Play商店,不用認證裝置,可直接登入Google帳號。

ARM轉譯器預設已啟用,不用手動安裝。

4. 如何修改Bliss OS螢幕解析度
#

  1. 在開機選單點選VM Options → Debug QEMU/KVM VirGL,進入Android shell

  2. 使用blikid指令查看EFI硬碟分區,通常是/dev/sda1

  3. 掛載EFI分區

mount /dev/sda1 /mnt
  1. 編輯android.cfg
cd /mnt/efi/boot

vi android.cfg
  1. 首先找到linux $kd/kernel這行,在最後面加入video=1920*1080。接著找到set gfxmode=這行,修改解析度。

  2. 重開機

umount /dev/sda1

reboot -f

另一種修改解析度的方法為安裝 SecondScreen再強制調整。

如果改解析度後滑鼠無法同步,那麼得準備第二隻滑鼠,再用Virt Manager的USB重新導向功能直通進去。

Virt Manager的視窗似乎無法反應Bliss OS虛擬機解析度的變化,導致畫面看起來依然糊糊的。

5. Bliss OS使用技巧
#

Bliss OS預設啟用Boringdroid的桌面模式,系統下方會常駐一條工作列。

如果有APP需要全螢幕執行,可在系統設定 → Boringdroid → Set full screen app選取。

Bliss OS預裝「Set Orientation」APP可強制旋轉螢幕,不過這個太老了,我認為 OHMAE Ryosuke的強制旋轉螢幕更好用。

截圖請按下滑選單擷取。至於螢幕錄影,virglrenderer錄出來顏色怪怪的,建議用電腦 OBS Studio擷取虛擬機視窗。

原生Android多視窗支援度不是很好,如果硬要的話可以在開發人員選項啟用「自由形式視窗」。

Bliss OS內建KernelSU和 Termux,Root權限並非全域啟用,需要對個別APP掛載。

虛擬機ADB連線我是參考 Reddit文章用無線連接的。如果要在ADB Shell啟用Root權限:開啟KernelSU授予「com.android.shell」權限即可。

6. 實際在Bliss OS玩遊戲
#

安裝遊戲建議使用原生支援x86架構的版本,Google Play應該會自動幫你過濾。若安裝ARM架構的APK會導致系統要花額外資源進行轉譯。

遊戲如果不偵測模擬器應該都開得起來,但部份遊戲播放影片會有問題,應該是virglrenderer的bug。試試在開機選單,使用Debugging選單下的hwcomposer.drm方式開機。

如果遊戲滑鼠點選沒反應,你可以在系統設定 → Blissify → Force Mouse Click as touch,強制將滑鼠點選事件轉譯成觸控點選。注意開啟此選項會導致滑鼠滾輪失效。

Bliss OS內建「遊戲模式」,在系統設定 → Blissify → Gaming Mode啟用。當使用者開啟遊戲APP的時候,便會自動停用通知,並出現懸浮按鈕方便截圖。

有些遊戲要用按鍵映射才能操作,你可以開啟KernelSU,授予XtMapper Root權限。接著開啟XtMapper,啟用服務,選取APP,設定按鍵綁定。

另外, QtScrcpy的按鍵映射也可以配合虛擬機使用。


為了測試Bliss OS轉譯器能耐,以下遊戲我全部用ARM-v8架構的APK測試。如果Google Play不給安裝,自行找APK。

《水果忍者》、《Temple Run 2》正常執行。

接著是《原神》,Waydroid可以跑,理論上Bliss OS應該也行才對…但virglrenderer不是很穩定,原神v4.1.0編譯著色器會崩潰。

另一款大型遊戲《幻塔》不用任何指令稿就能成功進入遊戲。

參考資料
#

相關文章

Android-x86 QEMU虛擬機安裝教學,在Linux上執行手機APP,支援GPU加速的VM
分類   資訊科技 虛擬機與容器技術
標籤   Android-X86 Linux QEMU-KVM VirGL Scrcpy
Linux KVM啟用巢狀虛擬化,在虛擬機裡面跑虛擬機
分類   資訊科技 虛擬機與容器技術
標籤   Libvirt QEMU-KVM Linux
Linux QEMU/KVM透過virglrenderer啟用虛擬機3D加速,免GPU直通
分類   資訊科技 虛擬機與容器技術
標籤   VirGL QEMU-KVM VirtIO

留言板

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

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

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。若要上傳圖片請貼Imgur或Postimages。