先确认条件和执行位置
建议准备一台运行 64 位 Android 的闲置手机、稳定 Wi-Fi、电脑和可用的模型 API 账号。实际使用建议至少 6 GB 内存、10 GB 可用空间,为安装、缓存和会话留余量;这是本文的容量建议,不是官方最低要求。模型主要由远程 API 提供,手机承担网关和工具执行。
本文固定四个操作位置:
| 标记 | 实际位置 | 用途 |
|---|---|---|
| 【手机】 | Android 设置、应用和浏览器 | 安装应用、后台权限 |
| 【Termux】 | 手机 Termux,或电脑 SSH 登录后的 Termux | SSH、Ubuntu 容器、tmux、自启动 |
| 【Ubuntu】 | Termux 中执行 proot-distro login ubuntu 后 |
Node.js、OpenClaw、飞书配置 |
| 【电脑】 | Mac 终端、Linux 终端或 Windows PowerShell | SSH 连接、端口转发 |
不要只凭提示符判断位置:Termux 的 echo "$PREFIX" 通常为 /data/data/com.termux/files/usr;Ubuntu 内可用 cat /etc/os-release 确认。
PRoot 提供 Linux 用户空间,使用的仍是 Android 内核;它不是完整虚拟机,也不提供 Docker 那样的隔离保证。本文不使用 systemd 管理 Gateway。PRoot-Distro 官方说明
安装手机应用与基础环境
【手机】从 F-Droid 安装 Termux 和 Termux:Boot。装好后分别打开一次;Boot 必须启动过一次,才能启用开机执行。
本流程不需要系统通知,因此 Termux:API 为可选项。若以后使用通知或电量接口,再安装同来源的 Termux:API 应用及 termux-api 软件包。
Termux 和插件必须来自同一安装来源,否则签名可能不兼容。Google Play 现有独立实验分支,不能继续用“已经永久停止维护”概括;本文统一使用 F-Droid。Termux 安装说明
【Termux】依次执行:
pkg update
pkg upgrade -y
pkg install -y proot-distro openssh tmux curl git
termux-wake-lock
uname -m
df -h "$HOME"
正常情况下,64 位 ARM 手机显示 aarch64。若是 32 位系统,先确认目标 Node.js 和原生依赖支持情况,不要直接继续本流程。
termux-wake-lock 用于降低休眠影响,不能保证 Android 永远不终止进程。
用电脑连接手机
【Termux】设置登录密码并启动 SSH:
passwd
whoami
sshd
ssh-keygen -lf "$PREFIX/etc/ssh/ssh_host_ed25519_key.pub"
记下 whoami 输出的用户名。手机 IP 从 Android 的“当前 Wi-Fi → 网络详情”查看,避免依赖可能受权限限制的网卡查询命令。电脑与手机需要能够互相访问。
【电脑】以下用户名和地址都要替换:
ssh -p 8022 [email protected]
首次连接核对手机显示的主机指纹,再输入 yes 和刚设置的密码。登录后所在位置是 Termux。
建议在电脑的 ~/.ssh/config 添加如下配置;Windows 对应用户目录下的 .ssh/config:
Host android-claw
HostName 192.168.1.50
User u0_a123
Port 8022
ServerAliveInterval 30
ServerAliveCountMax 3
以后用 ssh android-claw 连接。手机 IP 变化时修改 HostName,也可以在路由器中为手机设置 DHCP 地址保留。
可选:改为密钥登录
【电脑】先检查是否已有密钥;只有没有时才生成,避免覆盖旧密钥:
ssh-keygen -t ed25519
Mac/Linux 有 ssh-copy-id 时:
ssh-copy-id android-claw
Windows PowerShell 可用:
Get-Content "$env:USERPROFILE\.ssh\id_ed25519.pub" | ssh android-claw 'umask 077; mkdir -p ~/.ssh; cat >> ~/.ssh/authorized_keys'
另开一个窗口验证密钥登录成功,再考虑关闭密码登录。始终保留原连接,防止修改后无法进入。
安装 Ubuntu 用户空间
【Termux】先查看本机版本和帮助:
proot-distro --version
proot-distro install --help
新版支持 OCI 镜像,可固定使用 Ubuntu 24.04:
proot-distro install ubuntu:24.04
proot-distro login ubuntu
如果本机仍是旧版发行版别名机制,不支持 ubuntu:24.04,先运行 proot-distro list;确认提供 ubuntu 后改用 proot-distro install ubuntu。两种安装方式选一种即可。新版命令见 PRoot-Distro Quick start。
【Ubuntu】验证并准备依赖:
cat /etc/os-release
dpkg --print-architecture
apt update
apt install -y ca-certificates curl git build-essential python3
ARM64 手机应显示 arm64。以后重新 SSH 登录,仍需执行 proot-distro login ubuntu;在 Ubuntu 执行 exit 返回 Termux。
安装 Node.js 与 OpenClaw
【Ubuntu】当前 OpenClaw 安装页要求 Node 24.16+ 或 26.1+。本文选 Node 24 LTS;不要沿用旧教程的 Node 22 要求。OpenClaw 安装说明
使用 NodeSource 24.x 软件源:
curl -fsSL https://deb.nodesource.com/setup_24.x -o /tmp/nodesource-setup.sh
less /tmp/nodesource-setup.sh
bash /tmp/nodesource-setup.sh
apt install -y nodejs
node --version
npm --version
less 按 q 退出;Ubuntu 极简镜像未安装 less 时,可改用 cat 查看。下载或配置软件源失败就先处理错误,不要跳到安装步骤。NodeSource 官方仓库
先查询将要安装的精确版本和 Node 要求:
npm view openclaw@latest version engines --json
确认 Node 满足输出要求后,执行下面这一整段。它会记录实际安装版本,并按 npm 版本处理安装脚本开关:
mkdir -p /root/openclaw-deploy
OPENCLAW_VERSION="$(npm view openclaw@latest version)"
if [ -z "$OPENCLAW_VERSION" ]; then
echo '未能取得 OpenClaw 版本,请检查 npm 网络连接'
else
NPM_VERSION="$(npm --version)"
NPM_MAJOR="${NPM_VERSION%%.*}"
NPM_REST="${NPM_VERSION#*.}"
NPM_MINOR="${NPM_REST%%.*}"
if [ "$NPM_MAJOR" -ge 12 ] || { [ "$NPM_MAJOR" -eq 11 ] && [ "$NPM_MINOR" -ge 16 ]; }; then
npm install -g "openclaw@$OPENCLAW_VERSION" --allow-scripts=openclaw
else
npm install -g "openclaw@$OPENCLAW_VERSION"
fi
fi
只有安装成功后才继续:
openclaw --version
node --version > /root/openclaw-deploy/node-version.txt
npm list -g openclaw --depth=0 > /root/openclaw-deploy/package-version.txt
本文固定安装时查询到的版本,方便追踪;不代表该版本已经通过安卓兼容性认证。
完成初始化,先跑通控制台
【Ubuntu】先禁用不需要的局域网服务发现,再运行向导:
export OPENCLAW_DISABLE_BONJOUR=1
openclaw onboard --skip-daemon
向导选择建议:
| 项目 | 本文选择 |
|---|---|
| Gateway 模式 | 本地运行 / local |
| 监听地址 | loopback |
| 身份验证 | token,保留认证 |
| 模型提供商 | 与 API Key 对应的提供商 |
| 默认模型 | 账号实际有权限调用的模型 |
| 系统后台服务 | 跳过,由第 8 节脚本运行 |
| 渠道、额外技能 | 可以先跳过,基础聊天通过后再添加 |
自定义兼容 API 需要一起确认 Base URL、协议类型和模型 ID,不能仅因为“兼容 OpenAI”就把默认 OpenAI 地址与其他厂商的 Key 混用。当前跳过服务安装的参数是 --skip-daemon 或 --no-install-daemon;旧版参数以本机 openclaw onboard --help 为准。初始化命令说明
设置日志级别与单文件大小:
openclaw config set logging.level info
openclaw config set logging.maxFileBytes 10485760
当前版本提供日志轮转;这个值限制单个文件,不是整个日志目录总上限,仍需定期检查磁盘。日志说明
前台启动:
openclaw gateway run --bind loopback --port 18789
保持此窗口运行。另开一个电脑终端建立隧道:
ssh -N -o ExitOnForwardFailure=yes -L 18789:127.0.0.1:18789 android-claw
【电脑浏览器】访问 http://127.0.0.1:18789,按引导完成 Gateway 认证;令牌查看方式以 openclaw gateway --help 或向导给出的恢复命令为准。端口转发窗口必须保持打开。
如果电脑本地 18789 已被占用,改用 -L 18790:127.0.0.1:18789,浏览器访问 18790。
【另一窗口 → Ubuntu】检查网关:
openclaw gateway health
通过后在控制台发送一条普通聊天消息。页面能打开不等于模型可用;得到模型回复才算基础链路通过。 前台启动选项参见 Gateway 运行说明。
如果遇到 Android 网络接口异常
OPENCLAW_DISABLE_BONJOUR=1 是官方支持的禁用发现方式,只解决 Bonjour 路径问题,不保证解决所有 networkInterfaces() 异常。Bonjour 说明
【Ubuntu】用最小探针区分 Node/Android 限制和应用错误:
node -e 'try { console.log(require("node:os").networkInterfaces()); } catch (e) { console.error(e); process.exitCode = 1; }'
如果出现 uv_interface_addresses、EACCES 或系统错误 13,保存错误堆栈、Android 版本及 Node/OpenClaw 版本。若禁用 Bonjour 后仍无法启动,需要针对该版本定位调用点;此时不要继续配置自启动。
不直接套用旧帖对打包文件的替换脚本:新版目录和代码可能已变化,伪造局域网 IP 也会影响地址判断。本文没有提供未经设备验证的通用源码补丁;当前版本若不兼容,应先解决兼容问题或改用受支持的 Linux 主机。
接入飞书
先保留运行中的 Gateway,在另一个 SSH 窗口进入 Ubuntu。
【Ubuntu】当前版本使用:
openclaw channels login --channel feishu
该配置流程要求 OpenClaw 2026.5.29 或以上,并可在缺少插件时引导安装。选择国内 Feishu 域名;先只开启个人私聊,群聊后续按需配置。飞书配置说明
方式 A:扫码配置
在向导中选择扫码,用飞书扫描并完成创建和授权。向导会将私聊限定到扫码账号。配置结束后执行:
openclaw channels status --probe
在飞书里找到机器人发送“你好”,确认有模型回复。若国内客户端对二维码无反应,重新执行向导并选择手动配置。
方式 B:已有应用凭证,手动配置
【浏览器】进入飞书开放平台,创建或打开有权限管理的自建应用,启用机器人能力并取得 App ID、App Secret。
【Ubuntu】在上述向导中选择手动方式,填入凭证,并按向导当前要求完成权限和事件配置。长连接接收事件不需要公网回调地址。渠道工作方式
飞书后台还需确认:应用已经发布、你在可用范围内、所需权限已经批准,事件配置成功保存。消息接收事件和 API 权限是不同配置项,不要把事件标识当成权限名搜索。具体权限清单以当前插件向导要求为准。
若私聊策略为 pairing,机器人会返回配对码;保持 Gateway 运行,在 Ubuntu 执行:
openclaw pairing list feishu
# 把下面的实际配对码替换为机器人返回的值
openclaw pairing approve feishu 实际配对码
仅批准自己的配对请求。扫码模式通常直接使用账号白名单,不一定会出现配对码。群聊还要满足群白名单和 @ 规则。飞书访问控制
完成后再次发送消息验证。验证期间不能先停止 Gateway。
后台运行和退出后重启
本节采用“Termux 的 tmux → 持续运行的 PRoot 会话 → Ubuntu 启动循环”。脚本等待前台 Gateway 退出后再启动下一次,不依赖进程名字,也不会周期性重复拉起仍在运行的实例。
先回到第 6 节运行 Gateway 的窗口,按 Ctrl+C 停止临时实例。确认已经停止,再做下面步骤。
【Ubuntu】创建启动循环:
cat > /root/openclaw-supervise.sh <<'SCRIPT'
#!/bin/bash
set -u
umask 077
export OPENCLAW_DISABLE_BONJOUR=1
trap 'exit 0' INT TERM
cd /root || exit 1
failures=0
while true; do
started=$SECONDS
printf '[%s] 启动 Gateway\n' "$(date -Iseconds)"
openclaw gateway run --bind loopback --port 18789
rc=$?
elapsed=$((SECONDS - started))
printf '[%s] Gateway 退出,状态码=%s,运行=%ss\n' "$(date -Iseconds)" "$rc" "$elapsed"
if [ "$elapsed" -lt 60 ]; then
failures=$((failures + 1))
else
failures=0
fi
if [ "$failures" -ge 5 ]; then
echo '连续短时退出,停止自动重试。请修复配置后重新启动。'
exit 1
fi
sleep 15
done
SCRIPT
chmod 700 /root/openclaw-supervise.sh
bash -n /root/openclaw-supervise.sh
exit
最后的 exit 返回 Termux。
【Termux】启动独立 tmux 会话:
tmux new-session -d -s openclaw 'proot-distro login ubuntu -- bash /root/openclaw-supervise.sh'
tmux ls
tmux capture-pane -pt openclaw -S -80
若提示会话已存在,先查看它的输出,不再新建第二个实例。
检查应用状态:
proot-distro login ubuntu -- openclaw gateway health
proot-distro login ubuntu -- openclaw channels status --probe
启动较慢时,先看日志,等出现监听信息再做健康检查。随后断开 SSH,验证飞书依旧能回复。
需要看实时终端时用 tmux attach -t openclaw;按 Ctrl+B,松开,再按 D 脱离会话。Ctrl+C 用来停止,不能当成脱离操作。
该循环处理进程退出,不能修复“进程存在但卡住”,也不能在整个 Termux 被 Android 杀死后自救。连续失败限制是为了避免配置错误导致无限重启。
开机启动与手机后台设置
【Termux】创建启动文件。以下路径适用于标准 com.termux 安装:
mkdir -p "$HOME/.termux/boot"
cat > "$HOME/.termux/boot/20-openclaw" <<'SCRIPT'
#!/data/data/com.termux/files/usr/bin/bash
export PREFIX=/data/data/com.termux/files/usr
export PATH="$PREFIX/bin:$PATH"
termux-wake-lock
sshd
if ! tmux has-session -t openclaw 2>/dev/null; then
tmux new-session -d -s openclaw 'proot-distro login ubuntu -- bash /root/openclaw-supervise.sh'
fi
SCRIPT
chmod 700 "$HOME/.termux/boot/20-openclaw"
bash -n "$HOME/.termux/boot/20-openclaw"
bash "$HOME/.termux/boot/20-openclaw"
目录和首次打开要求见 Termux:Boot 官方说明。
【手机】为 Termux 与 Termux:Boot 允许后台运行、自启动,并将电池策略设为不受限制;厂商有“后台锁定”时也开启。各品牌设置名称不同。
重启手机并首次解锁,等待网络恢复,然后检查:
- 电脑能重新 SSH 登录。
tmux ls有 openclaw 会话。openclaw gateway health在 Ubuntu 中通过。- 飞书私聊得到回复。
- 熄屏 30 分钟后再次测试。
若手动运行启动文件成功、重启后失败,优先检查 Boot 是否打开过、后台限制及启动时网络状态。手机强行停止应用后,可能需要手动打开 Termux 再启动。
日常维护
以下命令除特别注明外都在【Termux】执行。
| 目的 | 命令 |
|---|---|
| 查看终端最近输出 | tmux capture-pane -pt openclaw -S -100 |
| 进入实时终端 | tmux attach -t openclaw |
| 检查 Gateway | proot-distro login ubuntu -- openclaw gateway health |
| 检查飞书 | proot-distro login ubuntu -- openclaw channels status --probe |
| 跟随应用日志 | proot-distro login ubuntu -- openclaw logs --follow |
| 查看磁盘占用 | df -h "$HOME" |
| 查看 Ubuntu 日志大小 | proot-distro login ubuntu -- du -sh /tmp/openclaw |
停止与重启
进入 tmux attach -t openclaw,按 Ctrl+C。启动循环设置了信号处理,正常情况下会话会结束。然后在 Termux 检查:
tmux has-session -t openclaw
proot-distro login ubuntu -- openclaw gateway health
预期是找不到该会话、Gateway 无法连接。若仍然健康,说明还有实例运行;先定位它所在终端,不要直接新开一份服务。
确认停止后,重新启动:
tmux new-session -d -s openclaw 'proot-distro login ubuntu -- bash /root/openclaw-supervise.sh'
暂时取消开机启动,可将脚本移到 boot 目录外:
mkdir -p "$HOME/.termux/boot-disabled"
mv "$HOME/.termux/boot/20-openclaw" "$HOME/.termux/boot-disabled/20-openclaw"
备份后再升级
先停止 Gateway,然后在【Ubuntu】执行:
umask 077
mkdir -p /root/backups
tar -czf "/root/backups/openclaw-$(date +%Y%m%d-%H%M%S).tar.gz" \
-C /root .openclaw openclaw-deploy openclaw-supervise.sh
备份包含凭证,应另存到受保护的位置;仅留在手机中无法应对设备损坏。如果自定义工作目录位于 .openclaw 外,或凭证依赖外部文件,也要另外备份。
升级时重新核对 Node 要求,按第 5 节安装目标精确版本。升级后先前台运行、测试控制台和飞书,再恢复 tmux。回退时需要同时考虑程序版本和配置/数据兼容性,不能保证只降 npm 包版本就能恢复。
故障定位表
| 现象 | 优先检查 | 下一步 |
|---|---|---|
| SSH 超时 | IP、同网互通、手机是否休眠 | 手机打开 Termux,检查 Wi-Fi 与后台权限 |
| SSH 拒绝连接 | sshd 是否启动、端口是否为 8022 | 在 Termux 执行 sshd |
openclaw: command not found |
是否进入 Ubuntu | 检查 command -v openclaw、npm prefix -g 与 PATH |
| Node 版本不满足 | 实际版本与 npm engines | 更新 Node,不能忽略 engine 错误 |
| npm 安装失败 | 第一处 ERR、剩余磁盘、网络、原生依赖编译 | 根据具体错误处理,WARN 不是成功依据 |
| systemd/服务安装报错 | 是否选择了安装 daemon | 使用跳过服务安装的向导与前台运行方式 |
| 网络接口错误 | 最小 Node 探针与堆栈 | 按第 6 节处理,不能认定一定是 Bonjour |
| 18789 已占用 | 是否同时启动了前台和 tmux 实例 | 停止重复实例,保留一套启动方式 |
| 控制台能打开但无回复 | 模型权限、余额、Base URL、模型 ID | 看应用日志中的模型请求错误 |
| 飞书完全无反应 | 渠道探针、发布状态、可用范围、事件连接 | 先确认 Gateway 在线,再核对飞书后台 |
| 收到配对码仍不能聊 | 批准的是否为当前自己的请求 | 查询 pairing 列表并重新验证 |
| 私聊正常、群聊不响应 | 群白名单、@ 要求 | 按访问控制配置群聊 |
| 熄屏后失联 | 后台限制、内存不足、进程是否被杀 | 改后台设置并重新做熄屏测试 |
| tmux 会话启动后消失 | 连续短时退出保护触发 | 查看应用文件日志或前台复现错误 |
完成验收
- 已记录 Android、PRoot-Distro、Ubuntu、Node.js 和 OpenClaw 版本。
- 控制台能正常调用模型。
- 飞书账号授权正确,私聊可回复。
- 退出电脑 SSH 后仍能回复。
- 重启并解锁手机后服务可以恢复。
- 熄屏测试通过,磁盘和日志占用正常。
- 已保存配置备份,知道如何停止服务和取消自启动。
达到以上条件后,可以作为个人实验或轻量常驻服务使用;后台恢复能力仍受手机系统策略限制。