先确认条件和执行位置

建议准备一台运行 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 安装 TermuxTermux:Boot。装好后分别打开一次;Boot 必须启动过一次,才能启用开机执行。

本流程不需要系统通知,因此 Termux:API 为可选项。若以后使用通知或电量接口,再安装同来源的 Termux:API 应用及 termux-api 软件包。

Termux 和插件必须来自同一安装来源,否则签名可能不兼容。Google Play 现有独立实验分支,不能继续用“已经永久停止维护”概括;本文统一使用 F-Droid。Termux 安装说明

【Termux】依次执行:

BASH
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:

BASH
passwd
whoami
sshd
ssh-keygen -lf "$PREFIX/etc/ssh/ssh_host_ed25519_key.pub"

记下 whoami 输出的用户名。手机 IP 从 Android 的“当前 Wi-Fi → 网络详情”查看,避免依赖可能受权限限制的网卡查询命令。电脑与手机需要能够互相访问。

【电脑】以下用户名和地址都要替换:

BASH
ssh -p 8022 [email protected]

首次连接核对手机显示的主机指纹,再输入 yes 和刚设置的密码。登录后所在位置是 Termux

建议在电脑的 ~/.ssh/config 添加如下配置;Windows 对应用户目录下的 .ssh/config

SSHCONFIG
Host android-claw
    HostName 192.168.1.50
    User u0_a123
    Port 8022
    ServerAliveInterval 30
    ServerAliveCountMax 3

以后用 ssh android-claw 连接。手机 IP 变化时修改 HostName,也可以在路由器中为手机设置 DHCP 地址保留。

可选:改为密钥登录

【电脑】先检查是否已有密钥;只有没有时才生成,避免覆盖旧密钥:

BASH
ssh-keygen -t ed25519

Mac/Linux 有 ssh-copy-id 时:

BASH
ssh-copy-id android-claw

Windows PowerShell 可用:

POWERSHELL
Get-Content "$env:USERPROFILE\.ssh\id_ed25519.pub" | ssh android-claw 'umask 077; mkdir -p ~/.ssh; cat >> ~/.ssh/authorized_keys'

另开一个窗口验证密钥登录成功,再考虑关闭密码登录。始终保留原连接,防止修改后无法进入。

安装 Ubuntu 用户空间

【Termux】先查看本机版本和帮助:

BASH
proot-distro --version
proot-distro install --help

新版支持 OCI 镜像,可固定使用 Ubuntu 24.04:

BASH
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】验证并准备依赖:

BASH
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 软件源:

BASH
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

lessq 退出;Ubuntu 极简镜像未安装 less 时,可改用 cat 查看。下载或配置软件源失败就先处理错误,不要跳到安装步骤。NodeSource 官方仓库

先查询将要安装的精确版本和 Node 要求:

BASH
npm view openclaw@latest version engines --json

确认 Node 满足输出要求后,执行下面这一整段。它会记录实际安装版本,并按 npm 版本处理安装脚本开关:

BASH
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

只有安装成功后才继续:

BASH
openclaw --version
node --version > /root/openclaw-deploy/node-version.txt
npm list -g openclaw --depth=0 > /root/openclaw-deploy/package-version.txt

本文固定安装时查询到的版本,方便追踪;不代表该版本已经通过安卓兼容性认证。

完成初始化,先跑通控制台

【Ubuntu】先禁用不需要的局域网服务发现,再运行向导:

BASH
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 为准。初始化命令说明

设置日志级别与单文件大小:

BASH
openclaw config set logging.level info
openclaw config set logging.maxFileBytes 10485760

当前版本提供日志轮转;这个值限制单个文件,不是整个日志目录总上限,仍需定期检查磁盘。日志说明

前台启动:

BASH
openclaw gateway run --bind loopback --port 18789

保持此窗口运行。另开一个电脑终端建立隧道:

BASH
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】检查网关:

BASH
openclaw gateway health

通过后在控制台发送一条普通聊天消息。页面能打开不等于模型可用;得到模型回复才算基础链路通过。 前台启动选项参见 Gateway 运行说明

如果遇到 Android 网络接口异常

OPENCLAW_DISABLE_BONJOUR=1 是官方支持的禁用发现方式,只解决 Bonjour 路径问题,不保证解决所有 networkInterfaces() 异常。Bonjour 说明

【Ubuntu】用最小探针区分 Node/Android 限制和应用错误:

BASH
node -e 'try { console.log(require("node:os").networkInterfaces()); } catch (e) { console.error(e); process.exitCode = 1; }'

如果出现 uv_interface_addressesEACCES 或系统错误 13,保存错误堆栈、Android 版本及 Node/OpenClaw 版本。若禁用 Bonjour 后仍无法启动,需要针对该版本定位调用点;此时不要继续配置自启动。

不直接套用旧帖对打包文件的替换脚本:新版目录和代码可能已变化,伪造局域网 IP 也会影响地址判断。本文没有提供未经设备验证的通用源码补丁;当前版本若不兼容,应先解决兼容问题或改用受支持的 Linux 主机。

接入飞书

先保留运行中的 Gateway,在另一个 SSH 窗口进入 Ubuntu。

【Ubuntu】当前版本使用:

BASH
openclaw channels login --channel feishu

该配置流程要求 OpenClaw 2026.5.29 或以上,并可在缺少插件时引导安装。选择国内 Feishu 域名;先只开启个人私聊,群聊后续按需配置。飞书配置说明

方式 A:扫码配置

在向导中选择扫码,用飞书扫描并完成创建和授权。向导会将私聊限定到扫码账号。配置结束后执行:

BASH
openclaw channels status --probe

在飞书里找到机器人发送“你好”,确认有模型回复。若国内客户端对二维码无反应,重新执行向导并选择手动配置。

方式 B:已有应用凭证,手动配置

【浏览器】进入飞书开放平台,创建或打开有权限管理的自建应用,启用机器人能力并取得 App ID、App Secret。

【Ubuntu】在上述向导中选择手动方式,填入凭证,并按向导当前要求完成权限和事件配置。长连接接收事件不需要公网回调地址。渠道工作方式

飞书后台还需确认:应用已经发布、你在可用范围内、所需权限已经批准,事件配置成功保存。消息接收事件和 API 权限是不同配置项,不要把事件标识当成权限名搜索。具体权限清单以当前插件向导要求为准。

若私聊策略为 pairing,机器人会返回配对码;保持 Gateway 运行,在 Ubuntu 执行:

BASH
openclaw pairing list feishu
# 把下面的实际配对码替换为机器人返回的值
openclaw pairing approve feishu 实际配对码

仅批准自己的配对请求。扫码模式通常直接使用账号白名单,不一定会出现配对码。群聊还要满足群白名单和 @ 规则。飞书访问控制

完成后再次发送消息验证。验证期间不能先停止 Gateway。

后台运行和退出后重启

本节采用“Termux 的 tmux → 持续运行的 PRoot 会话 → Ubuntu 启动循环”。脚本等待前台 Gateway 退出后再启动下一次,不依赖进程名字,也不会周期性重复拉起仍在运行的实例。

先回到第 6 节运行 Gateway 的窗口,按 Ctrl+C 停止临时实例。确认已经停止,再做下面步骤。

【Ubuntu】创建启动循环:

BASH
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 会话:

BASH
tmux new-session -d -s openclaw 'proot-distro login ubuntu -- bash /root/openclaw-supervise.sh'
tmux ls
tmux capture-pane -pt openclaw -S -80

若提示会话已存在,先查看它的输出,不再新建第二个实例。

检查应用状态:

BASH
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 安装:

BASH
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 允许后台运行、自启动,并将电池策略设为不受限制;厂商有“后台锁定”时也开启。各品牌设置名称不同。

重启手机并首次解锁,等待网络恢复,然后检查:

  1. 电脑能重新 SSH 登录。
  2. tmux ls 有 openclaw 会话。
  3. openclaw gateway health 在 Ubuntu 中通过。
  4. 飞书私聊得到回复。
  5. 熄屏 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 检查:

BASH
tmux has-session -t openclaw
proot-distro login ubuntu -- openclaw gateway health

预期是找不到该会话、Gateway 无法连接。若仍然健康,说明还有实例运行;先定位它所在终端,不要直接新开一份服务。

确认停止后,重新启动:

BASH
tmux new-session -d -s openclaw 'proot-distro login ubuntu -- bash /root/openclaw-supervise.sh'

暂时取消开机启动,可将脚本移到 boot 目录外:

BASH
mkdir -p "$HOME/.termux/boot-disabled"
mv "$HOME/.termux/boot/20-openclaw" "$HOME/.termux/boot-disabled/20-openclaw"

备份后再升级

先停止 Gateway,然后在【Ubuntu】执行:

BASH
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 openclawnpm 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 后仍能回复。
  • 重启并解锁手机后服务可以恢复。
  • 熄屏测试通过,磁盘和日志占用正常。
  • 已保存配置备份,知道如何停止服务和取消自启动。

达到以上条件后,可以作为个人实验或轻量常驻服务使用;后台恢复能力仍受手机系统策略限制。