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

• 12 分钟阅读 •

📌 环境准备

在 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 是刚需。


🧪 测试过程与问题排查

默认 Btrfs 存储驱动下遇到的问题

在使用默认 Btrfs 存储驱动时,遇到以下问题:

  1. 预制 Magisk 镜像:点击 Magisk 应用后自动卸载,无法正常获取 Root 权限
  2. 修改版镜像:无法正常启动
  3. redroid-script 自定义构建:基于官方镜像使用ayasa520/redroid-script添加 NDK + Magisk 后也无法启动
  4. 官方原版镜像:能够正常启动 ✅

💡 解决方案

AI 分析后指出,这些问题大概率是 Btrfs 存储驱动与 Redroid 镜像层的兼容性问题。将 Docker 存储驱动修改为 overlay2 后,以上所有问题全部解决:


🐳 镜像选择推荐

测试了大部分Android 11-13的镜像,个人感觉erstt/redroid系列镜像表现最优:

版本选择建议

版本 兼容性 资源占用 推荐场景
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)

Houdini 版本

androidboot.use_memfd=1 androidboot.redroid_net_ndns=1 androidboot.redroid_net_dns1=223.5.5.5 androidboot.redroid_width=720 androidboot.redroid_height=1280 androidboot.redroid_dpi=180 androidboot.redroid_fps=60 androidboot.redroid_gpu_mode=host androidboot.selinux=permissive androidboot.redroid_gpu_backend=mesa ro.product.cpu.abilist=x86_64,arm64-v8a ro.product.cpu.abilist64=x86_64,arm64-v8a ro.dalvik.vm.isa.arm64=x86_64 ro.enable.native.bridge.exec=1 ro.enable.native.bridge.exec64=1 ro.dalvik.vm.native.bridge=libhoudini.so

NDK 版本

androidboot.use_memfd=1 androidboot.redroid_net_ndns=1 androidboot.redroid_net_dns1=223.5.5.5 androidboot.redroid_width=720 androidboot.redroid_height=1280 androidboot.redroid_dpi=180 androidboot.redroid_fps=60 androidboot.redroid_gpu_mode=host androidboot.selinux=permissive androidboot.redroid_gpu_backend=mesa ro.product.cpu.abilist=x86_64,arm64-v8a ro.product.cpu.abilist64=x86_64,arm64-v8a ro.dalvik.vm.isa.arm64=x86_64 ro.enable.native.bridge.exec=1 ro.enable.native.bridge.exec64=1 ro.dalvik.vm.native.bridge=libndk_translation.so ro.ndk_translation.version=0.2.3

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 硬件加速 需要设备映射
androidboot.selinux=permissive SELinux 宽容模式 Magisk 需要
androidboot.redroid_gpu_backend=mesa Mesa 驱动 UHD 630 适用

GPU 后端说明:我使用的是 UHD 630 核显。如果是 N 卡或 A 卡androidboot.redroid_gpu_backend=mesa 这个参数删除即可。

转译层参数:根据镜像类型,在发布参数中添加对应的转译层参数(libhoudini.solibndk_translation.so)。

root@Tower:~# docker inspect redroid | grep -A 20 "Cmd"
            "Cmd": [
                "androidboot.use_memfd=1",
                "androidboot.redroid_net_ndns=1",
                "androidboot.redroid_net_dns1=223.5.5.5",
                "androidboot.redroid_width=720",
                "androidboot.redroid_height=1280",
                "androidboot.redroid_dpi=180",
                "androidboot.redroid_fps=60",
                "androidboot.redroid_gpu_mode=host",
                "androidboot.selinux=permissive",
                "androidboot.redroid_gpu_backend=mesa",
                "-",
                "ro.product.cpu.abilist=x86_64,arm64-v8a,x86,armeabi-v7a,armeabi",
                "ro.product.cpu.abilist64=x86_64,arm64-v8a",
                "ro.product.cpu.abilist32=x86,armeabi-v7a,armeabi",
                "ro.dalvik.vm.isa.arm=x86",
                "ro.dalvik.vm.isa.arm64=x86_64",
                "ro.enable.native.bridge.exec=1",
                "ro.enable.native.bridge.exec64=1",
                "ro.dalvik.vm.native.bridge=libhoudini.so"
            ],

🖥️ 客户端连接工具

安卓端

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。

阅读进度 0%