Unraid 7.3.1 上 Redroid 容器部署完整指南

redroid unraid

📌 环境准备

在 Unraid 7.3.1 版本上实践,无需任何额外修改和安装插件,默认内核已集成相关依赖。
只需要在 Boot Parameters → Custom ParametersAdd Custom Parameter 添加 psi=1,然后保存重启即可激活所有环境。

root@Tower:~# cat /proc/pressure/*
some avg10=1.65 avg60=1.82 avg300=1.20 total=355489358
full avg10=0.00 avg60=0.00 avg300=0.00 total=0
some avg10=0.20 avg60=0.25 avg300=0.59 total=347818195
full avg10=0.18 avg60=0.19 avg300=0.50 total=328382926
some avg10=0.00 avg60=0.00 avg300=0.00 total=0
full avg10=0.00 avg60=0.00 avg300=0.00 total=0

⚠️ 重要注意事项

Root 权限需求判断

根据你是否需要 Root 权限,选择不同的 Docker 存储驱动:

场景 Docker 存储驱动 说明
不需要 Root Btrfs(默认) 可直接运行官方原版镜像
需要 Root(游戏辅助/修改器) overlay2 必须修改,否则镜像无法正常工作

我玩的游戏大航海时代:传说需要使用辅助工具,所以 Root 是刚需。


🧪 测试过程与问题排查

  1. 自制 Magisk 镜像:点击 Magisk 应用后崩溃自动卸载(redroid-script回滚git checkout 881f7f00d6a86af4f8e4947af5d587a144a1806c 可解决)
  2. 官方原版镜像:能够正常启动 ✅

💡 解决方案

AI 说 Btrfs 存储驱动与 Redroid 镜像层的兼容性问题。将 Docker 存储驱动修改为 overlay2 后,能纠结奇奇怪怪的问题,那就先听他狡辩改成这个先

  • 所有镜像正常启动
  • 预制 Magisk 镜像正常启动
  • Root 权限正常工作

🐳 镜像选择推荐

测试了大部分Android 11-13的镜像,个人感觉erstt/redroid系列镜像表现最优:
自用Android 11新版本转译层镜像,稳定性不保证s1oz/redroid
ARM 兼容层 (Houdini): 内置 Houdini version 14.0.0_z.GoogleGame_com1.2

ARM 兼容层 (NDK): 内置 NDK Translation Version 0.2.3

版本选择建议

版本 兼容性 资源占用 推荐场景
Android 11 ✅ 更好 ⬇️ 更低 挂机优选,scrcpy 兼容性更好
Android 13 ⚠️ 略差 ⬆️ 略高 部分新游戏可能需要

转译层选择

镜像 转译层 适用平台 说明
erstt/redroid:11.0.0_houdini_magisk_ChromeOS Houdini Intel 优选 Intel CPU 优化,兼容性更广
erstt/redroid:11.0.0_ndk_magisk_ChromeOS NDK Translation AMD 优选 兼容性好,部分场景下性能更优

个人推荐:intel处理器优先使用 houdini 版本,如遇到游戏兼容性问题再切换至 ndk 版本。


📦 Unraid容器创建步骤

1. 基本配置

配置项
存储库 erstt/redroid:11.0.0_houdini_magisk_ChromeOS
额外参数 -itd -m 16G --memory-swappiness=0
网络类型 Bridge
特权 开启
映射端口 5555:5555
持久化目录 /mnt/system/appdata/redroid:/data
设备 /dev/dri

2. 发布参数(Extra Parameters)

⚠️ 隐私与封号警告: 启动参数中的设备 IMEI (ro.ril.oem.imei) 和序列号 (ro.serialno) 已被我替换为安全占位符(如 <YOUR_IMEI>)。为了防止设备被应用封禁或出现 Google Play 未认证错误,请务必在运行前将其修改为您自己生成的随机数字或真实值。

⚠️ 转译层 (ro.dalvik.vm.native.bridge) 已被我替换为安全占位符(如 <houdini or ndk>)根据下载镜像选择填写libndk_translation.solibhoudini.so

  androidboot.use_memfd=1 androidboot.redroid_net_ndns=2 androidboot.redroid_net_dns1=223.5.5.5 androidboot.redroid_net_dns2=119.29.29.29 androidboot.redroid_width=720 androidboot.redroid_height=1280 androidboot.redroid_dpi=180 androidboot.redroid_fps=30 androidboot.redroid_gpu_mode=host androidboot.selinux=permissive ro.board.platform=msm8150 ro.product.cpu.abilist=x86_64,arm64-v8a,x86,armeabi-v7a,armeabi ro.product.cpu.abilist64=x86_64,arm64-v8a ro.dalvik.vm.isa.arm64=x86_64 ro.product.cpu.abilist32=x86,armeabi-v7a,armeabi ro.enable.native.bridge.exec=1 ro.enable.native.bridge.exec64=1 ro.dalvik.vm.native.bridge=<houdini or ndk> ro.product.model="Pixel 4" ro.product.brand="google" ro.product.name="flame" ro.product.device="flame" ro.product.manufacturer="Google" ro.build.type=user ro.build.flavor="flame-user" ro.build.tags=release-keys ro.build.fingerprint="google/flame/flame:11/RQ3A.210805.001.A1/7481738:user/release-keys" ro.boot.flash.locked=1 ro.ril.oem.imei=<YOUR_IMEI> ro.ril.oem.imei1=<YOUR_IMEI> ro.ril.oem.imei2=<YOUR_IMEI> ro.ril.oem.sno=<YOUR_SERIAL> ro.serialno=<YOUR_SERIAL> gsm.sim.operator.alpha="CMCC" gsm.sim.operator.numeric="46000" gsm.operator.alpha="CMCC" gsm.operator.numeric="46000"

3. 配置说明

参数 作用 备注
androidboot.use_memfd=1 使用 memfd 替代 ashmem 高版本内核必需
androidboot.redroid_net_dns1=223.5.5.5 DNS 解析(阿里 DNS) 可按需修改
androidboot.redroid_width/height/dpi 分辨率 & DPI 可按需调整
androidboot.redroid_fps=60 系统帧率上限 游戏内可另设
androidboot.redroid_gpu_mode=host 硬件加速 需要设备映射

添加UHID支持

Unraid 实现开机自动加载

nano /boot/config/go
添加
modprobe uhid

Redroid 添加参数

--device=/dev/uhid:把宿主的 /dev/uhid 映射进容器
androidboot.redroid_enable_input_subsys=1:启用 redroid 的输入子系统

Magisk 模块添加脚本

adb shell
su
mkdir -p /data/adb/modules/uhidfix
cd /data/adb/modules/uhidfix

cat > module.prop << 'EOF'
id=uhidfix
name=UHID Permission Fix
version=1.0
versionCode=1
author=you
description=Auto chmod 666 /dev/uhid for scrcpy HID
EOF

cat > service.sh << 'EOF'
#!/system/bin/sh
for i in $(seq 1 30); do
    if [ -e /dev/uhid ]; then
        chmod 666 /dev/uhid
        chmod 666 /dev/uinput
        exit 0
    fi
    sleep 1
done
EOF

chmod 755 service.sh

🖥️ 客户端连接工具

安卓端

Screen-Remote

迭代了好几个版本,现在体验完胜其他方案。

Windows 端

工具 用途 链接
scrcpy-gui 连接及远程操作 kil0bit-kb/scrcpy-gui
QtScrcpy 可映射方向键,用键盘控制行走 barry-ran/QtScrcpy

输入法推荐

搜狗输入法 — 兼容性不错,在 Redroid 环境下表现稳定。


🎮 游戏按键映射示例

《大航海时代:传说》QtScrcpy 映射脚本

将以下内容另存为 JSON 文件,放入 QtScrcpy\keymap 目录,刷新脚本后点击应用即可。按 ~(反引号)开启/关闭映射。
这样就能键盘控制角色移动了,上班摸鱼更方便了!

{
  "switchKey": "Key_QuoteLeft",
  "keyMapNodes": [
    {
      "comment": "虚拟摇杆 - WASD 控制移动",
      "type": "KMT_STEER_WHEEL",
      "centerPos": {
        "x": 0.1498,
        "y": 0.7489
      },
      "leftOffset": 0.11468,
      "rightOffset": 0.11381,
      "upOffset": 0.19237,
      "downOffset": 0.20701,
      "leftKey": "Key_A",
      "rightKey": "Key_D",
      "upKey": "Key_W",
      "downKey": "Key_S",
      "switchMap": false
    },
    {
      "comment": "空格键 - 交互/确认",
      "type": "KMT_CLICK",
      "pos": {
        "x": 0.9061,
        "y": 0.8195
      },
      "key": "Key_Space",
      "switchMap": false
    }
  ],
  "width": 1064.4285888671875,
  "height": 622.857177734375
}

按键说明

按键 功能
W / A / S / D 控制角色移动(虚拟摇杆)
Space(空格) 交互 / 确认点击
`(反引号) 切换映射开关

📝 总结

  1. 环境准备:Unraid 7.3.1 默认内核已就绪,只需添加 psi=1 重启
  2. 存储驱动:需要 Root → 使用 overlay2;不需要 Root → Btrfs 即可
  3. 镜像选择:intel推荐 erstt/redroid:11.0.0_houdini_magisk_ChromeOS
  4. 性能调优:根据硬件调整 CPU-GPU 参数,例如降低分辨率,降低刷新率等操作,intel核显用 mesa,独显删除该参数
  5. 客户端:安卓用 Screen-Remote,Windows 用 QtScrcpy/scrcpy-gui

📌 常见问题

Q:为什么必须用 overlay2?

A:Btrfs 与 Redroid 多层镜像文件存在兼容性问题,导致 Magisk 镜像无法正常启动。

Q:Android 11 和 13 怎么选?

A:挂机优选 Android 11,兼容性更好,资源占用更低。scrcpy 连接也更稳定。

Q:Houdini 和 NDK 怎么选?

A:Intel CPU 优先 Houdini,如遇游戏兼容性问题再切换 NDK。AMD CPU 优先 NDK。