ARTICLE DETAIL

资讯详情

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

Termux 安装 Ubuntu 全流程:proot 选型、报错排查与开发环境配置

Termux 安装 Ubuntu 全流程:proot 选型、报错排查与开发环境配置 很多人第一次打开 Termux看到那个黑底绿字的提示符第一反应是这不就是个终端吗能跑 Ubuntu 才怪。我当初也是这么想的直到有次出差没带笔记本只带了一台旧手机临时要在路上改一段 Python 脚本才被逼着把 Termux 装 Ubuntu 这件事彻底搞明白。装完之后我发现它确实不是虚拟机上那种完整的 Ubuntu但用来跑编译器、Python、装包、写脚本、甚至跑一个轻量桌面完全够用。问题在于网上流传的很多教程要么是几年前的老脚本要么直接跳过了最关键的一步——你手机到底支持哪种方案。这篇文章我就把 termux 安装 ubuntu 这件事从头到尾讲透包括路线怎么选、每一步为什么这么走、以及那些教程里从来不写的报错现场。只要你的设备能装 Termux看完就能自己跑起来新手也不用怕。1. 先别急着敲命令Termux 里装 Ubuntu 到底有几种玩法大部分人搜 termux 安装 ubuntu搜到的第一句命令往往是pkg install proot-distro然后就跟着敲。但如果你不知道这背后发生了什么一旦报错你连往哪个方向查都不知道。所以先把路线说清楚这一步花十分钟能省你后面两小时。1.1 proot-distro、手动 proot、chroot 的差别Termux 本身运行在 Android 的普通应用沙盒里没有 root 权限也没有真正的内核隔离。所谓在 Termux 里装 Ubuntu本质上是把一个 Ubuntu 的根文件系统rootfs解压到 Termux 的私有目录里然后通过一层翻译机制让 Ubuntu 里的程序以为自己在正常的 Linux 环境里跑。这个翻译层有三种常见做法方案是否需要 root原理适合场景proot-distro不需要用 PRoot 做系统调用路径重写绝大多数人首选手动 proot不需要自己下载 rootfs手写 proot 启动命令proot-distro 装不上、老设备chroot需要 root直接切换根目录已 root 的设备追求性能PRoot 的核心思路是骗。当 Ubuntu 里的程序发起系统调用时PRoot 会在中间拦一道把/usr、/etc这类绝对路径改写成 Termux 私有目录下的真实路径。所以你在里面敲ls /看到的确实是 Ubuntu 的目录结构但它在磁盘上的真实位置其实是/data/data/com.termux/files/usr/var/lib/proot-distro/installed-rootfs/ubuntu/。理解了这一点后面很多明明改了配置文件却不生效的问题就都能解释了。chroot 则是真刀真枪地换根目录性能最好、兼容性最强代价是你得先 root 手机。root 这件事本身有风险而且现在很多机型根本不给解锁所以我不建议为了跑 Ubuntu 去折腾 root。除非你本来就有 root 环境否则老老实实走 proot。提示proot 方案下某些依赖内核特性的软件是跑不起来的比如真正的 Docker、部分需要内核模块的工具。遇到这类需求手机上折腾的意义不大别硬扛。1.2 老安卓设备比如 Android 5.1会卡在哪一步热词里出现了 termux android5.1说明确实有不少人手里是旧设备。这里有个必须先说清楚的现实新版 Termux 对 Android 版本有要求官方发布渠道上的最新构建通常要求 Android 7.0 及以上。Android 5.1、6.0 这类设备你硬装最新版可能直接安装失败或者装上之后pkg命令一跑就报错。我的建议是老设备去 Termux 的 GitHub Releases 页面找较早的版本通常需要翻到比较靠前的 release 记录挑一个标注支持低版本 Android 的构建。装好之后第一件事不是装 Ubuntu而是先跑pkg update看能不能正常拉取源。如果连源都连不上说明这个 Termux 版本的仓库地址已经失效换源也救不了那就得考虑手动 proot 路线了。手动 proot 路线不依赖 proot-distro 这个包管理器脚本你只需要一个可用的 proot 二进制和一个 Ubuntu rootfs 压缩包。流程是下载 rootfs tar.gz解压到某个目录然后用proot -S 目录 -b /dev -b /proc -b /sys ...这样的命令启动。这条路的缺点是所有绑定目录、环境变量都要你自己维护登录脚本得自己写优点是它几乎不挑 Termux 版本只要 proot 能跑、架构对得上就行。还有一个容易忽略的点CPU 架构。绝大多数安卓手机是 aarch64arm64少数老设备是 armv7 或 armhf。你下载的 Ubuntu rootfs 必须和架构匹配arm64 的 rootfs 扔到 armv7 设备上是跑不起来的会直接报可执行文件格式错误。用uname -m先确认自己的架构这一步别省。2. 把 Termux 本体收拾干净下载渠道、换源、存储权限我见过太多人卡在第一步Termux 本身就没配置好就开始装 Ubuntu结果所有报错都被误以为是 Ubuntu 的问题。先把地基打好。2.1 Termux 安装包的来源选择不同渠道的 Termux 差别很大。早期在应用商店能下到的版本签名和更新机制和现在的官方构建不一样插件生态也不兼容经常出现照教程敲命令你的 Termux 里根本没有这个命令的情况。所以我的习惯是统一从 F-Droid 或 GitHub Releases 获取保持和主流教程一致的环境。装的时候注意两点。第一如果你之前装过其他来源的 Termux先彻底卸载再装因为不同签名的包不能互相覆盖留着会出各种诡异问题。第二Termux 有个生态很多能力是通过独立插件提供的比如 API 插件、Boot 插件、Styling 插件。核心的 Termux 应用本身够用插件按需再加不要一上来装一堆。装完之后先跑三条命令确认基本可用termux-info pkg update pkg upgradetermux-info会打印出系统版本、Termux 版本、架构、已配置的源地址。这份信息在你后面求助或者自查时非常有用建议截图保存一份。2.2 termux-change-repo 换源与 pkg upgrade 的先后顺序Termux 默认的软件源在国外国内直连经常慢到超时。Termux 自带一个换源工具pkg install termux-tools termux-change-repo运行后会弹出一个文本界面让你选择镜像。选国内的高校镜像或云厂商镜像都行选完它会自动改写源配置。换完之后再跑pkg update pkg upgrade速度会有肉眼可见的提升。顺序很重要先换源再 upgrade。如果你先 upgrade 又中途失败可能会留下半更新的状态后面再装别的包就容易报依赖冲突。真遇到这种半截状态可以试pkg update --fix-missing或者干脆清掉缓存pkg clean再来一遍。注意换源工具改的是 Termux 自己的源跟 Ubuntu 里面的 apt 源是两码事。后面进了 Ubuntu你还要再换一次 apt 源别搞混。2.3 termux-setup-storage 到底做了什么这条命令很多人随手就敲了但不知道它做了什么导致后面找不到文件termux-setup-storage执行时系统会弹出一个存储权限请求允许之后Termux 会在你的家目录下创建一个storage目录里面是一组软链接~/storage/shared指向手机的内部存储根目录~/storage/downloads指向下载目录~/storage/dcim、~/storage/pictures等按类型分别指向对应目录这些软链接本质上是热线电话不是真实文件。你在~/storage/downloads里放文件和直接在手机的文件管理器里放文件是同一份数据。理解了这一点就能想明白为什么不能在 Termux 里对~/storage做某些操作——比如你不能把整个 rootfs 放在这里还指望它权限正常因为 Android 的外部存储挂载参数noexec 之类经常会限制可执行权限。所以我的做法是下载的安装包、脚本、素材放~/storage/downloads方便用手机浏览器下载而 Ubuntu 的 rootfs、编译产物这类需要执行权限的东西放在 Termux 私有目录里也就是默认的家目录下。这个区分能帮你避开一大批权限被拒绝的报错。3. proot-distro 装 Ubuntu 的完整流程与每一步的目的地基打好了现在进入正题。这一节我会把每一步的命令和它背后的作用都讲清楚你照着做同时知道自己在做什么。3.1 安装 proot-distro 并确认可用发行版pkg install proot-distro proot-distro list第一行装上工具第二行列出当前版本支持的发行版清单。这个清单会随 proot-distro 版本变化比较新的版本里通常会看到ubuntu、ubuntu-22.04、ubuntu-24.04、debian、alpine、archlinux等条目具体以你看到的为准。这里有个细节值得说ubuntu这个别名一般指向该工具定义的默认 LTS 版本。如果你有明确的版本需求直接指定带版本号的名称更稳妥避免哪天默认别名悄悄换了版本你的环境对不上号。做嵌入式开发、需要特定工具链版本的场景我一般直接指定ubuntu-22.04这类明确版本。另外注意磁盘空间。一个 Ubuntu rootfs 解压后通常要占几百 MB 到 1GB 以上加上后续装的软件建议至少留 4GB 以上空间。用df -h看一下家目录所在分区的剩余空间不够就先清理别装到一半卡死。3.2 安装、首次登录与登录参数proot-distro install ubuntu proot-distro login ubuntu第一行会下载并解压 rootfs这个过程取决于网络慢的话几分钟到十几分钟很正常。中途不要切后台太狠Android 有可能把你的 Termux 进程杀掉导致解压不完整。建议在装之前先执行termux-wake-lock让系统别休眠这个进程。登录命令里还有几个常用参数值得记一下# 以指定用户登录需要该用户已存在 proot-distro login ubuntu --user myuser # 共享 /tmp方便和 Termux 主环境交换临时文件 proot-distro login ubuntu --shared-tmp # 绑定手机存储目录让 Ubuntu 里也能读到 /sdcard proot-distro login ubuntu --bind /sdcard:/mnt/phone--bind这个参数非常好用。默认情况下Ubuntu 环境里是看不到手机存储的你在 Termux 主环境下能访问的~/storage进去之后路径也变了。绑定之后Ubuntu 里就有了一个明确的挂载点去读写手机文件比到处找路径省心得多。还有一点登录进去之后你执行exit就能回到 Termux 主环境两边是独立的。主环境里装的工具Ubuntu 里不一定有反过来也一样。这是新手最容易困惑的地方比如在 Termux 里装了 git进去 Ubuntu 敲 git 说找不到命令这不是 bug是正常的。3.3 进去之后第一件事换 apt 源、建用户、配 sudo第一次进 Ubuntu建议按这个顺序收拾apt update apt upgrade -y apt install -y sudo vim wget curl gitapt update如果特别慢或者报错先换源。可以手动编辑/etc/apt/sources.list把里面的地址替换成速度快一点的镜像或者用一些带图形界面的换源工具但在纯终端环境下手动改最直接。改之前记得备份原文件出问题好还原。接下来建一个普通用户。为什么不一直用 root因为在 root 下跑pip、跑编译、跑各种脚本很容易把文件属主和权限搞乱而且很多工具会拒绝以 root 身份运行。做法是useradd -m -s /bin/bash dev passwd dev usermod -aG sudo dev然后退出重新以这个用户登录。这里有个 proot 方案的经典坑sudo在 proot 下由于没有 setuid 位默认可能不工作或者表现很奇怪。常见的处理办法是给 sudo 的可执行文件补上权限或者在需要提权时用 root 登录做一次性操作。我的经验是日常用户跑业务代码需要装系统包的时候退出到 root 用户装完再切回来比反复调 sudo 省事。顺便把语言环境和时区配一下否则后面装某些软件会出现一堆 locale 警告apt install -y locales tzdata dpkg-reconfigure tzdata时区选对之后日志时间、脚本里的时间戳就正常了做定时任务的时候不会莫名其妙差几个小时。4. 报错现场还原几类高频故障的排查链路上面是顺利路径。但真实世界里大部分人是在这一节里挣扎的。我把几个最常遇到的报错按现象—原因—验证—处理的顺序还原一遍你可以照着链路自己排查。4.1 su: no su program found on this device 的真实含义这个报错的完整形态通常长这样~ $ su -m No su program found on this device. termux does not su很多人看到这个第一反应是是不是我 Termux 装坏了其实完全不是。这句话是在告诉你这台设备上没有可用的su也就是没有 root 权限Termux 自身不会提供su。这个报错一般出现在你想用su切 root 的时候。而在 proot 方案下你根本不需要su——Ubuntu 环境里的 root 是通过 proot 模拟出来的跟设备是否 root 无关。所以正确的处理方式是不要在主环境敲su而是用proot-distro login ubuntu进环境需要 root 就直接是 root 身份需要普通用户就加--user。有些教程会教你装一个 tsu 之类的工具来套 root那前提是你的设备真的已经 root 了。没 root 的设备装上去也一样报错。判断自己有没有 root最直接的方法就是看有没有授权管理应用或者跑一次需要 root 的命令看会不会弹授权框。提示如果你确实已经 root还想在主环境里做需要 root 的操作可以装对应工具但如果你只是想跑 Ubuntu这条命令跟你没关系直接忽略。4.2 apt update 卡住、404、域名解析失败进 Ubuntu 之后apt update报错基本逃不出三类。第一类是网络到镜像站不通表现是一直卡在Connecting to ...或者超时。处理办法是换源换成国内可达的镜像地址改完再apt update。第二类是新旧版本不匹配导致的 404。比如你装的是老版本的 Ubuntu rootfs源里对应的发行版代号已经归档地址就失效了。验证方法很简单看看/etc/apt/sources.list里的发行版代号再去看镜像站上还有没有这个代号。没了就得把地址换成归档地址或者干脆重新装一个较新的版本。这是老 rootfs 最容易踩的坑尤其是从各种教程里找来的压缩包版本可能是好几年前的。第三类是域名解析失败报Temporary failure in name resolution。这类报错说明网络层没通而不是源的问题。可以检查/etc/resolv.conf看看里面有没有可用的解析服务器地址。proot 环境下这个文件有时是被动态生成或覆盖的你可以加一行固定地址试试比如公共解析服务。注意如果问题是 Termux 主环境本身网络不通那要先回到主环境排查因为 Ubuntu 的网络是搭在 Termux 之上的。排查顺序建议固定先ping一个域名看解析再ping一个 IP 看连通再看源的地址和代号对不对。三步走完问题基本定位了别一上来就乱改配置。4.3 重启 Termux 后环境没了与路径错乱有朋友跟我说装好 Ubuntu、装完一堆软件第二天打开 Termux 全没了。这种情况九成不是真的没了而是你打开的方式变了。常见的几个原因一是换了一个 Termux 应用比如从别的渠道又装了一个它们的家目录不共享自然看不到之前的 rootfs二是登录命令敲错了proot-distro login ubuntu里的名字和你实际安装的名字不一致它会给你一个空的或者报错三是卸载重装过 Termux应用数据被清掉那确实就没了。还有一个隐蔽的问题是路径错乱。你在 Ubuntu 里写脚本时如果用了硬编码的绝对路径换设备或者换安装方式后路径就对不上了。我的一般做法是尽量用相对路径或者用环境变量别写死/data/data/com.termux/...这种地址。至于重启后进不去有的是因为 Android 把 Termux 的后台进程限制了重新打开应用等待几秒初始化完成再登录就好有的是因为上一次没有正常退出残留了锁文件。遇到卡住先exit干净退出再重新登录多数能解决。5. 让 Ubuntu 真的能干活工具链、中文环境与桌面装是装上了但能跑起来和能干活是两回事。这一节讲怎么把它变成一个真正顺手的开发环境。5.1 Python 与科学计算库的安装姿势先在 Ubuntu 里装基础 Pythonapt install -y python3 python3-pip python3-venv然后强烈建议用虚拟环境管理项目依赖不要在系统 Python 里直接pip install一大堆包否则系统包管理和 pip 会打架。做法是每个项目建一个 venv需要什么装什么。装 numpy 这类科学计算库时手机端最容易遇到两个问题一是编译慢二是内存不够直接被杀掉。处理思路有两条。第一优先用 apt 提供的预编译包比如apt install python3-numpy省去编译第二pip 装的时候指定国内的包索引镜像速度快很多。如果某个库确实要现场编译先把 Termux 主环境的资源占用降下来关掉不用的后台应用必要时分批安装。热词里出现了 termux 安装 python 所有的库 这类搜索我得泼一点冷水没有所有库都装一遍这种玩法装了也用不上还占空间。正确做法是按项目需求装用pip freeze记录依赖换环境时一次性还原。5.2 编译工具链与版本管理需要编译 C/C 项目的话装基础工具链apt install -y build-essential cmake git pkg-configbuild-essential会把 gcc、g、make 这些一并带上。cmake 和 pkg-config 是绝大多数现代 C/C 项目的标配提前装好省得中途报错。git 不用多说拉代码必备。这里有个经验编译大型项目时手机的内存和散热是硬瓶颈。我试过在 4GB 内存的机器上编译中等规模的项目编译到一半 OOM 被系统杀掉是常事。解决办法是限制并行编译的核数比如用make -j2而不是-j$(nproc)宁可慢也不要崩。同时插上充电器把手机放在通风的地方长时间高负载编译发热会很夸张。版本管理方面如果项目需要特定版本的编译器或运行时可以在 Ubuntu 里再套一层版本管理工具或者用容器化的思路把环境隔离。不过在手机这种资源受限的环境里我建议尽量保持简单别叠太多层不然性能和复杂度都吃不消。5.3 VNC XFCE4 桌面黑屏的几种成因与处理想在手机上看到图形桌面主流做法是装一个轻量桌面环境再通过 VNC 连上去。以 XFCE4 为例apt install -y xfce4 xfce4-goodies tigervnc-standalone-server dbus-x11装完之后配置 VNC 的启动脚本。用户目录下会有~/.vnc/xstartup内容大致需要这样#!/bin/sh unset SESSION_MANAGER unset DBUS_SESSION_BUS_ADDRESS exec startxfce4注意给脚本加执行权限并设置 VNC 密码chmod x ~/.vnc/xstartup vncpasswd vncserver -localhost no -geometry 1024x768 -depth 24 :1然后在手机上装一个 VNC 客户端连127.0.0.1:5901就能看到桌面。-depth 24配合1024x768是个比较稳的起点低配机器可以把分辨率和色深再降一点。XFCE4 黑屏 是热词里的高频问题我踩过几次成因基本是这几类现象常见原因处理方向连上后全黑只有光标xstartup 没有执行权限或内容不对检查权限确认最后一行是 exec 启动桌面黑屏几十秒后断开缺少 dbus 或运行目录未设置安装 dbus-x11设置运行目录环境变量桌面出来但没有窗口管理器启动脚本没有 exec进程被回收确保用 exec 启动避免脚本提前退出连不上端口拒绝VNC 服务没起来或端口不对查看服务输出日志确认监听端口还有一个容易被忽略的坑/tmp目录的权限。某些程序要求/tmp具备特定的权限位权限不对就会出现各种莫名其妙的问题。可以在启动前检查一下/tmp的状态。另外如果你是在 proot 环境下跑桌面图形性能肯定比不上真机拖动窗口有卡顿是正常的别以为装错了。5.4 中文显示与输入法桌面出来了发现中文全是方块这是因为系统里没有中文字体。装一套中文字体就能解决apt install -y fonts-wqy-zenhei fonts-wqy-microhei装完之后如果有字体缓存机制刷新一下缓存重启桌面即可。如果需要中文输入法在 XFCE4 下可以装 fcitx 再加拼音输入法模块装完配置好环境变量重启会话生效。手机端的输入体验和电脑差别很大VNC 客户端自己的软键盘和系统的输入法会互相干扰我的建议是只在必要时用图形界面日常写代码老老实实用终端加 SSH效率高得多。6. 备份、迁移与清理把折腾成果保住折腾一次不容易尤其是你在里面装了半天的环境和依赖。这一节讲怎么把成果保住以及什么时候该换方案。6.1 proot-distro 的 backup/restoreproot-distro 自带备份恢复能力这是它比手动 proot 省心的地方之一proot-distro backup --output ubuntu-backup.tar.gz ubuntu proot-distro restore ubuntu-backup.tar.gz备份出来的是一个压缩包可以拷到电脑或者网盘存着。换手机、重装系统、环境被搞坏都能靠它快速恢复。我的习惯是每完成一个重要阶段就备份一次比如刚装完基础环境、刚配好工具链各存一份出问题时可以退回到最近的可用状态。需要提醒的是备份包不小几百 MB 到几个 GB 都有可能。拷到手机存储时注意空间也注意别再放回 Termux 私有目录不然可能出现备份文件把空间占满导致恢复失败的尴尬场面。6.2 手机存储互通与文件搬运前面提过--bind和~/storage。实际用起来我的分工是这样的代码和项目放在 Ubuntu 环境里用 Git 管理随时能同步到远程仓库大文件、素材、下载的安装包放手机存储通过绑定目录互访。如果你要传大文件到手机用手机浏览器下载到下载目录再在 Termux 里从~/storage/downloads拷进私有目录比在终端里用命令下载更稳尤其是网络不稳定的场景。反过来要把 Ubuntu 里生成的文件拿出来先拷到绑定目录再用文件管理器操作。还有个实用技巧是配 SSH。在 Ubuntu 里装好 SSH 服务并在非特权端口上监听然后从同一局域网里的电脑连过去手机上只负责跑环境键盘鼠标用电脑的体验会好非常多。这个思路在热词里也有体现说明是很多人的共同选择。6.3 该换方案的时候不要硬扛最后说说什么时候该放弃。Termux 装 Ubuntu 有它的适用边界需要内核级特性、需要真正的容器或虚拟化proot 方案满足不了项目对性能要求高长时间编译、跑大型构建手机的散热和内存撑不住需要长期稳定运行的服务器类任务手机的后台进程管理会时不时打断你这些情况下老老实实用电脑或者一台便宜的云主机效率差距不是一点半点。手机端环境的定位是移动、应急、轻量验证认清楚这一点你就不会为了让它跑一个不适合它的任务而折腾一整晚。反过来如果你只是想随时随地写脚本、跑点 Python、验证一个小想法、临时拉个仓库改两行这套方案完全值得投入时间去配置。我自己的经验是把常用工具链和一份备份包准备好之后换设备迁移也就十分钟的事。最后分享一个小习惯把安装过程、用到的命令、踩过的坑在 Ubuntu 环境里记一个纯文本笔记跟着备份包一起存。等下次换设备你不用再重新搜一遍教程打开笔记照着敲就行。这个笔记的价值比我当年任何一次通宵排查都高。
返回列表