更新时间:2026-09-19 10:38:52 | 阅读:766 | 收藏:0 收藏 观看视频讲解 Android 手工基于 Termux 安装 Linux Ubuntu与NodeLio Android 手工基于 Termux 安装 Linux Ubuntu与NodeLio # Android 上用 Termux 安装 Linux Ubuntu > **读者**:需要在安卓手机/平板上跑 Linux(Ubuntu)环境的客户与运维。 > 本文只讲:安装 Termux → 换源 → 可选 SSH(**8022=Termux / 10022=Ubuntu**)→ 用 proot-distro 装 Ubuntu → 换国内镜像 → **wake-lock 保活与开机自启** → **tmux 挂后台跑 NodeLio**。 > **不包含** NodeLio 安装包打包、发版或源码编译。 适用场景:无电脑或仅有手机时,先在 Termux 里搭好 Ubuntu,再按《[手机端用脚本安装 NodeLio](/doc-44)》用官方 sh 部署服务端(arm64)。 --- ## GitHub 相关资源 直连 GitHub 较慢或失败时,可用第三方加速站 [gh-proxy.com](https://gh-proxy.com/):把完整的 GitHub 下载地址贴进页面,会生成加速链接;也可自己在原链接前加上 `https://gh-proxy.com/`。 ### 用法说明 1. 打开 [https://gh-proxy.com/](https://gh-proxy.com/)。 2. 粘贴原始 GitHub 链接(Release 附件、raw、archive 等均可)。 3. 点击转换,复制生成的加速链接再下载;也可在手机浏览器直接打开加速链接。 4. 命令行示例(`wget` / `curl`): ```bash # 格式:https://gh-proxy.com/ + 原始 https://github.com/... 完整 URL wget -O termux.apk "https://gh-proxy.com/https://github.com/termux/termux-app/releases/download/v0.118.3/termux-app_v0.118.3+github-debug_arm64-v8a.apk" ``` 注意事项: - 仅把 **https://github.com/...**(或 raw / api 等站点支持的地址)整段拼在代理域名后面,中间不要多空格。 - 加速节点可能变更;若某一节点失败,回 [gh-proxy.com](https://gh-proxy.com/) 换节点,或过几分钟再试。 - 第三方代理仅作访问辅助,下载后请核对文件来源与完整性。 - **插件签名必须一致**:Termux 主程序与 Termux:API / Termux:Boot 须来自**同一安装源**(本文统一用 GitHub debug 包)。混用 F-Droid 与 GitHub 包会导致插件无法调用主程序。 ### 官方原链 | 用途 | 原链 | |------|------| | Termux(Android arm64) | https://github.com/termux/termux-app/releases/download/v0.118.3/termux-app_v0.118.3+github-debug_arm64-v8a.apk | | Termux:API(wake-lock 等) | https://github.com/termux/termux-api/releases/download/v0.53.0/termux-api-app_v0.53.0+github.debug.apk | | Termux:Boot(开机自启) | https://github.com/termux/termux-boot/releases/download/v0.8.0/termux-boot_v0.8.0+github.debug.apk | | 1Remote(电脑端远程,Windows x64 Nightly) | https://github.com/1Remote/1Remote/releases/download/Nightly/1Remote-1.3.0.0-beta-net9-x64-nightly-20260714-5b9d84-self-contained.zip | | Ubuntu noble aarch64(proot-distro 发行包) | https://github.com/termux/proot-distro/releases/download/v4.18.0/ubuntu-noble-aarch64-pd-v4.18.0.tar.xz | ### 国内加速下载(gh-proxy) | 用途 | 加速链接 | |------|----------| | Termux APK | https://gh-proxy.com/https://github.com/termux/termux-app/releases/download/v0.118.3/termux-app_v0.118.3+github-debug_arm64-v8a.apk | | Termux:API | https://gh-proxy.com/https://github.com/termux/termux-api/releases/download/v0.53.0/termux-api-app_v0.53.0+github.debug.apk | | Termux:Boot | https://gh-proxy.com/https://github.com/termux/termux-boot/releases/download/v0.8.0/termux-boot_v0.8.0+github.debug.apk | | 1Remote Nightly | https://gh-proxy.com/https://github.com/1Remote/1Remote/releases/download/Nightly/1Remote-1.3.0.0-beta-net9-x64-nightly-20260714-5b9d84-self-contained.zip | | Ubuntu noble aarch64 发行包 | https://gh-proxy.com/https://github.com/termux/proot-distro/releases/download/v4.18.0/ubuntu-noble-aarch64-pd-v4.18.0.tar.xz | 也可点开: - [Termux APK(原链)](https://github.com/termux/termux-app/releases/download/v0.118.3/termux-app_v0.118.3+github-debug_arm64-v8a.apk) · [加速](https://gh-proxy.com/https://github.com/termux/termux-app/releases/download/v0.118.3/termux-app_v0.118.3+github-debug_arm64-v8a.apk) - [Termux:API(原链)](https://github.com/termux/termux-api/releases/download/v0.53.0/termux-api-app_v0.53.0+github.debug.apk) · [加速](https://gh-proxy.com/https://github.com/termux/termux-api/releases/download/v0.53.0/termux-api-app_v0.53.0+github.debug.apk) - [Termux:Boot(原链)](https://github.com/termux/termux-boot/releases/download/v0.8.0/termux-boot_v0.8.0+github.debug.apk) · [加速](https://gh-proxy.com/https://github.com/termux/termux-boot/releases/download/v0.8.0/termux-boot_v0.8.0+github.debug.apk) - [1Remote Nightly(原链)](https://github.com/1Remote/1Remote/releases/download/Nightly/1Remote-1.3.0.0-beta-net9-x64-nightly-20260714-5b9d84-self-contained.zip) · [加速](https://gh-proxy.com/https://github.com/1Remote/1Remote/releases/download/Nightly/1Remote-1.3.0.0-beta-net9-x64-nightly-20260714-5b9d84-self-contained.zip) - [Ubuntu 发行包(原链)](https://github.com/termux/proot-distro/releases/download/v4.18.0/ubuntu-noble-aarch64-pd-v4.18.0.tar.xz) · [加速](https://gh-proxy.com/https://github.com/termux/proot-distro/releases/download/v4.18.0/ubuntu-noble-aarch64-pd-v4.18.0.tar.xz) > 1Remote 装在电脑上,用于 SSH/远程连入手中的 Termux 或 Ubuntu;版本为 Nightly,链接可能随上游发布更新。Ubuntu 发行包用于后文「本地安装 proot-distro」步骤。Termux:API / Termux:Boot 用于第 8、9 节保活与开机自启。 --- ## 1. 安装 Termux 请从上方 **GitHub 相关资源** 安装 Termux(勿用已下架的 Play 商店旧包;国内网络优先用加速链接)。安装后打开 App,允许存储等必要权限。 若后续要用命令行 `termux-wake-lock` 或开机自启,一并安装 **Termux:API**、**Termux:Boot**(同源 GitHub 包),并各打开一次完成授权。 --- ## 2. 换国内镜像并更新 网络慢时先换源,再更新软件包: ```bash termux-change-repo ``` 按提示选择国内镜像(如清华、北外等)。也可手动改 `sources.list`(高级用户)。 然后执行: ```bash pkg update && pkg upgrade -y ``` --- ## 3.(可选)开启 Termux SSH,方便电脑远程操作 > **端口 `8022`**:这是 **Termux 自带** 的 SSH,**不是** Ubuntu。连错端口会登到另一套环境,密码也对不上。 在手机 Termux 里: ```bash pkg install openssh -y ssh-keygen -A passwd # 设置登录密码;或配置 ~/.ssh/authorized_keys sshd # 默认端口 8022 ← Termux SSH ``` 检查是否在跑: ```bash ps aux | grep sshd ``` 重启 sshd(只动 Termux 的,别误杀 Ubuntu): ```bash pkill -x sshd 2>/dev/null || pkill sshd sshd # 仍是 8022 ``` 从同一局域网的电脑连接(把手机 IP 换成实际地址): ```bash ssh -p 8022 用户名@手机IP # 必须 -p 8022;用户名用 Termux 的 whoami ``` Termux 用户名可用 `whoami` 查看。若要进 **Ubuntu**,请用第 7 节的 **`10022` + root**,不要用本节端口。 > 长时间挂 SSH / 服务时,务必配合第 8 节 **wake-lock** 与系统电池白名单,否则息屏或切后台后进程常被系统杀掉。 --- ## 4. 安装 proot-distro 与 Ubuntu ### 交互一键脚本(推荐) 已装好 Termux 后,在 **Termux / SSH 8022** 里执行(不要在 Ubuntu 里跑): ```bash curl -fsSL https://z-y.site/works/iot-env/install-termux-ubuntu.sh | bash ``` 菜单可选:一键向导、装 Ubuntu、换国内 apt 源、配置/启动 Ubuntu SSH(`10022`)、wake-lock、进入 Ubuntu。向导等价于下文手工步骤的打包版。 手工步骤: ```bash pkg install proot-distro -y ``` 先尽量把 `proot-distro` 升到较新版本(需支持从 **OCI / 容器仓库**拉镜像;过旧版本只有后文的 GitHub 发行包方式): ```bash pkg upgrade proot-distro -y ``` ### 推荐:从亚马逊 ECR 公共仓库安装 Ubuntu 24.04 国内直连 GitHub 发行包常失败时,可用 **Amazon ECR Public**(`public.ecr.aws`): ```bash # 安装 ubuntu(24.04 / noble) proot-distro install public.ecr.aws/ubuntu/ubuntu:24.04 ``` 若登录名不是 `ubuntu`,安装时指定名称(后文命令统一用 `ubuntu`): ```bash proot-distro install --name ubuntu public.ecr.aws/ubuntu/ubuntu:24.04 ``` 也可用 Docker Hub 简写(部分网络不如 ECR 稳): ```bash proot-distro install ubuntu:24.04 # 或:proot-distro install --name ubuntu ubuntu:24.04 ``` ### 备选:旧版插件名 / 本地下载发行包 部分旧版 `proot-distro` 仍支持插件短名(内部从 GitHub Releases 拉 tar,下载时可能跳转到 CDN): ```bash proot-distro install ubuntu ``` 若官方源很慢,可先下载发行包再本地安装(路径按实际下载位置改): 1. 下载示例(aarch64): [原链](https://github.com/termux/proot-distro/releases/download/v4.18.0/ubuntu-noble-aarch64-pd-v4.18.0.tar.xz) · [gh-proxy 加速](https://gh-proxy.com/https://github.com/termux/proot-distro/releases/download/v4.18.0/ubuntu-noble-aarch64-pd-v4.18.0.tar.xz) (更多链接见上文「GitHub 相关资源」) 2. 放到手机可访问路径后执行: ```bash # 新版常见写法(本地路径): proot-distro install --name ubuntu /storage/emulated/0/Download/ubuntu-noble-aarch64-pd-v4.18.0.tar.xz # 旧版可能仍是: # proot-distro install ubuntu --override-alias ubuntu /storage/emulated/0/Download/ubuntu-noble-aarch64-pd-v4.18.0.tar.xz ``` > 具体参数以当前 `proot-distro install --help` 为准;报错时按帮助里的本地包 / `--name` 写法调整。 ### 安装卡住或失败 ```bash rm -f $PREFIX/var/lib/proot-distro/locks/ubuntu.lock # 必要时再卸干净重装 # proot-distro remove ubuntu # 再执行上面的 install(ECR 或本地包) ``` 登录 Ubuntu: ```bash proot-distro login ubuntu ``` 退出:在 Ubuntu shell 里输入 `exit`。两种 `login` 写法与 SSH 端口对照见 **第 7 节**。 --- ## 5. 安卓存储权限与共享目录 便于在 Termux / Ubuntu 里访问手机「下载」等目录: ```bash pkg install termux-am -y termux-setup-storage ``` 按提示授权后检查: ```bash ls /storage/emulated/0 ``` --- ## 5.1 安装 NodeLio 服务端(视频教程 4 步) Ubuntu(arm64)可用、且能访问手机「下载」目录后,在 **Ubuntu 内**执行(**不要**在 Termux / 8022 里直接装): 1. **确认环境**(须已 `proot-distro login ubuntu`,或 SSH `10022`) ```bash # 若仍在 Termux,先: # proot-distro login ubuntu dpkg --print-architecture # 应为 arm64 ls /storage/emulated/0 # 或已 termux-setup-storage 后的共享路径 ``` > 安装脚本会检测 Termux:在 Termux 壳里执行会直接报错退出。 2. **一键获取最新 linux-arm64 服务端**(顺带装 tmux,并落下可复用控制脚本) ```bash curl -fsSL https://z-y.site/works/iot-env/install-linux-arm64.sh | bash ``` 3. **用本地脚本启动**(已写入 `~/nodelio/nodelio.sh`,以后装/启都用它) ```bash ~/nodelio/nodelio.sh start # tmux 前台,可看启动菜单 # 或:~/nodelio/nodelio.sh start -d # 后台(NODELIO_NO_MENU=1) # 或:~/nodelio/nodelio.sh # 打开交互菜单 ``` 4. **记下控制台输出的局域网地址**(默认端口 **8899**)。MQTT 可在启动菜单中安装。 以后更新 / 再启动: ```bash ~/nodelio/nodelio.sh # 菜单:安装/启动/停止/状态 ~/nodelio/nodelio.sh update ~/nodelio/nodelio.sh start ~/nodelio/nodelio.sh attach ~/nodelio/nodelio.sh stop ~/nodelio/nodelio.sh status ``` 电脑 amd64 环境改用: ```bash curl -fsSL https://z-y.site/works/iot-env/install-linux-amd64.sh | bash ``` 作品页亦可点「复制安装命令」。断线保活见第 8–10 节(wake-lock / tmux)。 --- ## 6. Ubuntu 换国内 apt 镜像(arm64 用 ubuntu-ports) > **先换源再装包**:第 7 节要 `apt install openssh-server`,国内网络下应先完成本节,否则 `apt update` 慢或失败。 手机 / 平板上的 Ubuntu 一般是 **arm64(aarch64)**。普通 `.../ubuntu/` 镜像**只有 amd64**,写成它会出现: `Failed to fetch .../binary-arm64/Packages 404 Not Found` 必须改用 **`ubuntu-ports`**(端口架构仓库)。可先确认架构: ```bash dpkg --print-architecture # 应为 arm64 ``` ### 6.1 先装证书(ECR / 精简镜像常见坑) 从 `public.ecr.aws` 拉的 Ubuntu 往往**没有**完整 CA,直接写 `https://` 国内镜像会报: `Certificate verification failed` / `No system certificates available. Try installing ca-certificates` 另外 Ubuntu 24.04 默认源常在 **`/etc/apt/sources.list.d/ubuntu.sources`**(DEB822),只改 `sources.list` 时,`apt` 仍会去 `ports.ubuntu.com`。 在 Ubuntu 内按顺序做: ```bash proot-distro login ubuntu # 1) 清掉官方 DEB822,避免和手写 sources.list 叠两套源 rm -f /etc/apt/sources.list.d/ubuntu.sources \ /etc/apt/sources.list.d/*.sources 2>/dev/null || true # 2) 先用 HTTP 临时源(不校验证书),装上 ca-certificates cat > /etc/apt/sources.list << 'EOF' deb http://ports.ubuntu.com/ubuntu-ports/ noble main restricted universe multiverse deb http://ports.ubuntu.com/ubuntu-ports/ noble-updates main restricted universe multiverse deb http://ports.ubuntu.com/ubuntu-ports/ noble-backports main restricted universe multiverse deb http://ports.ubuntu.com/ubuntu-ports/ noble-security main restricted universe multiverse EOF apt update apt install -y ca-certificates ``` ### 6.2 再换成国内 HTTPS 镜像(清华示例) ```bash cat > /etc/apt/sources.list << 'EOF' deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ noble main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ noble-updates main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ noble-backports main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ noble-security main restricted universe multiverse EOF apt update ``` | 镜像 | arm64 地址前缀(路径必须是 `ubuntu-ports`) | |------|-----------------------------------------------| | 清华 | `https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/` | | 阿里云 | `https://mirrors.aliyun.com/ubuntu-ports/` | | 中科大 | `https://mirrors.ustc.edu.cn/ubuntu-ports/` | | 华为云 | `https://repo.huaweicloud.com/ubuntu-ports/` | | 腾讯云 | `https://mirrors.cloud.tencent.com/ubuntu-ports/` | 阿里云示例: ```bash cat > /etc/apt/sources.list << 'EOF' deb https://mirrors.aliyun.com/ubuntu-ports/ noble main restricted universe multiverse deb https://mirrors.aliyun.com/ubuntu-ports/ noble-updates main restricted universe multiverse deb https://mirrors.aliyun.com/ubuntu-ports/ noble-backports main restricted universe multiverse deb https://mirrors.aliyun.com/ubuntu-ports/ noble-security main restricted universe multiverse EOF apt update ``` 若发行版不是 noble,把 `noble` 改成实际代号(`lsb_release -cs`)。 > 仅在 **x86_64 / amd64** 电脑上的 Ubuntu 才用 `.../ubuntu/`;安卓 Termux 场景请始终用 `ubuntu-ports`。 > 证书装好前不要用 `https://` 国内镜;也可全程临时用清华 **http**(`http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/`),装完 `ca-certificates` 再改回 https。 --- ## 7.(可选)让 Ubuntu 也开 SSH ### 先分清:两套 SSH,端口、用户、密码全不同 | | **Termux SSH**(第 3 节) | **Ubuntu SSH**(本节) | |--|--------------------------|------------------------| | 端口 | **`8022`** | **`10022`** | | 在哪跑 | Termux 里直接 `sshd` | 必须 `proot-distro login ubuntu --detach -- /usr/sbin/sshd -D` | | 电脑怎么连 | `ssh -p 8022 $(whoami)@手机IP` | `ssh -p 10022 root@手机IP` | | 用户名 | Termux 的 `whoami`(常见 `u0_a××`) | 固定 **`root`** | | 密码 | Termux 里 `passwd` 设的 | Ubuntu 里 `passwd root` 设的 | | 登进去是什么 | Termux 壳(`pkg`、`proot-distro`) | Ubuntu(`apt`、装 NodeLio) | > **口诀**:`8022` = Termux 壳;`10022` = Ubuntu 里。 > **最常见误操作**:电脑连了 `8022` 却当 Ubuntu 用(没有 `apt` / 找不到 NodeLio);或连 `10022` 却用 Termux 用户名/密码 → 一直失败。 > **只配过配置、没跑下面的 ②**:`10022` 根本没在听,电脑会「连接被拒绝 / Connection refused」。 请先完成 **第 6 节** 换源,再执行本节的 `apt install`。 分两步:**先**用交互 `login` 装好并改配置,**再**在 Termux 里用 `--detach` 后台拉起 sshd。 **① 交互进入 Ubuntu(会得到 shell,用来安装/改配置):** ```bash proot-distro login ubuntu # ↑ 进入 Ubuntu shell;装完配置后输入 exit 回到 Termux ``` ```bash apt update apt install -y openssh-server mkdir -p /run/sshd ssh-keygen -A # 改成 10022(不要留默认 22,安卓上常和别的冲突且易搞混) sed -i 's/^#\?Port .*/Port 10022/' /etc/ssh/sshd_config grep -q '^Port ' /etc/ssh/sshd_config || echo 'Port 10022' >> /etc/ssh/sshd_config # 允许监听所有网卡(否则有的环境只绑 127.0.0.1,局域网电脑连不上) sed -i 's/^#\?ListenAddress.*/ListenAddress 0.0.0.0/' /etc/ssh/sshd_config grep -q '^ListenAddress ' /etc/ssh/sshd_config || echo 'ListenAddress 0.0.0.0' >> /etc/ssh/sshd_config # Ubuntu 默认禁止 root 密码登录(PermitRootLogin prohibit-password), # 不改的话能连上端口但密码会一直被拒,看起来像「密码错误」。 sed -i 's/^#\?PermitRootLogin.*/PermitRootLogin yes/' /etc/ssh/sshd_config grep -q '^PermitRootLogin' /etc/ssh/sshd_config || echo 'PermitRootLogin yes' >> /etc/ssh/sshd_config sed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication yes/' /etc/ssh/sshd_config grep -q '^PasswordAuthentication' /etc/ssh/sshd_config || echo 'PasswordAuthentication yes' >> /etc/ssh/sshd_config # 确认这三行(Port 必须是 10022) grep -E '^(Port|ListenAddress|PermitRootLogin|PasswordAuthentication)' /etc/ssh/sshd_config passwd root # 设置 Ubuntu 的 root 密码(不是 Termux 的 passwd) exit # 必须先 exit,回到 Termux,再执行下面的 --detach ``` **② 在 Termux 提示符下后台拉起 Ubuntu 的 sshd(不会进 shell):** ```bash # 确认当前是 Termux(不是 Ubuntu 的 root@…),再执行: # - 可以在手机 Termux 里执行 # - 也可以在「电脑已用 8022 SSH 进 Termux」的会话里执行(推荐:本机先配好再拉起 10022) # - 不要在 proot-distro login ubuntu 进到的 Ubuntu shell 里执行 # - 不要在已连上的 10022 会话里杀/重拉本条(会把自己踢掉) pkill -f '/usr/sbin/sshd' || true # ↑ 必须带 /usr/sbin/sshd;不要用裸 pkill sshd,会误杀 Termux 的 8022 proot-distro login ubuntu --detach -- /usr/sbin/sshd -D # ↑ 只后台跑 sshd;监听 Ubuntu 配置的端口 10022 ``` > 首次启动若确定没有旧进程,可省略 `pkill`;**每次重新拉起或改完 `sshd_config` 后务必先杀再启**,否则常见「Address already in use」或连上仍是旧配置。 > proot **没有可用的 systemd**:不要指望 `systemctl start ssh`;必须以本条 `--detach -- /usr/sbin/sshd -D` 拉起。 **③ 验活(在 Termux 里做,确认 10022 真的在听):** ```bash # 应能看到含 /usr/sbin/sshd 的进程 ps aux | grep '/usr/sbin/sshd' | grep -v grep # 看端口(有其一即可;没有 ss/netstat 可跳过,改用本机试连) ss -lntp 2>/dev/null | grep 10022 # 或:netstat -lntp 2>/dev/null | grep 10022 # 本机先通再测局域网(密码是 Ubuntu 的 root) ssh -p 10022 -o StrictHostKeyChecking=no root@127.0.0.1 ``` 电脑连接(用户名必须是 **`root`**,端口 **`10022`**): ```bash ssh -p 10022 root@手机IP # 不要写成 8022,也不要用 Termux 的用户名 ``` | 现象 | 多半原因 | |------|----------| | Connection refused / 连不上 10022 | 没执行 ②,或进程已死(息屏杀后台)→ 重跑 ② + 第 8 节 wake-lock | | 能连但密码错 | 用了 Termux 密码;或未改 `PermitRootLogin` / 未 `passwd root` | | 连上后没有 `apt`、像安卓壳 | 实际连的是 **8022**(Termux),改连 **10022** | | `Address already in use` | 旧 sshd 没杀掉 → `pkill -f '/usr/sbin/sshd'` 后再 ② | > proot 环境不是完整虚拟机:部分服务、systemd 能力有限;以能登录 shell、跑用户态程序为主。重启后需重新拉起(或写入第 9 节开机脚本)。 ### 对照:两种 `login` 写法 · 两套 SSH 端口(务必分清) | | **交互进 Ubuntu** | **后台只跑 Ubuntu 的 sshd** | |--|-------------------|------------------------------| | **命令** | `proot-distro login ubuntu` | `proot-distro login ubuntu --detach -- /usr/sbin/sshd -D` | | **作用** | 打开 Ubuntu 的交互 shell,用来 `apt`、装软件、`tmux`、跑 NodeLio 菜单等 | **不**给你 shell;在后台拉起 Ubuntu 内的 `/usr/sbin/sshd`,方便电脑 SSH 进来 | | **终端表现** | 提示符变成 Ubuntu 的,输入命令都在 Ubuntu 里 | 命令立刻返回 Termux 提示符;sshd 在后台跑 | | **何时用** | 日常操作、装包、配置、进 tmux;本节 ① | 本节 ②;开机脚本里拉起 `10022` | | **不要混用** | 在「已 login 的 Ubuntu shell」里再执行带 `--detach` 的整行,容易搞不清环境 | 想敲命令时不要用这条——它不会进交互 shell | **两套 SSH(端口完全不同):** | SSH 在哪 | 怎么启动 | **端口** | 电脑怎么连 | 用户 / 密码 | |----------|----------|----------|------------|-------------| | **Termux 自己**(第 3 节) | Termux 里执行 `sshd` | **`8022`** | `ssh -p 8022 用户名@手机IP` | Termux 的 `whoami` + Termux 里 `passwd` | | **Ubuntu 里**(本节) | Termux 里执行 `… --detach -- /usr/sbin/sshd -D` | **`10022`** | `ssh -p 10022 root@手机IP` | Ubuntu 的 **`root`** + Ubuntu 里 `passwd root` | > **记口诀**:`8022` = Termux 壳;`10022` = Ubuntu 里。`login ubuntu` = 人进去干活;`login ubuntu --detach -- …sshd` = 只把 Ubuntu 的 SSH 挂后台。 ### 已装过 SSH、能连端口但密码一直错 / 仍连不上 在 Ubuntu 里核对配置后,于 Termux 重启 sshd: ```bash proot-distro login ubuntu passwd root # 可再设一次,确认记住的是这一份 sed -i 's/^#\?Port .*/Port 10022/' /etc/ssh/sshd_config grep -q '^Port ' /etc/ssh/sshd_config || echo 'Port 10022' >> /etc/ssh/sshd_config sed -i 's/^#\?ListenAddress.*/ListenAddress 0.0.0.0/' /etc/ssh/sshd_config grep -q '^ListenAddress ' /etc/ssh/sshd_config || echo 'ListenAddress 0.0.0.0' >> /etc/ssh/sshd_config sed -i 's/^#\?PermitRootLogin.*/PermitRootLogin yes/' /etc/ssh/sshd_config grep -q '^PermitRootLogin' /etc/ssh/sshd_config || echo 'PermitRootLogin yes' >> /etc/ssh/sshd_config sed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication yes/' /etc/ssh/sshd_config grep -q '^PasswordAuthentication' /etc/ssh/sshd_config || echo 'PasswordAuthentication yes' >> /etc/ssh/sshd_config grep -E '^(Port|ListenAddress|PermitRootLogin|PasswordAuthentication)' /etc/ssh/sshd_config exit # 在 Termux 里: pkill -f '/usr/sbin/sshd' || true proot-distro login ubuntu --detach -- /usr/sbin/sshd -D ps aux | grep '/usr/sbin/sshd' | grep -v grep ``` 再执行:`ssh -p 10022 root@手机IP`(本机可先试 `root@127.0.0.1`)。 --- ## 8. 保活:`termux-wake-lock` 与电池白名单(重要) 安卓默认会休眠、限制后台。挂 SSH、跑 NodeLio 等长任务时,**几乎必须**持有 wake-lock,并关掉对 Termux 的电池优化。 ### 8.1 通知栏 Acquire wakelock(最快) 1. 打开 Termux,保持会话在跑。 2. 下拉通知栏,找到 Termux 通知。 3. 点 **Acquire wakelock**(获取唤醒锁)。 4. 需要恢复省电时再点 **Release wakelock**。 通知里有「已持有唤醒锁」一类提示时,表示生效。 ### 8.2 命令行 `termux-wake-lock`(推荐写入脚本) 需已安装 **Termux:API** App,并在 Termux 内安装配套包: ```bash pkg install termux-api -y ``` 然后: ```bash termux-wake-lock # 获取唤醒锁,阻止深度休眠 # ... 启动 sshd / 服务 ... # termux-wake-unlock # 用完再释放(可选) ``` > 开机脚本里通常把 `termux-wake-lock` 写在**第一行有效命令**,见第 9 节。 ### 8.3 系统设置(各厂商名称略有差异) 在 **设置 → 应用 → Termux**(以及 Termux:Boot / Termux:API)中尽量做到: | 项 | 建议 | |----|------| | 电池 / 耗电管理 | 设为 **无限制 / 不优化 / Unrestricted** | | 后台活动 / 允许后台运行 | 开启 | | 自启动(部分国产 ROM) | 允许 Termux、Termux:Boot | | 多任务/最近任务 | 可「锁定」Termux,避免被一键清理划掉 | | 省电策略 | 关闭「深度休眠杀后台」类对 Termux 的限制 | 小米 / 华为 / OPPO / vivo 等还需在各自「自启动管理」「电池优化白名单」里放行。插电常开更稳。 ### 8.4 注意 - wake-lock 会增加耗电与发热,短期调试可随用随取;7×24 建议插电。 - 仅有 wake-lock、未关电池优化时,部分机型仍会杀进程。 - Android 12+ 另有「幻影子进程」限制,极端情况下长任务仍可能被系统杀掉;家庭常开优先用真机当小服务器时,务必做完本节 + 第 9 节。 --- ## 9. 开机自启:Termux:Boot 手机重启后,Termux 不会自动跑你的 `sshd` / Ubuntu 服务。需安装 [Termux:Boot](https://github.com/termux/termux-boot)(链接见上文资源表)。 ### 9.1 安装与首次激活 1. 安装 Termux:Boot(与主程序同源)。 2. **务必从桌面图标打开一次** Termux:Boot(仅安装不够,系统需注册开机广播)。 3. 按系统提示允许「自启动 / 后台运行」等权限。 ### 9.2 编写开机脚本 ```bash mkdir -p ~/.termux/boot ``` 目录下每个可执行脚本会在开机后按**文件名排序**依次执行。示例:启动 Termux 自带 `sshd` 并持有唤醒锁——创建 `~/.termux/boot/start-sshd`: ```bash cat > ~/.termux/boot/start-sshd << 'EOF' #!/data/data/com.termux/files/usr/bin/sh termux-wake-lock # 等 Wi-Fi 起来(按机型可改成 10~30) sleep 15 sshd EOF chmod +x ~/.termux/boot/start-sshd ``` 若还要拉起 Ubuntu 内 SSH(第 7 节端口 `10022`),可再建 `~/.termux/boot/start-ubuntu-sshd`: ```bash cat > ~/.termux/boot/start-ubuntu-sshd << 'EOF' #!/data/data/com.termux/files/usr/bin/sh # wake-lock 已在 start-sshd 里获取过则可省略;单独用本脚本时请取消下一行注释 # termux-wake-lock sleep 20 pkill -f '/usr/sbin/sshd' || true proot-distro login ubuntu --detach -- /usr/sbin/sshd -D EOF chmod +x ~/.termux/boot/start-ubuntu-sshd ``` 也可把多条启动命令写进同一个脚本;**第一件事先 `termux-wake-lock`**(官方 Termux:Boot 说明亦如此建议)。 若要开机拉起 NodeLio(需已按第 10 节装好 `tmux`,路径与二进制名按实际包修改): ```bash cat > ~/.termux/boot/start-nodelio << 'EOF' #!/data/data/com.termux/files/usr/bin/sh termux-wake-lock sleep 25 proot-distro login ubuntu -- bash -lc ' tmux has-session -t nodelio 2>/dev/null || \ /root/nodelio/nodelio.sh start -d ' EOF chmod +x ~/.termux/boot/start-nodelio ``` > 一键安装后目录默认 `~/nodelio`(root 登录 Ubuntu 时常为 `/root/nodelio`),用 `nodelio.sh start -d` 后台拉起。首次要看启动菜单时,先手动 `~/nodelio/nodelio.sh start` 跑通,再改开机脚本。MQTT 若为独立进程,可另开 session(如 `-t mqtt`)或同一 session 再开窗格。 ### 9.3 验证 1. 重启手机,等待约半分钟(含 Wi-Fi)。 2. 电脑再连:`ssh -p 8022 ...` 或 `ssh -p 10022 ...`。 3. 在 Termux 里:`ps aux | grep sshd`、通知栏是否仍显示持有 wakelock。 ### 9.4 常见坑 | 现象 | 处理 | |------|------| | 重启后脚本不跑 | 是否打开过一次 Termux:Boot;ROM 是否禁止自启动 | | 脚本跑了但 SSH 连不上 | 加大 `sleep`;确认已解锁手机(部分机型锁屏前无网) | | `termux-wake-lock` 无效 | 安装 Termux:API + `pkg install termux-api`;签名源是否与主程序一致 | | 插件打不开 / 报错 | 卸载后改用与 Termux **同一来源** 的 Boot/API 重装 | 官方说明:[termux/termux-boot](https://github.com/termux/termux-boot)。 --- ## 10. 用 tmux 挂后台跑 NodeLio(推荐) NodeLio 服务端有启动菜单等**交互**;在 Termux 的 Ubuntu 里若直接前台跑,关掉 SSH / 退出 shell 后进程常被带走。proot 也**没有完整 systemd**,不要指望 `systemctl` 托管。 需要两层一起做: | 层 | 做什么 | 解决什么 | |----|--------|----------| | **tmux** | 在 Ubuntu 里开会话跑程序,可 detach / attach | 断 SSH、关终端后进程仍在,还能回来看菜单与日志 | | **wake-lock + 电池白名单** | 第 8 节 | 安卓息屏/切后台不杀整棵 Termux 进程树(只装 tmux 救不了) | 配好后可再加第 9 节开机脚本;稳定自启时用环境变量 `NODELIO_NO_MENU=1` 跳过交互菜单。 ### 10.1 安装并开会话 一键安装已尽量装好 `tmux` 并写入 `~/nodelio/nodelio.sh` 时,直接: ```bash ~/nodelio/nodelio.sh start # 前台进菜单 # ~/nodelio/nodelio.sh start -d # ~/nodelio/nodelio.sh attach ``` 若需手动(未跑过一键脚本)在 Ubuntu 内: ```bash proot-distro login ubuntu apt update && apt install -y tmux # 新建名为 nodelio 的会话(名字可自定) tmux new -s nodelio ``` 在会话里进入程序目录并启动 NodeLio / MQTT(按你实际包名与路径)。需要脱离时:先按 **`Ctrl+b`**,松开后再按 **`d`**(detach)。SSH 可安全断开。 之后任意时候回来: ```bash proot-distro login ubuntu ~/nodelio/nodelio.sh attach # 或:tmux attach -t nodelio ``` 查看会话列表: ```bash tmux ls ``` ### 10.2 常用快捷键 默认**前缀键**是 **`Ctrl+b`**:先按住 `Ctrl` 再按 `b`,松开后立刻按下一键。 | 操作 | 按键 | |------|------| | 脱离会话(程序继续跑) | `Ctrl+b` 然后 `d` | | 新建窗口 | `Ctrl+b` 然后 `c` | | 下一窗口 / 上一窗口 | `Ctrl+b` 然后 `n` / `p` | | 按编号切窗口(0~9) | `Ctrl+b` 然后数字 | | 关闭当前窗格/窗口 | `Ctrl+b` 然后 `x`(再确认) | | 左右分屏 | `Ctrl+b` 然后 `%` | | 上下分屏 | `Ctrl+b` 然后 `"` | | 在窗格间切换 | `Ctrl+b` 然后方向键 | | 滚看历史输出 | `Ctrl+b` 然后 `[`,方向键/`PgUp`/`PgDn` 翻页,`q` 退出 | | 列出会话(命令行) | `tmux ls` | | 重新进入会话 | `tmux attach -t 会话名` | | 结束会话(杀里面的进程) | `tmux kill-session -t 会话名` | > 手机 Termux 软键盘若不好按 `Ctrl`:可在 Termux 额外键栏点 `CTRL`,或用电脑 SSH 进 Ubuntu 操作 tmux。 ### 10.3 不要单独指望这些 | 做法 | 说明 | |------|------| | 只 `nohup` / `&` | 断线后可能还在,但交互菜单难回看;安卓杀 Termux 时一样死 | | 只 `proot-distro … --detach` | 适合无交互的 `sshd`;首次要看 NodeLio 菜单时不合适 | | 只开 tmux、不做第 8 节 | SSH 断了程序还在,手机一休眠仍可能被杀 | ### 10.4 首次交互 vs 稳定自启 1. **首次**:`tmux new -s nodelio` → 前台看菜单、配 MQTT 等 → `Ctrl+b` `d` 挂起。 2. **日常再进**:`tmux attach -t nodelio`。 3. **开机自启**(已跑通后):见第 9 节 `start-nodelio` 示例;稳定自启用 `~/nodelio/nodelio.sh start -d`。 装 NodeLio 服务端见 **第 5.1 节**;家庭拓扑与 App 连节点见《家庭自建部署》。 --- ## 11. 排障速查 | 现象 | 处理 | |------|------| | `pkg` / `apt` 很慢或失败 | 换国内镜像后重试;检查手机网络与 DNS | | `proot-distro install ubuntu` 拉不动 / 报仓库错 | 优先用 ECR:`proot-distro install public.ecr.aws/ubuntu/ubuntu:24.04`(第 4 节);或 gh-proxy 下发行包本地装;并 `pkg upgrade proot-distro` | | `apt` 报 `binary-arm64/Packages 404` | 误用了 `.../ubuntu/`;arm64 须改成 `.../ubuntu-ports/`(见第 6 节)后重新 `apt update` | | HTTPS 报证书错误 / `No system certificates available` | 先用 `http://ports.ubuntu.com/ubuntu-ports/`(或清掉 `sources.list.d/*.sources`)执行 `apt install -y ca-certificates`,再改回国内 `https://`(第 6 节) | | 改了清华源仍在拉 `ports.ubuntu.com` | 删除 `/etc/apt/sources.list.d/ubuntu.sources` 等 DEB822 源后再 `apt update` | | proot 安装锁死 | 删除 `ubuntu.lock` 后重装(见第 4 节) | | SSH 连不上 | **先看端口**:`8022`=Termux,`10022`=Ubuntu(第 7 节对照表)。`10022` Connection refused → 多半没跑 `--detach … sshd` 或被系统杀掉 → 第 7 节②③ + 第 8 节 wake-lock。同一局域网;关电池优化 | | 连上了但环境不对 / 找不到 apt 或 NodeLio | 多半连错端口:`8022` 是 Termux,`10022` 才是 Ubuntu | | 能连 `10022` 但密码一直错 | 用户名必须是 **`root`**;密码是 Ubuntu 内 `passwd root`(不是 Termux);按第 7 节开 `PermitRootLogin yes` / `PasswordAuthentication yes` 后杀进程再 `--detach` | | `10022` 本机 `127.0.0.1` 通、电脑不通 | 查 `ListenAddress 0.0.0.0`(第 7 节①);手机与电脑是否同一 WiFi / 访客隔离 | | 执行了 `--detach … sshd` 却进不了 shell | 正常:这条只后台跑 sshd;要敲命令请用 `proot-distro login ubuntu`(第 7 节对照) | | 息屏 / 切后台后进程消失 | 第 8 节:wake-lock + 电池无限制;必要时锁定最近任务 | | 退出 SSH 后 NodeLio 没了 | 应在 tmux 里跑(第 10 节),不要裸前台;`tmux ls` 看会话是否还在 | | `tmux attach` 找不到会话 | 是否进错发行版/用户;`tmux ls`;是否曾 `kill-session` 或进程崩溃 | | 重启后服务全没了 | 第 9 节安装并激活 Termux:Boot,写好 `~/.termux/boot/` 脚本 | | `termux-wake-lock` 命令找不到 | `pkg install termux-api`,并安装同源 Termux:API App | | 找不到 `/storage/emulated/0` | 重新执行 `termux-setup-storage` 并授权 | | `curl …install-linux-arm64.sh` 失败 | 确认已装 `curl`/`ca-certificates`;用 `https://z-y.site/works/iot-env/…` 源站地址 | 装好 Ubuntu 后按 **第 5.1 节** 一键安装 NodeLio(arm64);更完整的家庭拓扑见《家庭自建部署》。 评论区