中文 | English
本项目用于通过 GitHub Actions 自动构建适用于 Droidspaces 的 Linux RootFS。构建流程基于 Dockerfile 模板,可以按需选择发行版、KDE 桌面规模、中文环境、输入法、GPU 加速、音频转发、TMOE、Docker、开发工具和 Wayland/Anland 支持。
项目目标是减少在 Android 设备上手动配置桌面 Linux 容器的工作量。你只需要 Fork 仓库,在 Actions 页面选择构建参数,等待 Release 产物生成,然后把 .tar.xz RootFS 导入 Droidspaces。
- 支持的系统
- 功能概览
- 构建选项说明
- 使用 GitHub Actions 构建
- 导入 Droidspaces
- 启动 KDE 桌面
- Wayland 和 Anland 配置
- DRI3 和 SELinux 问题处理
- 账户、密码和用户名修改
- 本地构建
- 仓库结构
- 已知限制
- 致谢
| 构建目标 | 基础镜像 | KDE 模式 | Wayland/Anland | 备注 |
|---|---|---|---|---|
Debian-13-KDE |
debian:trixie |
min、conc、mobile、none |
支持 | Debian 13 使用 Trixie 软件源。 |
Ubuntu-24-KDE |
ubuntu:24.04 |
min、conc、none |
不支持 | 支持 nosnap。 |
Ubuntu-25-KDE |
ubuntu:25.10 |
min、conc、none |
不支持 | 支持 nosnap。 |
Ubuntu-26-KDE |
ubuntu:26.04 |
min、conc、mobile、none |
支持 | 支持 nosnap,推荐用于 Anland KDE。 |
Fedora-43-KDE |
fedora:43 |
min、conc、mobile、none |
支持 | 某些设备需要启用硬件访问。 |
Arch-KDE |
ogarcia/archlinux |
min、conc、none |
不支持 | 内核建议 5.10 或更新;当前不建议使用本项目的 QEMU/binfmt 跨架构方案。 |
all 会构建全部 Dockerfile 模板。all-wayland 只构建支持 Wayland/Anland 的目标,也就是 Debian-13-KDE、Ubuntu-26-KDE 和 Fedora-43-KDE,并强制启用 Wayland 支持。
- 多发行版 RootFS 构建:支持 Debian、Ubuntu、Fedora 和 Arch。
- KDE 桌面可裁剪:支持命令行 RootFS、最小 KDE、精简 KDE 和移动版 KDE。
- Termux:X11 桌面启动:X11 模式下默认使用
DISPLAY=:5。 - PulseAudio 音频转发:支持 Unix socket、TCP 和关闭音频转发。
- 中文环境:可选启用
zh_CN.UTF-8和Asia/Shanghai时区。 - 输入法:可选安装 Fcitx5;启用中文环境时会额外安装中文输入支持。
- Snapdragon GPU 支持:集成来自
mesa-for-android-container的高通 GPU 相关配置。 - 容器增强:补充 Android/Droidspaces 环境下常见的硬件、网络和用户组识别配置。
- TMOE:可选集成 TMOE,容器内执行
tmoe即可启动。 - 开发工具:可选安装编译器、CMake、Python 开发环境等。
- 压缩工具:可选安装
zip、unzip、7z、xz、tar、gzip等工具。 - Docker:可选在 RootFS 内安装 Docker 相关软件包。
- Wayland/Anland:对 Debian 13、Ubuntu 26.04 和 Fedora 43 提供 patched KWin 与 Xwayland 包。
- Release 自动发布:构建完成后会把 RootFS
.tar.xz和对应的音频启动脚本上传到 GitHub Release。
GitHub Actions 的主要输入项如下:
| 选项 | 可选值 | 默认值 | 说明 |
|---|---|---|---|
选择要构建的发行版 (build_target) |
发行版目标、all、all-wayland |
Debian-13-KDE |
选择要构建的 RootFS。 |
自定义用户名 (custom_username) |
字符串 | Gold |
RootFS 默认用户。Release 中的音频启动脚本会同步替换该用户名。 |
KDE 桌面选择 (build_KDE) |
conc、min、mobile、none |
min |
KDE 桌面规模。none 表示只构建命令行环境。 |
KDE 桌面开机自启动 (build_KDE_plus) |
true、false |
true |
是否创建 KDE 自启动 systemd 服务。需要已安装 KDE;选择 none 桌面时应关闭。 |
Wayland 支持 (enable_anland_kde) |
true、false |
false |
是否启用 Wayland/Anland 支持。只支持 Debian 13、Ubuntu 26 和 Fedora 43。 |
PulseAudio 音频转发 (PulseAudio) |
socket、tcp、none |
socket |
X11 模式下的音频转发方式。启用 Anland 时会被强制改为 none。 |
使用中文语言和时区 (enable_zh_tz) |
true、false |
中文工作流默认为 true |
启用中文 locale 并设置上海时区。 |
高通骁龙 GPU 支持 (enable_mesa) |
true、false |
true |
启用高通 GPU/Mesa 相关支持。 |
集成 TMOE (enable_tmoe) |
true、false |
true |
集成 TMOE。 |
移除 Ubuntu Snap (nosnap) |
true、false |
false |
只对 Ubuntu 有意义,用于移除 Snap、snapd 和可能重新安装 snapd 的 APT 策略。 |
输入法 Fcitx5 支持 (enable_srf) |
true、false |
false |
安装 Fcitx5 输入法。 |
跨架构支持 (enable_binfmt) |
true、false |
false |
在 RootFS 内加入 binfmt 跨架构支持组件。Arch 当前不建议使用。 |
NAT 和硬件识别支持 (enable_yj) |
true、false |
true |
启用容器硬件和网络识别增强。 |
开发工具集成 (enable_kfgj) |
true、false |
false |
安装开发工具链。 |
压缩工具集成 (enable_zip) |
true、false |
true |
安装常用压缩工具。 |
Docker 集成 (enable_docker) |
true、false |
false |
在 RootFS 内安装 Docker 相关包。 |
构建 Wayland 预编译包 (build_wayland_packages) |
true、false |
false |
构建 RootFS 前触发 KWin/Xwayland 预编译包更新流程。 |
KDE 模式说明:
| 模式 | 说明 | 适合场景 |
|---|---|---|
none |
不安装 KDE 桌面,只保留命令行环境。 | 需要轻量 RootFS、SSH、开发环境或自定义桌面的用户。 |
min |
最小 KDE 桌面,包含 Plasma 基础组件和常用启动依赖。 | 想要较小体积且可用 KDE 桌面的用户。 |
conc |
精简但更完整的 KDE 桌面,包含更多系统工具、监控、文件管理和多媒体组件。 | 日常桌面使用。 |
mobile |
KDE Plasma Mobile 相关组件。 | 手机屏幕和触控优先场景;会强制启用 Wayland。 |
音频模式说明:
| 模式 | 说明 |
|---|---|
socket |
使用 Unix socket 转发 PulseAudio。通常延迟更低,推荐在 X11 模式下使用。 |
tcp |
使用 127.0.0.1:4713 转发 PulseAudio。兼容性较直观,但暴露面更大。 |
none |
不配置 PulseAudio。Anland 模式下会自动使用此模式,因为 Anland App 自带音频路径。 |
- Fork 本仓库到自己的 GitHub 账号。
- 打开 Fork 后仓库的
Actions页面。 - 选择中文工作流
编译并发布 Droidspaces RootFS,或英文工作流Build and Release Droidspaces RootFS。 - 点击
Run workflow。 - 选择发行版、KDE 模式、用户名和功能开关。
- 如果要使用 Wayland/Anland,建议选择
Ubuntu-26-KDE、Debian-13-KDE或Fedora-43-KDE,并开启enable_anland_kde。 - 如果希望先重新构建 patched KWin/Xwayland 包,再构建 RootFS,开启
build_wayland_packages。 - 等待 Actions 完成。构建时间取决于目标数量、KDE 模式和 GitHub runner 状态。
- 打开
Releases页面,下载生成的.tar.xzRootFS。
Release 通常包含:
- 一个或多个 RootFS 压缩包
- RootFS 文件名会按显示模式标记为
X11、Wayland或Mobile,例如Ubuntu-26-KDE-Mobile-Droidspaces-rootfs-aarch64-v20260702-120000.tar.xz。 - 当
PulseAudio为socket或tcp,且build_KDE_plus=false时,会附带on_aaudio_socket.sh或on_aaudio_tcp.sh。 - Release 正文会记录构建目标、KDE 模式、Wayland 开关、用户名和各功能开关。
- 在 Droidspaces 中创建或导入容器。
- RootFS 文件选择 Release 下载的
.tar.xz。 - 如果 RootFS 包含 KDE 桌面,必须在 Droidspaces 中开启 GPU 访问。
- Ubuntu 和 Debian 系建议在特权模式中开启
noseccomp,并确保内核启用USER_NS。否则某些桌面操作可能出现明显卡顿。 - Fedora 某些设备需要开启硬件访问,否则可能出现桌面闪屏或崩溃。
- Arch 建议宿主内核版本为 5.10 或更新。
- 如果使用 X11 模式,准备好 Termux:X11。
- 如果使用 Wayland/Anland 模式,按本文的 Wayland 和 Anland 配置完成宿主侧准备。
X11 模式适用于未启用 enable_anland_kde 的构建。默认环境变量为:
DISPLAY=:5
建议保持 build_KDE_plus=true,这也是当前默认选项。启用后 RootFS 会创建 KDE 自启动 systemd 服务,容器启动后会自动拉起桌面环境;只有需要使用 Termux 侧 on_aaudio_* 脚本手动启动桌面,或构建 none 命令行环境时,才建议关闭该选项。
如果 Release 中包含音频启动脚本,可以在 Termux 中使用它启动 PulseAudio、Termux:X11 和 KDE:
chmod +x on_aaudio_socket.sh
./on_aaudio_socket.sh或:
chmod +x on_aaudio_tcp.sh
./on_aaudio_tcp.sh使用脚本前需要检查脚本顶部变量:
CONTAINER_NAME="你的 Droidspaces 容器名"
USERNAME="你的 RootFS 用户名"
DISPLAY_NUMBER=":5"
DPI=315USERNAME 会在 Release 生成时按 custom_username 自动替换,但 CONTAINER_NAME 仍需要与 Droidspaces 中的容器名称一致。
如果不用脚本,也可以进入容器后手动启动:
startplasma-x11自启动的实际效果仍取决于 Droidspaces 的 systemd、权限和显示后端配置。如果自启动没有拉起桌面,可以进入容器后执行 startplasma-x11 排查。
Wayland/Anland 模式适用于启用 enable_anland_kde 的 Debian 13、Ubuntu 26 和 Fedora 43 构建。默认环境变量包括:
WAYLAND_DISPLAY=wayland-0
DISPLAY=:0
QT_QPA_PLATFORM=wayland
ANLAND=1
ANLAND_SOCKET=/run/display.sock
ANLAND_DRM_DEVICE=/dev/dri/renderD128
完成宿主侧 Anland 配置后,在容器内执行:
startplasma-waylandWayland 支持依赖 anland 以及本仓库内的 patched KWin/Xwayland 预编译包。建议使用 Ubuntu-26-KDE,也可以使用 Debian-13-KDE 或 Fedora-43-KDE。
推荐构建选项:
| 选项 | 推荐值 |
|---|---|
build_target |
Ubuntu-26-KDE |
build_KDE |
min、conc 或 mobile |
build_KDE_plus |
true |
enable_anland_kde |
true |
PulseAudio |
无需手动设置,启用 Anland 后会变为 none |
宿主侧配置步骤:
- 从 anland Releases 下载
virtual-drm-daemon.zip,刷入后重启设备。 - 从同一 Release 下载并安装
app-debug.apk。 - 导入 Droidspaces 容器时开启硬件访问。
- 开启 SELinux 宽容模式,或使用后文的精确 SELinux 策略修补。
- 在特权模式中开启
nocaps和noseccomp。 - 在高级选项中添加绑定挂载:
/data/local/tmp/display_daemon.sock -> /run/display.sock
- 启动容器,选择普通用户登录。
- 在容器内执行:
startplasma-wayland如果选择 mobile,工作流会强制启用 Wayland,因为 Plasma Mobile 在本项目中按 Wayland 路径配置。
如果启动图形环境时出现 DRI3 相关错误,通常是 SELinux 拦截导致 Droidspaces 与图形后端之间的文件描述符传递失败。可以选择以下任意一种方案。
以 KernelSU 为例,在 Android 宿主机 Root 终端执行:
/data/adb/ksud sepolicy patch "allow untrusted_app_27 droidspacesd fd use"这是推荐方案,影响范围较小。
先查看哪些应用属于 targetSdk 26 到 28:
/system/bin/dumpsys package packages | /system/bin/awk '/^ *Package \[/ {pkg=$2} /targetSdk=(26|27|28)$/ {print "App: " pkg " -> " $1}'确认风险可接受后执行:
/data/adb/ksud sepolicy patch "permissive untrusted_app_27"这个方案影响范围更大,只建议用于临时排障或明确知道风险的设备。
将设备 SELinux 状态切换为 Permissive。这个方案最简单,但安全边界最弱。
编辑宿主机中的:
/data/adb/modules/droidspaces/etc/droidspaces.te
找到:
# Termux related
# Only uncomment the line below if you encounter any problems about DRI3
# allow untrusted_app_27 droidspacesd fd use
取消最后一行注释,改为:
allow untrusted_app_27 droidspacesd fd use
保存后重启设备。
默认配置:
| 项目 | 默认值 |
|---|---|
| 用户名 | Gold,可通过 workflow 的 custom_username 修改 |
| 密码 | 1234 |
| Shell | /bin/bash |
建议导入后尽快修改密码:
passwd如需在构建后手动修改用户名,请在 root 用户下执行。假设旧用户名为 Gold,新用户名为 NewUser:
usermod -l NewUser Gold
usermod -d /home/NewUser -m NewUser
groupmod -n NewUser Gold
passwd NewUser如果启用了 KDE 自启动服务,还需要检查相关 systemd 服务中的用户和用户组:
/etc/systemd/system/plasma-x11.service
/etc/systemd/system/plasma-wayland.service
/etc/systemd/system/plasma-mobile.service
把其中的字段改为新用户名:
User=NewUser
Group=NewUser
修改后执行:
systemctl daemon-reload本项目主要面向 GitHub Actions,但也可以在本地使用 Docker Buildx 构建。你需要准备:
- Docker
- Docker Buildx
xz- 如果要跨架构构建,需要可用的 QEMU/binfmt 环境
原生架构构建示例:
chmod +x build_rootfs-native.sh
./build_rootfs-native.sh \
-i Debian-13-KDE.Dockerfile \
-v local \
-K min \
-L true \
-P socket \
-g true \
-a false \
-b true \
-c true \
-d false \
-e true \
-f false \
-h false \
-j true \
-n false \
-u Gold \
-A false使用 QEMU 构建 arm64 RootFS 示例:
chmod +x build_rootfs-qemu-aarch64.sh
./build_rootfs-qemu-aarch64.sh \
-i Ubuntu-26-KDE.Dockerfile \
-v local \
-K conc \
-L true \
-P none \
-g true \
-a false \
-b true \
-c true \
-d false \
-e true \
-f false \
-h true \
-j true \
-n true \
-u Gold \
-A true构建完成后会生成类似下面的文件:
Ubuntu-26-KDE-Wayland-Droidspaces-rootfs-aarch64-local.tar.xz
.
├── Arch-KDE.Dockerfile
├── Debian-13-KDE.Dockerfile
├── Fedora-43-KDE.Dockerfile
├── Ubuntu-24-KDE.Dockerfile
├── Ubuntu-25-KDE.Dockerfile
├── Ubuntu-26-KDE.Dockerfile
├── build_rootfs-native.sh
├── build_rootfs-qemu-aarch64.sh
├── scripts/
│ ├── bashrc.sh
│ ├── download-firmware
│ ├── enable_tp_ubwc.sh
│ ├── nosnap.sh
│ ├── on_aaudio_socket.sh
│ └── on_aaudio_tcp.sh
├── scripts/binfmt/
│ ├── qemu-binfmt-register.service
│ └── qemu-binfmt-register.sh
├── anland-build/
│ ├── Debian13/
│ ├── Fedora43/
│ └── ubuntu2604/
└── .github/workflows/
├── build-kde-wayland.yml
├── build-rootfs-releases-en.yml
├── build-rootfs-releases.yml
└── clear.yml
anland-build/ 存放 patched KWin 和 Xwayland 预编译包。build-kde-wayland.yml 可以重新构建这些包并提交回仓库。当前中文 RootFS workflow 文件名包含一个前导空格,路径为 .github/workflows/ build-rootfs-releases.yml。
- Wayland/Anland 当前只覆盖 Debian 13、Ubuntu 26 和 Fedora 43。
- Ubuntu 24、Ubuntu 25 和 Arch 当前按 X11 路径使用。
mobile模式只允许 Debian 13、Ubuntu 26 和 Fedora 43。- 启用 Anland 后,工作流会关闭 PulseAudio 转发,因为 Anland App 自带音频路径。
- Fedora 在部分设备上需要硬件访问,否则可能闪屏或崩溃。
- Ubuntu 和 Debian 在未启用
noseccomp或内核缺少USER_NS时,可能出现卡顿。 - 默认密码为
1234,导入后应立即修改。 - 本项目内置的预编译 Wayland 包与上游 anland 的兼容性取决于构建时的上游状态。
- Droidspaces-OSS:本项目运行环境的基础。
- mesa-for-android-container:高通 Snapdragon GPU 驱动支持。
- TMOE:容器内管理工具。
- anland:Wayland 显示后端和 patched KDE 相关工作。