快轉到主要內容

於樹莓派5部署Android雲手機「ReDroid」,透過Scrcpy遠端控制

分類   Linux系統 Self-hosting自架
標籤   ReDroid Raspberry Pi Cloud Gaming
🗓️ 民國113年 甲辰年
✍ 切換正體/簡體字
目錄

ReDroid為一款開源雲手機解決方案,讓你將Android系統部署在x86與ARM架構的Linux電腦,遠端控制Android玩遊戲。

使用Scrcpy遠端連線到ReDroid容器畫面,執行遊戲

ReDroid得透過Docker部署,啟動速度十分之快,待機狀態下不太吃資源,效能可跟基於LXC的Waydroid相比,還支援多開。

為何要用ReDroid呢?因為它本來就是設計給遠端存取用的,較適合headless伺服器環境,不像 樹莓派跑Waydroid需要顯示器才能輸出。

之前寫過 x86電腦部署ReDroid的教學,這裡要用ARM架構的樹莓派。相較於x86架構電腦,ARM架構的優勢是不需要libhoudini轉譯器就能執行大多數手機的APP。並且從 樹莓派5跑LineageOS系統的跑分來看,樹莓派5的處理器效能已接近一台中低階Android手機,玩一些不吃效能的手遊完全是夠的。

影片演示:

1. 環境
#

  • Raspberry Pi 5 8GB
  • Raspberry Pi OS (Debian 12 Bookworm)
  • 核心版本:Linux raspberrypi5 6.6.42-v8+
  • 無接上顯示器

考慮到Raspberry Pi常常是headless運作的,所以得準備另一台電腦或手機,利用Scrcpy無線控制的方式遠端存取Android桌面。

不過在開始下一步之前,建議執行以下指令確認GPU加速是否正常,驅動應會顯示V3DV Mesa

vulkaninfo --summary

2. 前置作業
#

根據 ReDroid文件的部署需求,Linux必須啟用binder核心模組,並且要啟用4K Pages、PSI。

  1. zcat /proc/config.gz指令的輸出來看,Raspberry Pi 5的核心已經啟用BINDER設定了,所以不用安裝binder核心模組
sudo modprobe configs

zcat /proc/config.gz | grep BINDER

# 輸出
CONFIG_ANDROID_BINDER_IPC=y
CONFIG_ANDROID_BINDERFS=y
CONFIG_ANDROID_BINDER_DEVICES="binder,hwbinder,vndbinder"
  1. Raspberry Pi 5預設是使用16K Pages,透過調整開機設定檔啟用4K Pages
echo '# 4k pages
kernel=kernel8.img
'| sudo tee -a /boot/firmware/config.txt
  1. 啟用PSI
sudo sed --follow-symlinks -i 's/quiet/psi=1 quiet/g' /boot/firmware/cmdline.txt
  1. 重開機,確認4K Pages與PSI狀態
getconf PAGESIZE

ls /proc/pressure
  1. 如果有裝Waydroid,不要讓它開機自動啟動
sudo systemctl stop waydroid-container

sudo systemctl disable waydroid-container

3. 給ReDroid映像檔安裝GAPPS
#

ReDroid作者上傳的映像檔全部都是原生系統。

關於安裝GAPPS的指令稿,我用這個安裝 ayasa520/redroid-script,但作者似乎只有考慮到x86_64的狀況,所以稍做修改,改成下載arm64的版本。

改用這個比較新的指令稿: abing7k/redroid-script安裝。

作者還有提供 abing7k/redroid:a11_gapps_arm打包好的映像檔可以直接用,但是GPU加速似乎有問題。

4. 部署ReDroid容器
#

  1. 安裝Docker

  2. 新增存放資料的目錄

mkdir ~/redroid
cd redroid
  1. 新增docker-compose.yml
vim docker-compose.yml
  1. 內容如下:
version: "3"
services:
  redroid:
    # 使用Android 11映像檔
    image: redroid/redroid:11.0.0-latest
    stdin_open: true
    tty: true
    privileged: true
    # ADB通訊埠
    ports:
      - "5555:5555"
    volumes:
    # 資料目錄
      - ./redroid-11-data:/data
    command:
    # 解析度
      - androidboot.redroid_width=1080
      - androidboot.redroid_height=2160
      - androidboot.redroid_dpi=439
      - androidboot.redroid_fps=60
    # 啟用GPU硬體加速
      - androidboot.redroid_gpu_mode=host
  1. 啟動容器
sudo docker compose up -d
  1. 取得樹莓派的區域IP
ip addr

5. 使用Scrcpy存取ReDroid桌面
#

這裡我使用電腦版的Scrcpy,若要方便其他裝置存取,可於樹莓派部署網頁版的 ws scrcpy,透過瀏覽器連線。

  1. 安裝 Scrcpy與ADB工具

  2. 讓電腦與樹莓派位於同一個區網,將ADB與樹莓派連線

abd connect 樹莓派IP:5555
  1. 啟動Scrcpy,遠端連線可能會lag,所以限制畫質
scrcpy -m 1080 -b 5M --audio-codec=aac
  1. 這樣就能看到Android桌面了。

  2. 如果GPU加速有正常運作,那麼「AIDA64」APP應當能抓到樹莓派的GPU型號。

  3. 現在Scrcpy只能透過區網連線,接下來只要再於樹莓派 部署內網穿透服務,就能從外面的網路隨時連線到樹莓派上的雲手機了!

相關文章

ReDroid多開雲手機,Scrcpy連線到複數個Docker容器的作法
分類   Linux系統 Self-hosting自架
標籤   Cloud Gaming ReDroid Scrcpy
自建Android雲手機之樹莓派5刷LineageOS + Play商店
分類   Linux系統 Self-hosting自架
標籤   Cloud Gaming Raspberry Pi Scrcpy
用RustDesk連線到headless的樹莓派Linux伺服器
分類   Linux系統 Self-hosting自架
標籤   RustDesk Remote Deskop Linux X Window Raspberry Pi

留言板

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

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

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