当 iPad 还在纠结”生产力”三个字怎么写的时候,你的安卓平板已经可以运行完整的 Debian 桌面了。
Hi,我是一只在平板上折腾 Linux 的开发者。
事情是这样的——前阵子我想把平板改造成便携开发机,结果发现这个领域远比我想象的热闹:chroot、proot、LXC、Docker、Termux……各种方案眼花缭乱。而其中最让我惊喜的,是一个叫 Droidspaces-OSS 的开源项目,它几乎解决了此前所有方案的致命缺陷。
今天这篇,我就把这堆方案的原理、优劣,以及 Droidspaces 为什么是”安卓跑 Linux 的终极形态”给你讲清楚。


)
一、安卓跑 Linux 的三种底层原理
首先要明白一个关键事实:Android 的内核就是 Linux 内核。这意味着你不需要像 Windows 跑 Linux 那样搞一层虚拟机,可以直接利用内核级别的特性,在 Android 之上运行另一个 Linux 用户空间。
目前主流的实现路径有三条:
1. Proot —— “假装改了根目录”
Proot 是最入门级的方案,代表性的就是 Termux + proot-distro。
原理很简单:Proot 通过 ptrace 系统调用拦截进程的所有文件操作,把 /data/data/com.termux/files/usr/var/lib/proot-distro/installed-rootfs/debian 这类路径”翻译”成容器内的 /。你执行 ls /etc,实际上访问的是 Android 存储里的某个子目录。
# 安装只需要一分钟pkg install proot-distroproot-distro install debianproot-distro login debian优点:不需要 Root,装个 Termux 就能用,门槛最低。
缺点: - 性能损耗显著:每次文件系统调用都要经过 ptrace 拦截,跑编译任务时慢得明显 - 没有真正的进程隔离:ps aux 能看到所有 Android 进程 - 不支持 systemd:没有 init 系统,服务管理全靠手动脚本 - 权限受限:很多需要真正 root 的操作做不了
2. Chroot —— “真的改了根目录”
Chroot 是 Linux 最古老的容器技术,也是安卓跑 Linux 的”经典方案”。代表工具是 Linux Deploy。
原理:利用 chroot() 系统调用,直接把某个目录变成新进程的根目录 /。再加上 mount --bind 把 /dev、/proc、/sys 挂载进去,一个能用的 Linux 环境就出来了。
# 手动 chroot 的核心步骤mount--bind /dev /data/linux/devmount--bind /proc /data/linux/procmount--bind /sys /data/linux/syschroot /data/linux /bin/bash优点: - 接近原生性能:共享内核,没有 ptrace 拦截,没有虚拟化开销 - 完整 Linux 体验:可以用 apt,可以编译代码,可以跑大部分 Linux 软件
缺点: - 需要 Root:没有 Root 权限做不到 mount --bind 和 chroot - 没有进程隔离:在 chroot 环境里 kill -9 1 会干掉整个 Android 的 init 进程 - 不支持 systemd:chroot 环境没有独立的 PID namespace,systemd 无法作为 PID 1 启动 - 安全堪忧:容器内的 root 就是宿主机的 root,一个 rm -rf / 能格掉整个系统
3. LXC / 容器方案 —— “内核级隔离”
LXC(Linux Containers)利用 Linux 内核的 namespace(命名空间) 和 cgroup(控制组) 两大特性,实现真正的资源隔离。Docker 的底层就是 LXC。
原理:Linux namespace 让容器拥有自己独立的 PID 空间、网络栈、挂载点、IPC 通道等。比如容器里的 PID 1 就是它自己的 init 进程,和宿主机的 PID 1 完全隔离。
优点: - 真正的进程隔离:容器内 ps aux 只能看到自己的进程 - 支持 systemd:有自己的 PID namespace,可以让 systemd 做 PID 1 - 完整的网络隔离:可以有独立的虚拟网卡、独立的路由表
缺点: - 依赖重:在 Android 上跑 LXC 或 Docker 需要 Termux + liblxc / dockerd,整套环境动辄几十 MB - 内核要求苛刻:需要内核开启大量配置项(namespace、cgroup、veth、bridge 等) - 持久化困难:卸载 Termux 或相关 App 会导致容器数据全部丢失
二、Droidspaces-OSS:为什么说它是”终极方案”
Droidspaces-OSS 是一个轻量级 Linux 容器运行时,由开发者 Ravindu Deshan(@ravindu644)维护,目前在 GitHub 上已有 1.3k+ Star。
它的核心定位一句话就能说清楚:既享受 LXC 级别的完整隔离,又没有 LXC 的臃肿依赖。
原理上,它做了什么?
Droidspaces 直接调用 Linux 内核的 namespace API(clone() + CLONE_NEWPID / CLONE_NEWNET / CLONE_NEWNS 等),用 C 语言写了一个不到 400KB 的静态编译二进制,不依赖 Termux、不依赖 liblxc、不依赖任何中间件。
Droidspaces 架构示意:┌──────────────────────────────────────┐│ Android App (Kotlin) │ ← 优雅的 GUI 管理界面├──────────────────────────────────────┤│ droidspaces (C, ~400KB) │ ← 零依赖静态二进制├──────────────────────────────────────┤│ Linux Kernel (Namespace + Cgroup) │ ← 直接使用内核能力└──────────────────────────────────────┘和其他方案的硬核对比
| ~400KB | ||||
| 零依赖 | ||||
| 零数据丢失 | ||||
| ✅ 支持 | ||||
| 原生 init.rc,不可杀死 | ||||
| Host / NAT / None | ||||
| VirGL / Turnip / llvmpipe | ||||
| ✅ 支持 TCP/UDP 范围 |
Droidspaces 独有的杀手级特性
1. 真正不可杀死的守护进程
Droidspaces 提供两种守护进程模式:最低层级的 init.rc 集成(Android 系统视其为系统服务,不可被杀死),以及用户空间守护进程。这意味着你的 Linux 容器不会因为 Android 的内存回收策略被意外终止。
2. 应用卸载 = 零数据丢失
所有容器数据存储在独立目录中,卸载 Droidspaces App 不会影响容器。重装 App 后可立即恢复——对比 Termux 方案一旦卸载就全军覆没。
3. Volatile 临时容器
利用 OverlayFS 实现”用后即焚”模式,所有更改存储在内存中,容器退出后自动丢弃。适合测试不明软件或临时跑一次性任务。
4. 三种 GPU 加速方案
- llvmpipe
:纯软件渲染,所有设备通用 - VirGL
:Mali/PowerVR GPU 虚拟化加速 - Turnip
:高通 Adreno GPU 原生加速
> 📥 GitHub 直链下载:curl -LO https://raw.githubusercontent.com/ravindu644/Droidspaces-OSS/main/Documentation/resources/gallery/2-containers_tab.png
三、快速上手:从零到跑起 Debian 桌面
前提条件
已解锁 Bootloader 的安卓设备(推荐高通平台) 内核版本 ≥ 3.18(推荐 5.15+) 已 Root(推荐 KernelSU) 内核必须满足 Droidspaces 的配置要求(后续第二篇详讲)
第一步:安装并检查
从 GitHub Releases 下载 APK 安装。
打开 App → 右上角设置 → 检查要求 → 确保全部绿色勾 ✅。
如果出现红色叉 ❌,说明内核缺少必要配置——这正是下一篇《内核编译篇》要解决的问题。
第二步:获取 rootfs
从 Linux Containers 镜像站 下载对应架构(一般为 arm64)的 rootfs 镜像,推荐 Debian 13(Trixie),兼容性最好。
你也可以使用社区大佬打包好的成品 rootfs,预装桌面环境和 GPU 驱动,开箱即用。
第三步:创建并启动容器
切换到”容器”页面 → 右下角加号 选择下载好的 rootfs 镜像 命名容器 → 设置主机名 - 强烈建议开启”挂载存储”
,容器内直接访问平板文件 网络模式选 NAT(默认),端口转发根据需要配置(如 SSH --port 22:22)
第四步:连接桌面
Droidspaces 从 v6.3.0 起自动启动 Termux:X11 X 服务器和 VirGL。安装 Termux:X11 App 后,启动容器即可看到 XFCE 桌面。
# 进入容器终端droidspaces exec 你的容器名 /bin/bash# 安装桌面环境(如果 rootfs 不带)apt update &&apt install xfce4 xfce4-goodies -y写在最后
曾经在平板上跑 Linux,要么牺牲性能用 Proot,要么忍受各种奇怪 bug 用 Chroot。Droidspaces 用不到 400KB 的二进制,做到了此前需要几十 MB 依赖才能实现的完整容器隔离。
它不是”更好的 Chroot”,而是 “Android 原生的 Docker”——轻、快、稳。
下一篇,我将详解如何为你的小米设备编译适配 Droidspaces 的 GKI 内核。不出意外的话,这将是你能找到的最详细的中文教程。
关注我,别走丢。
参考项目地址:https://github.com/ravindu644/Droidspaces-OSS
夜雨聆风