☰
安卓手机免root安装Ubuntu:Termux与proot-distro实战
2026/10/1 4:19:17 网站建设 项目流程

在安卓手机上跑一个完整的 Ubuntu 环境,这件事我从 Android 7 时代的旧机器一直折腾到现在的 Android 14 设备,踩过的坑足够写满一个笔记本。核心方案其实就一个词:Termux 配合 proot-distro 把 Ubuntu 的 rootfs 拉下来,整个过程不需要 root 权限,不需要解锁 Bootloader,也不会影响手机保修。装好之后你手上就有了一台可以随身携带的 Linux 主机:gcc、Python、Docker 客户端、数据库、SSH 服务都能跑,配合蓝牙键盘和一块外接屏,临时改代码、跑脚本、做实验完全够用。这篇内容适合三类人:一是想在通勤路上练 Linux 命令的初学者,二是需要随时随地有个干净环境做验证的后端和运维,三是手上只有一台手机、想低成本入门的同学。下面我按真实操作顺序,把每一步的意图、参数含义和易错点全部摊开讲。

1. 安卓上的 Linux 环境,方案到底怎么选

1.1 三条路线的本质区别

在安卓上得到 Linux 命令行,市面上的做法可以归成三类,理解它们的差别比记住命令更重要。第一类是Termux 原生环境,它本身就是一个带包管理器的终端模拟器,通过 apt 风格的pkg安装软件。优点是启动快、占用低、和安卓系统贴合好;缺点是软件包经过 Termux 团队重新编译,路径体系(/data/data/com.termux/files/usr)和标准 Linux 完全不同,很多教程里的命令直接照抄会失败。第二类是proot 容器方案,也就是proot-distro,它在用户空间模拟出 chroot 的效果,把一份官方的 Ubuntu rootfs 解压到 Termux 的私有目录里跑起来。这一类的关键优势是文件系统布局与真实 Ubuntu 完全一致:/usr、/etc、/var都在它该在的位置,apt 装包、systemd 之外的 init 脚本、环境变量配置都能按标准教程走。第三类是真 chroot / 容器方案,需要设备已经 root,用chroot或 Linux 内核的 namespace 隔离能力,性能最好,但没有 root 就用不了。

我强烈建议绝大多数人走第二条路。原因很直接:你要的是"一个 Ubuntu",而不是"一个像 Ubuntu 的东西"。proot-distro 提供的镜像来自官方 rootfs 压缩包,apt 源、软件包依赖关系、默认 shell 配置都是原汁原味的。你在网上找到的任何 Ubuntu 教程,只要不涉及内核模块和 systemd 服务管理,大概率可以直接照做。

1.2 为什么最终落在 proot-distro 上

有人会问,Termux 原生环境也能装 gcc、python、node,为什么还要多套一层?这里有个很现实的取舍。Termux 的包仓库虽然庞大,但某些重量级软件根本没有移植版本,或者版本严重滞后。举几个我实际遇到的例子:想在手机上跑一个老版本的 PHP 7.4 配合特定扩展,Termux 源里只有新版;想复现某个项目的 Dockerfile 里apt-get install那一串依赖,Termux 的包名对不上;想在本地复现一个 Ubuntu 22.04 服务器上的 bug,环境差异导致问题根本复现不出来。这时候 proot 的价值就出来了——它给你的是一个可丢弃、可重建、和服务器同构的环境,搞炸了直接proot-distro reset重来,三十秒恢复干净状态。

另一个容易被忽略的点是版本自由度。proot-distro 的镜像列表里通常包含多个 Ubuntu 版本,你在 Termux 里敲一行proot-distro list就能看到当前支持哪些发行版和版本号。这意味着你可以在同一台手机上同时装 Ubuntu 22.04 和 24.04,分别对应不同的项目环境,互不干扰。这种"一个项目一个环境"的隔离思路,和服务器上用容器做环境隔离是完全一致的工程习惯。

性能方面要有个心理预期。proot 的实现原理是拦截系统调用并做路径翻译,这层翻译会带来额外开销。实测在骁龙 8 系芯片上,编译中小型 C 项目、跑 Python 脚本,体感和一台入门级云服务器差不多;但如果是长时间高负载编译(比如从源码编 Chromium 那种量级),发热和降频会明显拖慢速度。日常使用完全够,重活还是交给电脑。这一点先想清楚,能省掉后面很多"为什么这么慢"的困惑。

2. 开工前的环境准备与基础配置

2.1 Termux 的获取渠道与系统版本门槛

获取 Termux 的正确渠道只有一个方向:从项目官方发布的渠道获取 APK。不要去各种第三方应用市场下载所谓的"增强版""汉化版",这些版本往往被改过签名、塞了额外脚本,或者打包了来路不明的二进制文件,轻则无法更新,重则直接读取你的隐私数据。官方发布渠道上会同时提供多个架构的 APK,现代手机基本选arm64-v8a或通用的universal版本,老设备才需要考虑armeabi-v7a。

这里必须提醒一个硬门槛:新版本的 Termux 对安卓系统版本有最低要求,官方的新版本通常要求 Android 7.0 及以上。手上如果是 Android 5.1 或 6.0 的老机器,装最新 APK 会直接安装失败或者启动即崩溃,只能去找历史归档版本。但要注意,老版本 Termux 自带的包仓库地址往往已经失效或签名不匹配,pkg update大概率报错。我在一台 Android 5.1 的旧平板上试过,结论是:能用,但非常勉强,很多新包(尤其是较新的 Python、Node 版本)根本装不上,proot-distro 这类较新的软件也可能因为依赖不满足而无法安装。如果你的设备低于 Android 7,我建议要么放弃,要么把期待值降到"能跑基础 shell 脚本"这个级别。

安装完成后第一次启动,Termux 会花几秒到几十秒做初始化,把基础文件系统解压到应用私有目录。这一步不要中途退出,否则可能出现文件不完整、pkg命令找不到的诡异状态。如果真遇到了,最干净的处理方式是清除应用数据重来,比重装 APK 更有效。

2.2 换源、升级与基础工具链

初始化完成后第一件事是换源。默认源在部分网络环境下速度极慢,甚至频繁超时。Termux 提供了一个很贴心的交互式工具:

pkg install root-repo x11-repo pkg update pkg upgrade -y

其中root-repo和x11-repo这两个附加仓库后面装图形界面时用得上,现在加上省得后面再折腾。如果pkg update卡在下载索引阶段,可以执行termux-change-repo,它会弹出一个文本界面让你选镜像站,选地理位置近的通常能把速度提升一个数量级。

接下来装一批基础工具,这些是后面几乎所有操作的依赖:

pkg install -y git curl wget nano vim openssh proot-distro

proot-distro就是本次的主角。openssh是 Termux 侧的 SSH 客户端和服务器,后面从电脑连手机要用。装完之后建议立刻做两件事:一是pkg install -y termux-api(如果你打算用脚本调用手机硬件能力),二是配置 Termux 的 SSH 免密登录,把自己电脑的公钥写进~/.ssh/authorized_keys,这一步能省掉以后每次输密码的麻烦。

注意:不要试图在 Termux 里执行su。热词里出现的那条no su program found on this device报错是正常现象——Termux 本身不提供、也不依赖 root 提权,它的所有功能都设计成在普通应用权限下工作。看到这个提示不用慌,说明你的设备状态是"干净的",反而更安全。

2.3 存储权限与终端交互体验调优

默认情况下 Termux 只能访问自己的私有目录,想读写手机共享存储(比如把代码文件从电脑拷进手机)需要显式授权:

termux-setup-storage

执行后会弹出系统权限对话框,同意之后会在~/storage下生成一组软链接,指向相机、下载、文档等目录。这个操作的原理是 Termux 通过 Android 的存储访问框架拿到授权,然后把外部路径映射进自己的 home。

交互体验上有几个我强烈建议开启的设置。音量减键加 Q 可以呼出扩展按键栏,里面有 ESC、CTRL、方向键这些手机软键盘上没有但命令行高频使用的键。另外~/.termux/termux.properties里可以配置extra-keys,自定义按键布局。我个人的配置是把ESC、TAB、CTRL、ALT、-、/、|放在最顺手的位置,写 shell 脚本时效率提升非常明显。字体大小和配色也在这里调,长时间看屏幕的话建议把字号调到 14 以上,避免眼睛疲劳。

3. 用 proot-distro 把 Ubuntu 装进手机

3.1 镜像列表与版本选择

装好 proot-distro 后,第一件事是看看它现在支持哪些发行版:

proot-distro list

输出会分成两块:上面是可用镜像列表,下面是已安装的发行版。你会看到 Ubuntu 有多个版本条目,通常包括 LTS 版本和最新的常规版本。选哪个版本,取决于你要干什么:

版本类型适用场景体积与资源占用
长期支持版(LTS)稳定开发、长期维护的项目、对照服务器环境中等,兼容性最好
最新常规版尝鲜新工具链、新语言版本略大,部分老软件源缺失
轻量发行版(Alpine 等)只想要个精简 shell、极致省空间最小,但 glibc 生态兼容差

我的建议是默认选 LTS。原因很实在:服务器上跑的大多也是 LTS,本地和线上版本对齐能避免大量"在我这能跑"的问题;而且 LTS 的软件源稳定,不会因为版本更替导致某个包突然消失。如果你只是想装个 Ubuntu 用一下,无脑选 LTS 就对了。

另外注意架构问题。绝大多数现代安卓手机是aarch64,proot-distro 会自动匹配正确的镜像。如果你出于特殊目的需要跑 x86_64 的二进制(比如某个只有 x86 版本的老软件),可以通过--architecture参数配合 qemu 模拟,但性能会下降一个数量级,只适合做兼容性验证,不适合日常使用。

3.2 下载安装与首次登录

安装命令很简洁:

proot-distro install ubuntu

这里有个容易卡住的地方——镜像下载走的是 GitHub Releases,网络条件不好的时候会非常慢甚至中断。如果卡住了,比较稳妥的做法是换个时间段重试,或者先在 Termux 里配置好网络代理环境变量(仅指 HTTP 代理,用于加速公开资源下载),再重新执行。中断后重新执行install命令,它会自行判断并重新下载,不需要手动清理(如果确实出现残留,用proot-distro remove ubuntu清掉重来)。

安装完成后登录:

proot-distro login ubuntu

进去之后你看到的提示符应该类似root@localhost:~#。这时候先做个体检,确认环境是对的:

cat /etc/os-release uname -m apt update

/etc/os-release会告诉你确切的 Ubuntu 版本号,uname -m显示架构(注意这里显示的可能是aarch64或armv8l,取决于 proot 的翻译层)。如果apt update能正常拉到索引,说明基础环境已经就绪。

退出登录直接敲exit。想再次进入就再执行一次proot-distro login ubuntu。这里有个非常实用的技巧:每次登录时带上--user参数可以指定用户,带上--bind可以把 Termux 的目录挂进 Ubuntu:

proot-distro login ubuntu --bind /data/data/com.termux/files/home:/mnt/termux-home

这样一来,你在 Termux 里下载的代码、配置文件,在 Ubuntu 里通过/mnt/termux-home就能直接访问,不用在两套文件系统之间来回拷贝。这个绑定是我认为整个 proot 方案里最提效的一个功能,务必用起来。

3.3 用户、密码与中文环境

默认登录的是 root 用户,这在容器里日常用没问题,但如果你打算跑一些对权限敏感的服务(比如 SSH、数据库),建一个普通用户更规范:

adduser dev usermod -aG sudo dev apt install -y sudo

建好之后用proot-distro login ubuntu --user dev登录。注意 proot 环境里 sudo 的行为和真机略有差异,某些需要设置 UID 的操作可能报权限错误,这是用户空间模拟的固有限制,遇到时直接切回 root 处理即可。

中文环境配置这块,我给一个务实建议:在 proot 的 Ubuntu 里装中文输入法基本没有意义。热词里"Ubuntu 中文输入法怎么设置""搜狗输入法 Ubuntu 安装"这类需求,在桌面 Ubuntu 上确实值得折腾,但在手机 proot 环境里,你输入文字是通过安卓系统的输入法进行的,Ubuntu 内部根本没有接管输入事件的权限。所以那些 fcitx、ibus 的安装教程在这里可以直接跳过,装完也调不出来。

真正需要配置的是locale,也就是字符编码环境,否则某些程序输出中文会乱码:

apt install -y locales sed -i 's/# zh_CN.UTF-8/zh_CN.UTF-8/' /etc/locale.gen sed -i 's/# en_US.UTF-8/en_US.UTF-8/' /etc/locale.gen locale-gen

然后在~/.bashrc里加上:

export LANG=zh_CN.UTF-8 export LC_ALL=zh_CN.UTF-8

改完执行source ~/.bashrc生效。顺手把 apt 源换成延迟更低的镜像站(编辑/etc/apt/sources.list,把默认的官方地址替换成就近镜像),这能让后续所有装包速度提升好几倍,属于一次投入长期受益的操作。

3.4 图形界面:要不要装,怎么装

命令行够用的话,我建议别急着装图形界面。原因有三:一是 proot 环境下没有 GPU 直通,桌面渲染全靠软件光栅化,滑动窗口的流畅度大概相当于十几年前的电脑;二是多一个 X 服务会额外吃掉几百 MB 内存和可观的电量;三是配置链路上坑很多,热词里的"xfce4 黑屏"就是这个环节的典型症状。

但如果你确实需要图形界面(比如要看图表、用浏览器、跑 GUI 工具),可行路径是XFCE4 + VNC或者Termux:X11 应用配合 X11 仓库的包。后者是更新的方案,体验更好,原理是在安卓侧提供一个 X 服务器显示端,把 Ubuntu 里的窗口渲染到安卓的原生视图层上。大致流程是:在 Termux 里执行pkg install x11-repo和pkg install termux-x11-nightly,安装配套的显示端应用,然后在 Ubuntu 里装好桌面环境和dbus-x11,启动时先拉起 X 服务再启动桌面会话。

如果走 VNC 路线,核心动作是在 Ubuntu 内装tigervnc-standalone-server和桌面环境,配置~/.vnc/xstartup脚本指向 xfce4-session,然后用vncserver启动,最后用任意 VNC 客户端连127.0.0.1:5901。黑屏九成是这个 xstartup 脚本没配对——它必须可执行、必须有正确的 shebang、必须显式启动一个窗口管理器。我在这个问题上花过整整一个下午,最后发现只是忘了chmod +x。

4. 踩坑实录与问题排查速查

4.1 安装阶段的典型故障

先说安装环节。最常见的是下载中断,表现是install命令跑到一半报网络错误。这里的关键认知是:proot-distro 的安装不是原子操作,中断后可能留下半截文件,虽然多数情况下重跑能自动续上,但如果反复失败,最稳的做法还是proot-distro remove清干净再装。另外注意存储空间,Ubuntu 的 rootfs 解压后通常占 1GB 到 2GB,再装点开发工具很容易到 4GB 以上,手机剩余空间建议留出至少 6GB 余量。

第二个坑是架构不匹配导致的诡异报错。如果你手动指定了--architecture,装出来的环境里执行某些二进制会提示Exec format error,这就是架构没对齐。解决办法是proot-distro login ubuntu --architecture aarch64显式指定,或者干脆卸载重装让它自动识别。

第三个坑和 Termux 本身的版本有关。如果 Termux 是从非官方渠道装的,proot-distro可能因为签名或依赖问题装不上、或者启动时报找不到库。这时候的处理原则很简单:回到官方渠道重新装一遍 Termux,然后重新配置。这个问题上省时间是没有意义的,后面每走一步都会遇到新的报错。

4.2 SSH 连不上的分层排查

从电脑 SSH 连手机上的 Ubuntu 是个高频需求,也确实容易出问题。排查要分层做,不要一上来就怀疑服务端配置。

排查层级检查动作典型原因
网络层ping手机 IP不在同一局域网、手机热点隔离
端口层在手机浏览器访问http://127.0.0.1:端口服务未监听、端口被占用
服务层在 Ubuntu 内ss -tlnp看监听状态sshd 未启动、绑定到了 127.0.0.1
认证层查看/var/log/auth.log密码错误、密钥权限、PermitRootLogin限制
配置层sshd -T打印生效配置配置语法错误导致服务起着但拒绝连接

其中最容易踩的是端口和默认配置。Termux 自带的 sshd 默认监听 8022 端口,而 Ubuntu 里装的 openssh-server 默认是 22 端口,两个服务互不冲突但容易搞混。另外 Ubuntu 里的 sshd 默认可能只监听回环地址,需要在/etc/ssh/sshd_config里确认ListenAddress配置,并确保PasswordAuthentication yes且你的用户有密码。还有一个细节:proot 环境下 sshd 的某些权限检查会失败,如果日志里出现Privilege separation相关错误,把UsePrivilegeSeparation关掉或者改用-o参数启动即可。

4.3 包管理与路径相关的隐形坑

进到 Ubuntu 之后,有几个 proot 特有的行为需要提前知道。第一,部分涉及内核接口的命令会失败,比如systemctl、mount、iptables这类需要真实内核权限的操作,在 proot 里是跑不通的。这不是配置问题,是架构决定的,绕不过去。对应的替代方案是用直接启动进程的方式代替服务管理,比如需要跑数据库就直接mysqld_safe &而不是systemctl start mysql。

第二,PATH 和文件权限的映射有微妙差异。Termux 目录下的文件在 proot 里看到的属主和权限可能和真实情况不一致,导致某些脚本报Permission denied。解决办法是把需要执行的文件放到 Ubuntu 自己的文件系统里,只把 Termux 目录当作数据交换区,不要直接在那儿跑构建。

第三,磁盘空间的两个环境是共享的。Termux 的私有目录和 Ubuntu 的 rootfs 都占用同一块存储,df -h在两边的输出可能不一样,但吃掉的空间是实打实的。养成定期apt clean和清理缓存的习惯,能省下不少空间。

4.4 性能与续航的调优心得

手机跑 Linux,耗电和发热是绕不开的。我的几条实际经验:关掉不必要的后台服务,尤其是图形界面,不用的时候直接vncserver -kill;避免长时间满负载编译,真要编大项目就插上电源、摘掉手机壳、放在通风的地方;善用nice和-j参数控制并行度,比如make -j2而不是-j8,虽然慢一点但发热可控,反而不容易触发降频。

还有个容易被忽视的点是I/O 性能。手机闪存的随机读写能力不如 SSD,大量小文件操作(比如npm install、pip install装一堆包)会明显慢。一个可行的优化是把经常读写的目录挂到内存盘上,但要注意内存盘断电即失,只适合放临时构建产物。

5. 装完之后,这台"口袋服务器"能干什么

5.1 移动端开发与脚本自动化

环境装好之后,最先能落地的场景是脚本自动化。比如写一个 Python 脚本,定时抓取某些公开数据、做格式转换、推送到自己的笔记系统,配合 Termux 的定时任务能力(注意 proot 里没有 systemd timer,需要用 Termux 侧的 cron 或者简单循环脚本)就能在后台跑起来。我用这套组合做过几件事:批量重命名和整理手机里的照片、把录音文件转成文字稿做初步整理、定时备份某些目录到网盘。这些任务的特点是计算量不大但需要长期常驻,正好适合手机。

另一个高频场景是移动端代码验证。出门在外突然想到一个实现思路,掏出手机proot-distro login ubuntu,用 vim 写完,python或node跑一遍看结果,验证完就丢。这种"想到即验证"的效率提升是很实在的。要写正经代码的话,建议配一个蓝牙键盘,再用git同步到自己的仓库,手机上只做快速验证,正式的开发还是回电脑。

5.2 学习环境搭建:从语言到数据库

对于正在学 Linux 和运维的同学,这台手机就是一个零成本的实验台。你可以在这个 Ubuntu 里装 Python 全家桶、Node 环境、Go 工具链,甚至是 MySQL、PostgreSQL、Redis 这类数据库。注意数据库要手动初始化数据目录并以非服务方式启动,因为它走不了初始化系统。具体做法通常是mysqld --initialize-insecure --datadir=/var/lib/mysql然后再用mysqld_safe --skip-grant-tables &拉起,第一次登录后立刻改密码。

网络服务和容器这块也能玩。Docker 的服务端在 proot 里跑不起来(需要内核特性支持),但 Docker 客户端可以装,用来连接远程的 Docker 主机,这样你在手机上就能管理云端的容器,查看日志、重启服务都很方便。同类的还有各类命令行客户端工具,kubectl、redis-cli、psql都能正常跑,把它们当成"运维遥控器"来用,是手机 Linux 环境最实用的定位之一。

5.3 和电脑端的 WSL、虚拟机怎么分工

很多人电脑上已经装了 WSL 或者 VirtualBox 里的 Ubuntu,那手机这台还有必要吗?我的分工原则是:电脑负责重活,手机负责碎片时间和应急。具体来说,需要长时间编译、需要图形界面调试、需要跑完整的容器编排,这些都在电脑上做;而临时改配置、查看服务状态、验证一个小函数、跑一个数据清洗脚本,手机上就够了。热词里提到的 WSL 字体配置、虚拟机安装这类桌面端话题,本质上是另一套工作流,两边并不冲突,反而可以共享同一套 dotfiles 和开发环境配置。

一个很实用的做法是把环境配置脚本化。你在手机上折腾 proot Ubuntu 的那一堆命令,写成一份setup.sh放在仓库里,电脑上的 WSL 和虚拟机也能用同一份脚本初始化。环境配置本身成为一种可复现的资产,而不是散落在各处的历史命令。这个习惯一旦养成,后面换设备、重装系统的成本会降到极低。

我个人的体会是,proot 这套方案最大的价值不在于性能,而在于它把"拥有一台 Linux 环境"这件事的门槛降到了几乎为零。你不需要额外的硬件、不需要复杂的网络配置,一台普通的安卓手机加上二十来分钟的配置时间,就能得到一个标准 Ubuntu。真正需要警惕的是把它当成主力开发机来期待——它是一把随身携带的瑞士军刀,而不是车床。想清楚这个定位,你就不会在"为什么编译这么慢"上浪费时间,而是把精力放在那些它真正擅长的场景上。最后再分享一个小技巧:把常用的登录命令写成 Termux 的别名,比如在~/.bashrc里加一行alias ub='proot-distro login ubuntu --bind /data/data/com.termux/files/home:/mnt/termux-home',之后敲两个字母就能进环境,这种小优化累积起来对使用频率的影响其实相当大。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询