ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

安卓手机免root安装Ubuntu:Termux与proot-distro实战

安卓手机免root安装Ubuntu:Termux与proot-distro实战 在安卓手机上跑一个完整的 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-distroproot-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 就对了。另外注意架构问题。绝大多数现代安卓手机是aarch64proot-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进去之后你看到的提示符应该类似rootlocalhost:~#。这时候先做个体检确认环境是对的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 的目录挂进 Ubuntuproot-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 LANGzh_CN.UTF-8 export LC_ALLzh_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 ubproot-distro login ubuntu --bind /data/data/com.termux/files/home:/mnt/termux-home之后敲两个字母就能进环境这种小优化累积起来对使用频率的影响其实相当大。
返回列表