云计算百科
云计算领域专业知识百科平台

300 元 vs 3000 元:旧安卓机秒变 24 小时 AI OpenClaw 服务器,不用 MacMini、不租云、不 Root

300 元 vs 3000 元:旧安卓机秒变 24 小时 AI OpenClaw 服务器,不用 MacMini、不租云、不 Root

在这里插入图片描述

本手册以 OnePlus 9 为例 · 无需 Root · 无需买 Mac Mini, 只用安卓手机 + Termux + SSH,即可玩转 OpenClaw。


目录

  • 准备工作
  • 安装 Termux 套件
  • 初始化 Termux 基础环境
  • 配置 SSH — 切换到 Mac/PC 操作
  • 安装 Ubuntu 虚拟环境
  • 安装 Node.js 和 OpenClaw
  • 初始化 OpenClaw 配置
  • 修复 Android proot 兼容性问题
  • 启动 Gateway(冒烟测试)
  • 配置飞书渠道
  • 生产级稳定性配置
  • 安全加固
  • 回到手机:系统设置
  • 常用命令速查
  • 常见问题排查

  • 在这里插入图片描述

    整体部署流程

    #mermaid-svg-fENF694snzdrkYvN{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-fENF694snzdrkYvN .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-fENF694snzdrkYvN .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-fENF694snzdrkYvN .error-icon{fill:#552222;}#mermaid-svg-fENF694snzdrkYvN .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-fENF694snzdrkYvN .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-fENF694snzdrkYvN .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-fENF694snzdrkYvN .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-fENF694snzdrkYvN .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-fENF694snzdrkYvN .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-fENF694snzdrkYvN .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-fENF694snzdrkYvN .marker{fill:#333333;stroke:#333333;}#mermaid-svg-fENF694snzdrkYvN .marker.cross{stroke:#333333;}#mermaid-svg-fENF694snzdrkYvN svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-fENF694snzdrkYvN p{margin:0;}#mermaid-svg-fENF694snzdrkYvN .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-fENF694snzdrkYvN .cluster-label text{fill:#333;}#mermaid-svg-fENF694snzdrkYvN .cluster-label span{color:#333;}#mermaid-svg-fENF694snzdrkYvN .cluster-label span p{background-color:transparent;}#mermaid-svg-fENF694snzdrkYvN .label text,#mermaid-svg-fENF694snzdrkYvN span{fill:#333;color:#333;}#mermaid-svg-fENF694snzdrkYvN .node rect,#mermaid-svg-fENF694snzdrkYvN .node circle,#mermaid-svg-fENF694snzdrkYvN .node ellipse,#mermaid-svg-fENF694snzdrkYvN .node polygon,#mermaid-svg-fENF694snzdrkYvN .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-fENF694snzdrkYvN .rough-node .label text,#mermaid-svg-fENF694snzdrkYvN .node .label text,#mermaid-svg-fENF694snzdrkYvN .image-shape .label,#mermaid-svg-fENF694snzdrkYvN .icon-shape .label{text-anchor:middle;}#mermaid-svg-fENF694snzdrkYvN .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-fENF694snzdrkYvN .rough-node .label,#mermaid-svg-fENF694snzdrkYvN .node .label,#mermaid-svg-fENF694snzdrkYvN .image-shape .label,#mermaid-svg-fENF694snzdrkYvN .icon-shape .label{text-align:center;}#mermaid-svg-fENF694snzdrkYvN .node.clickable{cursor:pointer;}#mermaid-svg-fENF694snzdrkYvN .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-fENF694snzdrkYvN .arrowheadPath{fill:#333333;}#mermaid-svg-fENF694snzdrkYvN .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-fENF694snzdrkYvN .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-fENF694snzdrkYvN .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-fENF694snzdrkYvN .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-fENF694snzdrkYvN .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-fENF694snzdrkYvN .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-fENF694snzdrkYvN .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-fENF694snzdrkYvN .cluster text{fill:#333;}#mermaid-svg-fENF694snzdrkYvN .cluster span{color:#333;}#mermaid-svg-fENF694snzdrkYvN div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-fENF694snzdrkYvN .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-fENF694snzdrkYvN rect.text{fill:none;stroke-width:0;}#mermaid-svg-fENF694snzdrkYvN .icon-shape,#mermaid-svg-fENF694snzdrkYvN .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-fENF694snzdrkYvN .icon-shape p,#mermaid-svg-fENF694snzdrkYvN .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-fENF694snzdrkYvN .icon-shape rect,#mermaid-svg-fENF694snzdrkYvN .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-fENF694snzdrkYvN .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-fENF694snzdrkYvN .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-fENF694snzdrkYvN :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

    📱 回到手机

    📱 手机操作

    💻 Mac/PC 通过 SSH 远程操作

    SSH 连接手机

    安装 Ubuntu 虚拟环境

    安装 Node.js + OpenClaw

    初始化 OpenClaw 配置

    修复 Android 兼容性 Patch

    冒烟测试 Gateway

    配置飞书渠道

    生产级稳定性配置watchdog · monitor · tmux · 开机自启

    安全加固

    🚀 开始

    安装 F-Droid 应用商店

    安装 Termux 套件Termux、Termux:API、Termux:Boot

    初始化 Termux更新软件包 · 安装基础工具

    配置 SSH安装 openssh · 设密码 · 查 IP · 启动 sshd

    🔁 切换点手机放下,拿起 Mac/PC后续全部通过 SSH 远程完成

    系统设置关闭电池优化 · 开启自启动

    重启手机验证

    ✅ 部署完成!发飞书消息验证


    运行时架构

    #mermaid-svg-1g9CCHcfkmLMnMvG{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-1g9CCHcfkmLMnMvG .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-1g9CCHcfkmLMnMvG .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-1g9CCHcfkmLMnMvG .error-icon{fill:#552222;}#mermaid-svg-1g9CCHcfkmLMnMvG .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-1g9CCHcfkmLMnMvG .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-1g9CCHcfkmLMnMvG .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-1g9CCHcfkmLMnMvG .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-1g9CCHcfkmLMnMvG .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-1g9CCHcfkmLMnMvG .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-1g9CCHcfkmLMnMvG .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-1g9CCHcfkmLMnMvG .marker{fill:#333333;stroke:#333333;}#mermaid-svg-1g9CCHcfkmLMnMvG .marker.cross{stroke:#333333;}#mermaid-svg-1g9CCHcfkmLMnMvG svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-1g9CCHcfkmLMnMvG p{margin:0;}#mermaid-svg-1g9CCHcfkmLMnMvG .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-1g9CCHcfkmLMnMvG .cluster-label text{fill:#333;}#mermaid-svg-1g9CCHcfkmLMnMvG .cluster-label span{color:#333;}#mermaid-svg-1g9CCHcfkmLMnMvG .cluster-label span p{background-color:transparent;}#mermaid-svg-1g9CCHcfkmLMnMvG .label text,#mermaid-svg-1g9CCHcfkmLMnMvG span{fill:#333;color:#333;}#mermaid-svg-1g9CCHcfkmLMnMvG .node rect,#mermaid-svg-1g9CCHcfkmLMnMvG .node circle,#mermaid-svg-1g9CCHcfkmLMnMvG .node ellipse,#mermaid-svg-1g9CCHcfkmLMnMvG .node polygon,#mermaid-svg-1g9CCHcfkmLMnMvG .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-1g9CCHcfkmLMnMvG .rough-node .label text,#mermaid-svg-1g9CCHcfkmLMnMvG .node .label text,#mermaid-svg-1g9CCHcfkmLMnMvG .image-shape .label,#mermaid-svg-1g9CCHcfkmLMnMvG .icon-shape .label{text-anchor:middle;}#mermaid-svg-1g9CCHcfkmLMnMvG .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-1g9CCHcfkmLMnMvG .rough-node .label,#mermaid-svg-1g9CCHcfkmLMnMvG .node .label,#mermaid-svg-1g9CCHcfkmLMnMvG .image-shape .label,#mermaid-svg-1g9CCHcfkmLMnMvG .icon-shape .label{text-align:center;}#mermaid-svg-1g9CCHcfkmLMnMvG .node.clickable{cursor:pointer;}#mermaid-svg-1g9CCHcfkmLMnMvG .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-1g9CCHcfkmLMnMvG .arrowheadPath{fill:#333333;}#mermaid-svg-1g9CCHcfkmLMnMvG .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-1g9CCHcfkmLMnMvG .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-1g9CCHcfkmLMnMvG .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-1g9CCHcfkmLMnMvG .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-1g9CCHcfkmLMnMvG .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-1g9CCHcfkmLMnMvG .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-1g9CCHcfkmLMnMvG .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-1g9CCHcfkmLMnMvG .cluster text{fill:#333;}#mermaid-svg-1g9CCHcfkmLMnMvG .cluster span{color:#333;}#mermaid-svg-1g9CCHcfkmLMnMvG div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-1g9CCHcfkmLMnMvG .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-1g9CCHcfkmLMnMvG rect.text{fill:none;stroke-width:0;}#mermaid-svg-1g9CCHcfkmLMnMvG .icon-shape,#mermaid-svg-1g9CCHcfkmLMnMvG .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-1g9CCHcfkmLMnMvG .icon-shape p,#mermaid-svg-1g9CCHcfkmLMnMvG .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-1g9CCHcfkmLMnMvG .icon-shape rect,#mermaid-svg-1g9CCHcfkmLMnMvG .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-1g9CCHcfkmLMnMvG .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-1g9CCHcfkmLMnMvG .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-1g9CCHcfkmLMnMvG :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

    安卓手机

    proot Ubuntu 虚拟环境(root@localhost:~#)

    Termux 原生环境(~ $)

    tmux 会话 openclaw

    SSH · 端口 8022

    WebSocket 长连接\\n自动重连

    进程守护 / 崩溃重启

    端口 + 进程双重巡检

    异常时推送

    定时清理日志

    💻 Mac/PC 终端

    sshd供 Mac/PC 远程登录

    termux-wake-lock阻止系统杀进程

    termux-notification常驻状态通知栏

    window 0 · watchdog每 60 秒巡检,崩溃自动重启 Gateway

    window 1 · monitor每 5 分钟巡检,异常推送通知

    OpenClaw Gatewayws://127.0.0.1:18789

    cron每天凌晨 3 点日志轮转

    飞书 App


    关于"执行位置"标记

    本手册每个操作步骤开头都会标注执行位置:

    标记含义提示符样式
    📱 手机 · Termux 在手机上打开 Termux 应用,直接输入命令 ~ $
    🐧 手机 · Ubuntu 在 Termux 中输入 proot-distro login ubuntu 进入后 root@localhost:~#
    💻 Mac / PC · 终端 在电脑上打开终端(Mac 用"终端"或 iTerm2) 因人而异
    🌐 浏览器 在手机或电脑浏览器中打开网页

    ⚠️ 最容易搞错的地方:openclaw 命令只能在 🐧 Ubuntu 环境中运行。在 📱 Termux 里直接输入 openclaw 会报 command not found,这不是安装有问题,是环境不对。


    一、准备工作

    1.1 硬件要求

    要求(例)OnePlus 9配置说明
    Android 10+ 出厂 Android 11,可升至 Android 14
    内存 ≥ 4GB 8GB / 12GB LPDDR5 ✅ 非常充裕
    存储剩余 ≥ 2GB 128GB / 256GB UFS 3.1
    稳定 Wi-Fi 安装包约 200~400MB,移动网络也可但耗流量

    1.2 提前准备好以下内容

    ① AI API 密钥(必须)

    OpenClaw 需要调用 AI 模型才能工作。根据你所在的网络环境选择对应的服务商:

    以 MiniMax 为例,国内直连、注册即有免费额度、API 兼容 OpenAI 格式:

  • 用浏览器打开 https://platform.minimaxi.com
  • 注册并登录账号
  • 点击左侧「账号信息」→「API 密钥」→「创建新的 API Key」,复制生成的密钥
  • 把这串密钥保存好,第七节会用到;在 onboard 向导中选择服务商时选「OpenAI」(MiniMax 兼容 OpenAI 接口格式)
  • 也可以使用其他国内的服务商:DeepSeek(https://platform.deepseek.com)、通义千问(https://dashscope.aliyun.com)、月之暗面 Kimi(https://platform.moonshot.cn)、智谱 GLM(https://open.bigmodel.cn),均支持 OpenAI 兼容接口,步骤类似。

    ② 飞书开发者账号(如果要用飞书渠道)

    需要一个飞书账号,在飞书开放平台创建自建应用。具体步骤见第十节,现在不用操作。

    1.3 搞清楚两个命令行环境

    全程涉及两个独立的命令行环境,这是最容易混淆的地方:

    环境 A:Termux 原生

    • 打开手机上 Termux 应用后直接看到的界面
    • 提示符:~ $
    • Android 上的 Linux 终端,系统管理命令在这里执行

    环境 B:Ubuntu(proot 虚拟系统)

    • 在 Termux 里输入 proot-distro login ubuntu 后进入
    • 提示符:root@localhost:~#
    • OpenClaw 安装在这里,所有 openclaw 命令必须在这里执行
    • 退出回 Termux:输入 exit 回车

    二、安装 Termux 套件

    2.1 安装 F-Droid

    📍 执行位置:🌐 手机浏览器

    ❌ 绝对不要从 Google Play 安装 Termux! Play 版本已停止维护超过两年,后续所有步骤都会失败。必须通过 F-Droid 安装。

    F-Droid 是什么:专门收录开源 Android 应用的应用商店,免费无广告。

  • 打开手机浏览器,访问 https://f-droid.org
  • 点击「Download F-Droid」,等待 .apk 下载完成
  • 点击下载的文件安装。若弹出「不允许安装未知来源应用」:
    • 进入 系统设置 → 安全 → 安装未知应用
    • 找到你的浏览器,开启安装权限
    • 返回,重新点击安装
  • 安装完毕后打开 F-Droid,等待软件包列表刷新完成(约 1~2 分钟)
  • 2.2 在 F-Droid 中安装 Termux 套件

    📍 执行位置:🌐 手机 · F-Droid 应用

    在 F-Droid 搜索框中逐个搜索安装:

    应用名称是否必装说明
    Termux ✅ 必装 核心终端环境,后续所有命令行操作在这里
    Termux:API ✅ 必装 提供 termux-wake-lock、termux-notification 等系统调用能力
    Termux:Boot ✅ 必装 让 Termux 在开机后自动启动,实现 7×24 运行
    Termux:Styling 可选 美化终端字体和颜色,与功能无关

    ⚠️ Termux:Boot 安装后必须手动打开一次:在应用列表找到 Termux:Boot,点击图标打开一次(会显示空白界面或立即关闭,正常)。不做这步,开机自启动权限不会激活。


    三、初始化 Termux 基础环境

    📍 执行位置:📱 手机 · Termux 终端

    如何打开 Termux:在手机桌面或应用抽屉找到 Termux 图标,点击打开。首次打开会看到黑色背景终端,提示符为 ~ $。点击终端区域唤出键盘,逐条输入以下命令,每条命令输入完毕按回车执行。

    # 更新软件包(需要 2~5 分钟,遇到 [Y/n] 输入 Y 回车)
    pkg update && pkg upgrade -y

    # 一次性安装所有必要工具:
    # proot-distro – 用来安装和运行 Ubuntu 虚拟环境
    # openssh – SSH 服务,让 Mac/PC 可以远程连进来
    # tmux – 终端复用器,让进程在后台持续运行
    # curl wget git – 下载和代码工具
    # termux-api – 配合 Termux:API 应用,调用手机系统功能
    pkg install proot-distro openssh tmux curl wget git termux-api -y

    安装完成后回到 ~ $ 提示符,没有 Error 字样即为成功。


    四、配置 SSH — 切换到 Mac/PC 操作

    这是整个部署流程的关键切换点。完成本节后,你可以把手机放到一边,后续所有配置都在 Mac/PC 终端里通过 SSH 远程完成,彻底告别手机小键盘。

    4.1 手机端:启动 SSH 服务

    📍 执行位置:📱 手机 · Termux 终端(提示符为 ~ $)

    # 设置 SSH 登录密码
    # 执行后提示 "New password:",输入密码(不显示字符,正常)
    # 再次提示 "Retype new password:",再输一遍确认
    # 记住这个密码,Mac 第一次连接时要用
    passwd

    # 查看手机在当前 Wi-Fi 下的 IP 地址
    # 直接执行 ifconfig,会显示完整网络接口信息
    ifconfig

    ℹ️ 执行后可能出现 Warning: cannot open /proc/net/dev (Permission denied). Limited output. 警告,这在 Termux 里是正常现象,忽略即可,不影响输出结果。

    在输出中找到 wlan0 这一段(Wi-Fi 无线网卡),其下方 inet 后面的地址就是你的手机 Wi-Fi IP:

    wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
    inet 10.19.30.69 netmask 255.255.255.0 broadcast 10.19.30.255

    👆 上例中 10.19.30.69 就是要记下的手机 IP。后面 SSH 连接、设置别名都要用到这个地址。

    ⚠️ 输出里可能还有 lo(回环)、rmnet_data2(移动数据)、tun0(VPN)等接口,认准 wlan0 即可。

    # 查看当前 Termux 的用户名(形如 u0_a353,每台手机不同)
    whoami

    # 启动 SSH 服务(执行后无输出直接回到提示符,说明已在后台运行)
    sshd

    ⚠️ 重要:Termux 的 SSH 端口是 8022,不是默认的 22。连接时必须加 -p 8022。

    4.2 Mac / PC 端:连接手机

    📍 执行位置:💻 Mac / PC · 终端

    如何打开 Mac 终端:按 Command + 空格 打开 Spotlight,输入「终端」,回车。 Windows 用户:打开 PowerShell,或安装 Git Bash。

    # 检查是否已有 SSH 密钥(如果输出文件路径,说明有,跳过下一步)
    ls ~/.ssh/id_ed25519

    如果提示 No such file or directory,先生成密钥:

    # 生成 SSH 密钥(一路回车即可,不需要设密码短语)
    ssh-keygen -t ed25519 -C "my_mac"

    # 将公钥复制到手机,实现免密登录
    # 把 u0_a353 替换成你 whoami 得到的用户名
    # 把 192.168.1.108 替换成你手机的实际 IP
    ssh-copy-id -p 8022 u0_a353@192.168.1.108

    提示输入密码时,输入你刚才在手机 passwd 设置的密码。成功后显示 Number of key(s) added: 1。

    # 测试连接(成功后就不再需要密码了)
    ssh u0_a353@192.168.1.108 -p 8022

    ✅ 验证成功:终端提示符变为 ~ $,说明你已通过 SSH 登录到手机的 Termux 环境。

    4.3 设置快捷别名(推荐)

    📍 执行位置:💻 Mac · 终端

    # 将以下两行添加到 ~/.zshrc(替换用户名和 IP)
    echo 'alias phone="ssh u0_a353@192.168.1.108 -p 8022"' >> ~/.zshrc
    echo 'alias claw="ssh -t u0_a353@192.168.1.108 -p 8022 \\"proot-distro login ubuntu\\""' >> ~/.zshrc

    # 立即生效
    source ~/.zshrc

    之后:

    • 输入 phone → 进入手机 Termux 环境
    • 输入 claw → 直接进入手机的 Ubuntu 环境

    💡 IP 变动问题:切换 Wi-Fi 后手机 IP 会变,SSH 失效。解决方法:安装 Tailscale(免费),获得永久固定虚拟 IP,一次配置永久有效。


    ══════════════════════════════════════

    🔁 切换点:手机放下,拿起 Mac/PC

    从第五节开始,所有操作都在 Mac/PC 的终端里通过 SSH 完成。

    需要回到手机亲自操作的场景只剩两个:

    • 第十三节:手机系统设置(需要手动点击,无法远程)
    • 重启验证:重启手机后等待自启动

    ══════════════════════════════════════


    五、安装 Ubuntu 虚拟环境

    📍 执行位置:💻 Mac · 终端(已 SSH 进入手机 Termux,提示符为 ~ $)

    如果还没连接,先执行 phone(或 ssh u0_a353@192.168.1.108 -p 8022)登录手机。

    💡 为什么需要 Ubuntu? OpenClaw 运行时需要向 /tmp 目录写入临时文件,原生 Android 系统禁止此操作(除非 Root)。通过 proot-distro 运行 Ubuntu 可绕过此限制,完全无需 Root。

    # 下载并安装 Ubuntu(约 100~200MB,视网速需要 3~10 分钟)
    # 过程中会显示进度条,耐心等待
    proot-distro install ubuntu

    安装完成后显示类似 Ubuntu installed successfully,回到 ~ $ 提示符。

    # 进入 Ubuntu 环境
    proot-distro login ubuntu

    ✅ 验证成功:提示符从 ~ $ 变为 root@localhost:~#,说明已进入 Ubuntu 虚拟环境。


    六、安装 Node.js 和 OpenClaw

    📍 执行位置:💻 Mac · 终端(SSH → Ubuntu,提示符为 root@localhost:~#)

    如果关闭了终端或断开了 SSH,重新连接后先执行 proot-distro login ubuntu 进入 Ubuntu。

    # 更新 Ubuntu 软件包并安装基础编译工具(需要 2~5 分钟)
    apt update && apt upgrade -y
    apt install -y curl git build-essential

    # 添加 Node.js 22 官方安装源
    # OpenClaw 要求 Node.js ≥ v22,Ubuntu 默认源里的版本太旧
    curl -fsSL https://deb.nodesource.com/setup_22.x | bash

    执行后会看到一大段输出,最后提示 Run apt-get install -y nodejs 即为成功。

    # 安装 Node.js
    apt install -y nodejs

    # 验证版本(必须是 v22.x.x 或更高)
    node –version

    看到类似 v22.13.1 的输出。如果显示 v18 或更低,说明上一步添加官方源没有成功,需重新执行。

    # 安装 OpenClaw(需要几分钟,有 WARN 警告是正常的,只要没有 ERR 就没问题)
    npm install -g openclaw@latest

    # 验证安装成功(输出版本号即为成功)
    openclaw –version

    ✅ 验证成功:输出版本号,如 OpenClaw 2026.3.13 (61d171a)。若提示 command not found,确认你在 Ubuntu 环境(root@localhost:~#)而非 Termux(~ $)。


    七、初始化 OpenClaw 配置

    📍 执行位置:💻 Mac · 终端(SSH → Ubuntu,提示符为 root@localhost:~#)

    openclaw onboard

    这条命令会启动交互式配置向导,用方向键和回车操作:

    问题 1:Continue? (personal mode)

    • 默认光标在「No」,按 左方向键 ← 切换到「Yes」,再按回车
    • ⚠️ 直接回车会选「No」退出向导,需重新执行

    问题 2:选择 AI 服务商

    • 用上下方向键选择你的 API Key 对应的服务商(Gemini / OpenAI / Claude 等),回车确认

    问题 3:输入 API Key

    • 将 API Key 粘贴进去(Mac 上 Command+V 粘贴)
    • ⚠️ 输入时屏幕不显示字符,这是正常的安全设计

    问题 4:Gateway Bind 地址(⚠️ 关键!)

    • 必须选 Loopback (127.0.0.1)
    • ❌ 绝对不能选 0.0.0.0,会导致 Gateway 启动后立刻崩溃

    问题 5:Install daemon

    • 选 –no-daemon 或跳过,proot 环境不支持 daemon 模式

    ⚠️ 如果报错 ERR_SYSTEM_ERROR Unknown system error 13,改用:

    openclaw onboard –no-daemon

    ✅ 验证成功:向导最后显示 Doctor complete,配置已写入 ~/.openclaw/openclaw.json。


    八、修复 Android proot 兼容性问题

    📍 执行位置:💻 Mac · 终端(SSH → Ubuntu,提示符为 root@localhost:~#)

    OpenClaw 在 Android proot 环境下有两处系统调用会失败,必须手动修复。

    8.1 修复主程序的 networkInterfaces 问题

    原因:OpenClaw 调用 os.networkInterfaces() 获取网络接口信息,Android 内核对此调用有限制,会抛出异常导致崩溃。需加 try-catch 保护,失败时返回模拟数据。

    # 将 patch 脚本写入临时文件
    # 以下是一整段命令,从 cat 开始到 PATCHEOF 结束,全部复制后一次性粘贴并回车
    cat > /tmp/patch_networkInterfaces.js << 'PATCHEOF'
    const fs = require('fs');
    const { execSync } = require('child_process');

    const result = execSync(
    'grep -rl "pickPrimaryLanIPv4" /usr/lib/node_modules/openclaw/dist/'
    ).toString().trim();
    const file = result.split('\\n')[0];
    if (!file) { console.error('❌ 未找到目标文件,请确认 openclaw 已正确安装'); process.exit(1); }

    console.log('目标文件:' + file);
    const content = fs.readFileSync(file, 'utf8');
    fs.writeFileSync(file + '.bak', content);

    const FALLBACK = '{ lo: [{ address: "127.0.0.1", netmask: "255.0.0.0", family: "IPv4", mac: "00:00:00:00:00:00", internal: true, cidr: "127.0.0.1/8" }], eth0: [{ address: "192.168.1.100", netmask: "255.255.255.0", family: "IPv4", mac: "00:00:00:00:00:01", internal: false, cidr: "192.168.1.100/24" }] }';

    let count = 0;
    const patched = content.replace(
    /\\b(const|let|var)\\s+(\\w+)\\s*=\\s*os\\.networkInterfaces\\(\\)/g,
    (match, decl, varname) => {
    count++;
    return `${decl} ${varname}; try { ${varname} = os.networkInterfaces(); } catch(e) { ${varname} = ${FALLBACK}; }`;
    }
    );

    fs.writeFileSync(file, patched);
    console.log('✅ 已替换 ' + count + ' 处 networkInterfaces 调用');
    PATCHEOF

    # 执行 patch 脚本
    node /tmp/patch_networkInterfaces.js

    ✅ 验证成功:输出 目标文件:/usr/lib/node_modules/… 和 ✅ 已替换 2 处 networkInterfaces 调用。脚本自动定位文件,无需手动指定文件名或行号。

    8.2 修复 Bonjour/mDNS 组件问题

    原因:OpenClaw 内嵌的 Bonjour 组件同样调用了 os.networkInterfaces(),需单独修复。

    FILE=/usr/lib/node_modules/openclaw/node_modules/@homebridge/ciao/lib/NetworkManager.js

    # 确认文件存在(输出文件路径正常;若报 No such file 说明 OpenClaw 安装有问题)
    ls $FILE

    # 备份(出错可用 cp ${FILE}.bak $FILE 还原)
    cp $FILE ${FILE}.bak

    # 第一步:将安全函数定义写入临时文件
    cat > /tmp/nm_patch.js << 'EOF'
    // Android proot patch — injected by SOP setup script
    const _origNetIf = require("os").networkInterfaces.bind(require("os"));
    const _safeNetIf = () => { try { return _origNetIf(); } catch(e) { return { lo: [{ address: "127.0.0.1", netmask: "255.0.0.0", family: "IPv4", mac: "00:00:00:00:00:00", internal: true, cidr: "127.0.0.1/8" }], eth0: [{ address: "192.168.1.100", netmask: "255.255.255.0", family: "IPv4", mac: "00:00:00:00:00:01", internal: false, cidr: "192.168.1.100/24" }] }; } };

    EOF

    # 第二步:将函数定义注入到 NetworkManager.js 文件开头
    { cat /tmp/nm_patch.js; cat $FILE; } > /tmp/nm_temp.js && mv /tmp/nm_temp.js $FILE

    # 第三步:将所有函数调用替换为安全版本
    sed -i 's/os_1\\.default\\.networkInterfaces()/_safeNetIf()/g' $FILE

    # 验证三步均正确完成
    echo "=== 文件开头(应看到注入的函数定义)==="
    head -3 $FILE
    echo "=== _safeNetIf 调用次数(正常应为 5)==="
    grep -c '_safeNetIf()' $FILE

    ✅ 验证成功:head -3 第一行是 // Android proot patch,grep -c 输出 5。

    ⚠️ 三步缺一不可:第二步是把函数注入文件,第三步是替换调用,少任何一步运行时会报 _safeNetIf is not defined。

    8.3 禁用 Bonjour 避免启动警告

    openclaw config set bonjour.enabled false 2>/dev/null || true

    💡 如果报错说字段不存在,忽略并继续。Bonjour 报错是非致命的,Gateway 仍正常工作。


    九、启动 Gateway(冒烟测试)

    📍 执行位置:💻 Mac · 终端(SSH → Ubuntu,提示符为 root@localhost:~#)

    📌 本节是冒烟测试:验证 Gateway 能否正常启动。确认成功后按 Ctrl+C 停止即可,持久化运行由第十一节的 tmux + watchdog 接管。

    openclaw gateway –verbose

    ✅ 验证成功:看到以下输出说明 Gateway 正常:

    [gateway] listening on ws://127.0.0.1:18789, ws://[::1]:18789

    确认后按 Ctrl+C 停止,继续下一节。

    获取 Gateway Token(如果需要)

    Gateway 运行时,可用手机浏览器访问 http://localhost:18789 看控制面板。若提示 token missing,另开终端窗口,SSH 进入手机后执行:

    proot-distro login ubuntu — cat ~/.openclaw/openclaw.json | grep token

    复制 token 值粘贴到控制面板输入框,点击「连接」。


    十、配置飞书渠道

    10.1 在飞书开放平台创建自建应用

    📍 执行位置:🌐 电脑或手机浏览器

    第一步:创建应用

  • 打开 https://open.feishu.cn,登录飞书账号
  • 点击「开发者后台」→「创建自建应用」
  • 填写应用名称(如 OpenClaw Bot)和描述,点击「确认创建」
  • 第二步:添加机器人能力(⚠️ 关键步骤,漏掉则无法收发消息)

  • 进入刚创建的应用,左侧找到「添加应用能力」
  • 在能力列表中找到「机器人」,点击「添加」并确认
  • ⚠️ 这一步非常容易漏掉。没有添加机器人能力时,应用在飞书中只是普通应用,无法作为聊天机器人接收和回复消息。

    第三步:配置权限

  • 左侧点击「权限管理」,在搜索框逐一搜索以下权限并开通:
  • 权限标识权限说明用途
    im:message 获取与发送单聊、群组消息 机器人发消息
    im:message.receive_v1 接收消息事件 机器人收消息
    im:chat 获取与更新群组信息 群聊场景
    contact:user.id:readonly 获取用户 user_id 配置安全白名单时需要

    第四步:订阅消息事件

  • 左侧点击「事件与回调 → 事件配置」
  • 选择「使用长连接接收事件」(无需填写回调 URL,OpenClaw 用 WebSocket 长连接)
  • 点击「添加事件」,搜索 im.message.receive_v1,点击确认添加
  • 第五步:记录凭证

  • 左侧点击「凭证与基础信息」,记下:
    • App ID(形如 cli_xxxxxxxxxxxxxxxx)
    • App Secret(点击「查看」后复制)
  • 第六步:发布应用

  • 左侧点击「应用发布 → 版本管理与发布」,点击「创建版本」,填写版本号后「申请发布」
  • 💡 个人飞书账号:选「创建个人应用」,发布流程相同但无需等管理员审核,立即生效。企业账号如需管理员审核,联系管理员在后台通过即可。

    10.2 通过 onboard 向导绑定飞书,并完成账号配对

    📍 执行位置:💻 Mac · 终端(SSH → Ubuntu,提示符为 root@localhost:~#)

    📌 整体流程说明:绑定飞书分为两个阶段——①通过 onboard 向导填入 App 凭证(让 OpenClaw 知道用哪个飞书应用);②启动 Gateway 后在飞书中触发配对(让 OpenClaw 知道哪个飞书用户是允许的主人)。两个阶段缺一不可。

    阶段一:填入飞书 App 凭证

    openclaw onboard

    向导启动后,选择「飞书(Feishu)」渠道,然后依次输入上一步记下的 App ID 和 App Secret,按回车确认,向导完成后回到命令提示符。

    阶段二:启动 Gateway,触发飞书配对

    配对需要 Gateway 在运行中才能接收飞书发来的消息。在同一个 Ubuntu 终端里,把 Gateway 临时放到后台运行:

    # 将 Gateway 放到后台启动,日志写入临时文件
    openclaw gateway > /tmp/openclaw/openclaw.log 2>&1 &

    # 等待 3 秒让 Gateway 完全启动
    sleep 3

    # 确认 Gateway 已在运行(有输出内容表示正常)
    tail -5 /tmp/openclaw/openclaw.log

    ✅ 看到 listening on ws://127.0.0.1:18789 说明 Gateway 已就绪。

    阶段三:在飞书中触发配对消息

    📍 切换到手机或电脑的飞书 App

  • 打开飞书,在搜索框搜索你的机器人名称(如 OpenClaw Bot)
  • 点击进入私聊,发送任意一条消息(如「你好」)
  • 机器人会自动回复一条包含配对信息的消息,格式如下:
  • access not configured.
    Your Feishu user id: ou_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    Pairing code: 12345678

    ⚠️ 如果机器人没有回复:检查飞书应用是否已发布(10.1 第六步)、是否添加了机器人能力(10.1 第二步)、Gateway 是否在运行(用 tail -5 /tmp/openclaw/openclaw.log 确认)。

    阶段四:执行配对命令

    📍 切换回 Mac 终端(SSH → Ubuntu,提示符为 root@localhost:~#)

    把飞书机器人回复消息中的 Pairing code(上例中的 12345678)替换进以下命令执行:

    # 将 12345678 替换为飞书机器人回复的实际 Pairing code
    openclaw pairing approve feishu 12345678

    ℹ️ 这条命令的作用:把这个 Pairing code 对应的飞书账号加入 OpenClaw 的授权列表,之后该账号发来的消息才会被正常处理。执行成功后无特别提示,直接回到命令行即可。

    阶段五:验证配对成功

    # 停止之前的临时 Gateway
    pkill -x openclaw-gateway

    回到飞书,再次向机器人发送一条消息。如果机器人正常回复(不再出现 access not configured),说明配对完成。

    ⚠️ 群聊中需要 @机器人 才会响应;私聊直接发消息即可。

    💡 Gateway 目前是临时运行的。真正的持久化运行(开机自启、崩溃重启等)由下一节的 watchdog + tmux 接管,现在不用担心。


    十一、生产级稳定性配置

    以下配置让 OpenClaw 从"手动启动的测试服务"变成真正稳定的 7×24 服务。

    📍 执行位置:💻 Mac · 终端(SSH → 手机 Termux,提示符为 ~ $)

    如果当前在 Ubuntu(root@localhost:~#),先输入 exit 回到 Termux(~ $)。

    📌 本节命令说明:以下使用 proot-distro login ubuntu — 命令 的方式,在 Termux 里直接向 Ubuntu 内部写文件或执行命令,不需要先进入 Ubuntu。

    11.1 创建 watchdog 脚本(崩溃自动重启)

    proot-distro login ubuntu — tee /root/watchdog.sh << 'SCRIPT'
    #!/bin/bash

    LOG=/tmp/openclaw/watchdog.log
    mkdir -p /tmp/openclaw

    echo "=== Watchdog started at $(date) ===" >> $LOG

    while true; do
    if ! pgrep -x "openclaw-gateway" > /dev/null 2>&1; then
    echo "[$(date)] Gateway not running, restarting…" >> $LOG
    openclaw gateway >> /tmp/openclaw/openclaw.log 2>&1 &
    disown $!
    echo "[$(date)] Gateway restarted PID=$!" >> $LOG
    sleep 30
    else
    echo "[$(date)] Gateway OK PID=$(pgrep -x openclaw-gateway)" >> $LOG
    fi
    sleep 60
    done
    SCRIPT

    proot-distro login ubuntu — chmod +x /root/watchdog.sh

    ⚠️ watchdog 用 openclaw-gateway 检测进程。如果你的版本进程名不同,watchdog 会陷入无限重启循环。可在 Ubuntu 中执行 ps aux | grep openclaw 确认实际进程名,按需修改脚本。

    11.2 创建监控脚本

    proot-distro login ubuntu — tee /root/monitor.sh << 'SCRIPT'
    #!/bin/bash

    LOG=/tmp/openclaw/monitor.log
    mkdir -p /tmp/openclaw

    check_gateway() {
    if pgrep -x "openclaw-gateway" > /dev/null 2>&1; then echo "ok"; else echo "down"; fi
    }

    check_port() {
    if bash -c 'echo > /dev/tcp/127.0.0.1/18789' 2>/dev/null; then echo "ok"; else echo "down"; fi
    }

    check_log_size() {
    local size=$(du -sm /tmp/openclaw/ 2>/dev/null | cut -f1)
    echo "${size:-0}"
    }

    notify() {
    termux-notification –id 2 –title "OpenClaw 告警" –content "$1" –priority high 2>/dev/null || true
    echo "[$(date)] ALERT: $1" >> $LOG
    }

    echo "[$(date)] Monitor started" >> $LOG

    while true; do
    GATEWAY=$(check_gateway)
    PORT=$(check_port)
    LOG_SIZE=$(check_log_size)

    [ "$GATEWAY" = "down" ] && notify "Gateway 进程已停止,watchdog 正在重启…"
    [ "$PORT" = "down" ] && notify "Gateway 端口 18789 无响应"
    [ "$LOG_SIZE" -gt 500 ] && notify "日志目录已占用 ${LOG_SIZE}MB,请清理"

    echo "[$(date)] gateway=$GATEWAY port=$PORT log=${LOG_SIZE}MB" >> $LOG
    sleep 300
    done
    SCRIPT

    proot-distro login ubuntu — chmod +x /root/monitor.sh

    ⚠️ 端口检测用 bash 内置的 /dev/tcp 方式,比 nc 命令更可靠(proot 里不一定有 nc)。

    11.3 配置日志轮转

    # 安装 cron
    proot-distro login ubuntu — apt install -y cron

    # 创建日志轮转脚本
    proot-distro login ubuntu — tee /root/logrotate.sh << 'SCRIPT'
    #!/bin/bash
    LOG_DIR=/tmp/openclaw
    MAX_SIZE_MB=200
    size=$(du -sm $LOG_DIR 2>/dev/null | cut -f1)
    if [ "${size:-0}" -gt $MAX_SIZE_MB ]; then
    echo "[$(date)] Rotating logs (${size}MB)…" >> $LOG_DIR/rotate.log
    find $LOG_DIR -name "openclaw-*.log" -mtime +3 -delete
    echo "[$(date)] Done. New size: $(du -sm $LOG_DIR | cut -f1)MB" >> $LOG_DIR/rotate.log
    fi
    SCRIPT

    proot-distro login ubuntu — chmod +x /root/logrotate.sh

    # 设置每天凌晨 3 点自动执行
    proot-distro login ubuntu — bash -c '(crontab -l 2>/dev/null; echo "0 3 * * * bash /root/logrotate.sh") | crontab -'

    # 启动 cron(直接调用,兼容无 init 系统的 proot 环境)
    proot-distro login ubuntu — cron

    11.4 用 tmux 启动持久服务

    # 创建 openclaw tmux 会话并启动 watchdog
    # watchdog 启动后会自动负责启动和守护 Gateway
    tmux new-session -d -s openclaw
    tmux send-keys -t openclaw "proot-distro login ubuntu — bash /root/watchdog.sh" Enter

    # 新建第二个窗口运行监控脚本
    tmux new-window -t openclaw -n monitor
    tmux send-keys -t openclaw:monitor "proot-distro login ubuntu — bash /root/monitor.sh" Enter

    # 确认两个窗口都在运行
    tmux ls
    tmux list-windows -t openclaw

    输出示例:

    openclaw: 2 windows (created …)
    0: bash* (1 panes)
    1: monitor- (1 panes)

    💡 想查看实时日志:执行 tmux attach -t openclaw,按 Ctrl+B 再按 D 可退出而不关闭进程。

    ⚠️ 不要用 nohup … & 在 proot 环境后台运行长期进程,proot session 退出后进程随即终止。必须用 tmux 保持持久会话。

    11.5 配置开机自启动

    # 确保启动脚本目录存在
    mkdir -p ~/.termux/boot

    # 脚本一:开机自动启动 SSH
    cat > ~/.termux/boot/start-ssh.sh << 'EOF'
    #!/data/data/com.termux/files/usr/bin/bash
    sshd
    EOF

    chmod +x ~/.termux/boot/start-ssh.sh

    # 脚本二:开机自动启动 OpenClaw 全套服务
    cat > ~/.termux/boot/start-openclaw.sh << 'EOF'
    #!/data/data/com.termux/files/usr/bin/bash

    # 防止系统杀死 Termux 进程
    termux-wake-lock &

    # 等待 Android 系统完全启动(15 秒)
    sleep 15

    # 启动 cron(日志轮转)
    proot-distro login ubuntu — cron

    # 启动 watchdog(守护 Gateway)
    tmux new-session -d -s openclaw
    tmux send-keys -t openclaw "proot-distro login ubuntu — bash /root/watchdog.sh" Enter

    # 等待第一个窗口就绪
    sleep 3
    tmux new-window -t openclaw -n monitor
    tmux send-keys -t openclaw:monitor "proot-distro login ubuntu — bash /root/monitor.sh" Enter

    # 常驻通知,方便确认服务在运行
    sleep 5
    termux-notification \\
    –id 1 \\
    –title "OpenClaw Running" \\
    –content "Gateway + watchdog + monitor active" \\
    –ongoing
    EOF
    chmod +x ~/.termux/boot/start-openclaw.sh

    # 确认两个脚本都已创建
    ls -la ~/.termux/boot/

    输出应包含 start-ssh.sh 和 start-openclaw.sh。


    十二、安全加固

    📍 执行位置:💻 Mac · 终端(SSH → 手机 Termux,提示符为 ~ $)

    你的飞书 User ID 在第十节机器人第一次回复中已经告知,格式为 ou_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx。

    # 配置飞书白名单:只处理你自己发来的消息
    # 将 ou_你的飞书user_id 替换为实际 User ID
    proot-distro login ubuntu — openclaw config set channels.feishu.allowFrom '["ou_你的飞书user_id"]'
    proot-distro login ubuntu — openclaw config set channels.feishu.groupAllowFrom '["ou_你的飞书user_id"]'

    # 关闭高风险的文档创建权限(防止 AI 误操作)
    proot-distro login ubuntu — openclaw config set channels.feishu.tools.doc false

    # 允许飞书插件(消除启动警告)
    proot-distro login ubuntu — openclaw config set plugins.allow '["feishu"]'

    # 查看安全审计(目标:CRITICAL = 0)
    proot-distro login ubuntu — openclaw security audit

    # 重启 Gateway 使配置生效(watchdog 约 60 秒后自动重启)
    proot-distro login ubuntu — pkill -x openclaw-gateway
    sleep 70
    proot-distro login ubuntu — tail -5 /tmp/openclaw/watchdog.log

    日志末尾应有 Gateway restarted PID=XXXX,说明重启成功。


    十三、回到手机:系统设置

    📍 执行位置:📱 手机 · 系统设置(这是本教程第二次需要拿起手机)

    ⚠️ 这步很多人会漏掉,漏掉后的症状:手机重启或锁屏一段时间后,OpenClaw 停止响应,SSH 无法连接。

    OnePlus / OxygenOS:

  • 设置 → 电池 → 应用电池用量 → Termux → 不限制
  • 设置 → 应用 → 应用管理 → Termux → 电池 → 无限制
  • 设置 → 安全 → 自启动管理 → Termux → 开启
  • 打开「最近任务」,长按 Termux 卡片,点击锁定图标(🔒)
  • 💡 其他品牌:在系统设置搜索「自启动」或「电池优化」,找到 Termux 关闭后台限制并开启自启动。各品牌参考路径:

    • 小米 / MIUI:设置 → 应用设置 → 授权管理 → 自启动 → Termux 开启;设置 → 电量与性能 → 省电优化 → Termux → 无限制
    • 三星 / One UI:设置 → 电池 → 后台使用限制 → 从不休眠的应用 → 添加 Termux
    • 华为 / HarmonyOS:设置 → 应用 → 应用启动管理 → Termux → 手动管理,三项全开

    十四、常用命令速查

    📍 执行位置:💻 Mac · 终端(SSH → 手机 Termux,提示符为 ~ $)

    # 进入 Ubuntu 环境(需要多步 Ubuntu 操作时)
    proot-distro login ubuntu

    # 查看 OpenClaw 状态
    proot-distro login ubuntu — openclaw status

    # 查看 watchdog 日志(最近 20 条)
    proot-distro login ubuntu — tail -20 /tmp/openclaw/watchdog.log

    # 查看监控日志(最近 20 条)
    proot-distro login ubuntu — tail -20 /tmp/openclaw/monitor.log

    # 查看 Gateway 运行日志(最近 50 条)
    proot-distro login ubuntu — tail -50 /tmp/openclaw/openclaw.log

    # 手动重启 Gateway(watchdog 60 秒内自动恢复)
    proot-distro login ubuntu — pkill -x openclaw-gateway

    # 查看 tmux 会话和窗口
    tmux ls
    tmux list-windows -t openclaw

    # 进入 tmux 查看实时日志(Ctrl+B 再按 D 退出,不关闭进程)
    tmux attach -t openclaw

    # 查看手机当前 IP
    ifconfig | grep 'inet '

    # 手动启动 SSH(自启动配置前,重启手机后需要先到手机上执行此命令)
    sshd


    十五、常见问题排查

    问题现象原因解决方法
    openclaw: command not found 在 Termux 原生环境执行了 openclaw 命令 先执行 proot-distro login ubuntu 进入 Ubuntu
    ERR_SYSTEM_ERROR Unknown system error 13 Android 内核禁止 uv_interface_addresses 调用 改用 openclaw onboard –no-daemon,并完成第八节的 patch
    ssh-copy-id 报 No identities found Mac 本地没有 SSH 密钥 先执行 ssh-keygen -t ed25519 生成,再重新执行
    SSH 连接被拒绝 Connection refused 手机 sshd 没有运行 到手机 Termux 中执行 sshd
    开机后 SSH 无法连接 start-ssh.sh 没有生效 确认 ls ~/.termux/boot/ 文件存在,且 Termux:Boot 已打开过一次
    Gateway 启动后立刻崩溃 Bonjour/mDNS 组件调用失败 执行第八节 8.2 的 NetworkManager.js patch
    watchdog 无限重启 Gateway 进程名检测有误 在 Ubuntu 执行 ps aux | grep openclaw 确认实际进程名,修改 watchdog.sh
    飞书机器人无响应 白名单为空或配置未生效 执行第十二节配置 allowFrom,并重启 Gateway
    控制面板提示 Token 缺失 未填入 Gateway Token 执行 cat ~/.openclaw/openclaw.json | grep token 获取 Token
    锁屏后 Gateway 停止响应 系统电池优化杀死了 Termux 按第十三节关闭电池优化并锁定 Termux 任务卡片
    nohup … & 后台进程消失 proot 环境下后台进程随 session 退出 改用 tmux 管理持久会话(见 11.4)
    IP 变化导致 SSH 断连 切换 Wi-Fi 或重启路由器后 IP 改变 安装 Tailscale 获得永久固定虚拟 IP

    📌 最终验证:完成所有配置后,重启手机,等待约 1 分钟,通过飞书发消息给机器人。收到正常回复,说明整个系统已完全自动化运行 🎉

    如果重启后不响应:

    • 查手机通知栏是否有「OpenClaw Running」常驻通知 → 有则查 watchdog 日志定位问题
    • 没有通知 → 检查第十三节系统设置是否完成
    赞(0)
    未经允许不得转载:网硕互联帮助中心 » 300 元 vs 3000 元:旧安卓机秒变 24 小时 AI OpenClaw 服务器,不用 MacMini、不租云、不 Root
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!