【保姆级教程】旧手机变身 AI 云手机:Termux 部署 OpenClaw-CN 终极攻略 (防卡顿+免审批+Root版)

📱 前言

家里吃灰的旧安卓手机,除了换不锈钢脸盆,还能做什么?

今天教大家利用 Termux + Ubuntu 环境,把旧手机改造成一台 OpenClaw 云手机节点。你可以通过 API 或网页远程控制它,执行自动化任务,甚至让它成为你的 AI Agent 手臂。

为什么要看这篇教程?

网上很多教程部署后会遇到以下”深坑”,本教程已全部填平:

常见问题 解决方案
卡顿发热:旧手机 CPU 跑不动高清流,导致死机 独家防卡顿脚本 + 降级配置
ADB 报错:提示 Binder driver could not be opened Selinux 宽容模式 + 正确的 ADB 重启姿势
无法执行命令:提示 spawn /system/bin/sh ENOENT 构建虚拟 Shell 路径映射
审批流死循环:执行命令总要点确认 免审批配置文件

📖 目录


一、前期准备

1.1 硬件要求

在开始之前,请确保你具备以下条件:

项目 要求
安卓手机 已解锁Bootloader并获取Root权限
Root方案 推荐使用Magisk(本教程以Magisk为例)
存储空间 至少2GB可用空间
内存 建议2GB以上
网络 手机与电脑处于同一局域网

1.2 必要软件安装

你需要提前安装以下App:

  1. Termux - 终端模拟器(必须从F-Droid下载最新版,Google Play版已停止更新)
  2. MT管理器(可选)- 用于查看和修改文件

1.3 为什么选择Chroot而不是PRoot?

本教程使用Chroot技术而非PRoot,原因如下:

  • 性能优势:Chroot直接运行在Android内核上,几乎没有性能损耗
  • 权限完整:内部程序可以轻易获取真实的Root权限
  • 硬件直通:可以直接访问设备的硬件接口

⚠️ 注意:Chroot需要Root权限才能运行。如果你的手机未Root,需要改用PRoot方案,但权限会受限。


二、Termux环境配置

2.1 初次启动Termux

首次打开Termux后,需要进行基础环境配置。请依次执行以下命令:

1
2
3
4
5
# 更新软件包列表
pkg update -y

# 安装必要工具
pkg install wget tar tsu vim -y

2.2 验证Root权限

执行以下命令验证Magisk Root是否正常工作:

1
su -c "id"

如果弹出Magisk授权窗口,请点击”允许”。成功后会显示类似 uid=0(root) 的信息。

💡 小贴士:建议在授权时勾选”记住选择”,避免后续操作频繁弹窗。


三、安装Ubuntu 22.04系统

3.1 创建系统目录

首先,我们需要创建一个目录来存放Ubuntu系统文件。建议放在 /data/local 目录下,避免权限问题:

1
2
3
4
5
6
7
8
# 切换到Root用户
su

# 创建目录
mkdir -p /data/local/ubuntu22

# 进入目录
cd /data/local/ubuntu22

3.2 下载Ubuntu基础镜像

我们从阿里云镜像站下载Ubuntu 22.04的ARM64基础包(国内网络环境下推荐):

1
2
3
4
5
# 修复环境变量(确保能找到wget)
export PATH=/data/data/com.termux/files/usr/bin:$PATH

# 下载Ubuntu 22.04基础包(约26MB)
wget --no-check-certificate -4 https://mirrors.aliyun.com/ubuntu-cdimage/ubuntu-base/releases/22.04/release/ubuntu-base-22.04-base-arm64.tar.gz

下载完成后,你会看到类似输出:

1
ubuntu-base-22.04-base-arm64.tar.gz saved [27660560/27660560]

3.3 解压系统文件

将下载的压缩包解压到当前目录:

1
tar -xvpzf ubuntu-base-22.04-base-arm64.tar.gz --numeric-owner

解压过程中屏幕会快速滚动文件列表,这是正常现象。如果最后有少量关于socket或mknod的错误可以忽略。

3.4 验证解压结果

解压完成后,执行以下命令检查:

1
ls

你应该能看到类似以下目录结构:

1
bin  boot  dev  etc  home  lib  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

四、配置Ubuntu系统

4.1 创建启动脚本

我们需要创建一个脚本来挂载系统目录并启动Ubuntu。请执行以下命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
cat << 'EOF' > start.sh
#!/bin/sh
MNT_PATH="/data/local/ubuntu22"
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$PATH

# 挂载硬件接口(静默模式)
mount -o bind /dev "$MNT_PATH/dev" 2>/dev/null
mount -t devpts devpts "$MNT_PATH/dev/pts" 2>/dev/null
mount -t proc proc "$MNT_PATH/proc" 2>/dev/null
mount -t sysfs sysfs "$MNT_PATH/sys" 2>/dev/null
mount -o bind /sdcard "$MNT_PATH/mnt" 2>/dev/null
# 新增:每次启动容器自动创建/system/bin/sh软链接
mkdir -p "$MNT_PATH/system/bin" && ln -sf /usr/bin/sh "$MNT_PATH/system/bin/sh"
# 接收外部命令并执行
if [ -n "$1" ]; then
chroot "$MNT_PATH" /bin/bash -c "$1"
else
export HOME=/root
export TERM=xterm-256color
chroot "$MNT_PATH" /bin/bash
fi
EOF

chmod 777 start.sh

4.2 启动Ubuntu

现在可以进入Ubuntu系统了:

1
./start.sh

当你看到提示符从 :/data/local/ubuntu22 # 变成 root@localhost:/# 时,说明你已经成功进入Ubuntu系统!
附:
在termux输入以下命令可在termux输入 ok 一键进入ubuntu系统,不用再输入其他命令。

1
2
3
4
5
6
7
8
# 1. 安装必要依赖(tsu用于切换Root,避免后续报错)
pkg install tsu -y 2>/dev/null
# 2. 直接向Termux配置文件添加ok别名(无需手动编辑vim)
echo "alias ok='su -c \"cd /data/local/ubuntu22 && chmod +x start.sh && ./start.sh\"'" >> ~/.bashrc
# 3. 让配置立即生效
source ~/.bashrc
# 4. 提示配置完成
echo "✅ 配置成功!现在输入 ok 即可一键进入Ubuntu 22系统"

4.3 更换国内软件源

Ubuntu默认的软件源在国内访问较慢,我们需要换成阿里云源:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 备份原配置
mv /etc/apt/sources.list /etc/apt/sources.list.bak

# 写入阿里云源
cat << 'EOF' > /etc/apt/sources.list
deb http://mirrors.aliyun.com/ubuntu-ports/ jammy main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu-ports/ jammy-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu-ports/ jammy-backports main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu-ports/ jammy-security main restricted universe multiverse
EOF

# 修复临时目录问题
export TMPDIR=/tmp
mkdir -p /tmp
chmod 1777 /tmp

# 写入永久修复
echo "export TMPDIR=/tmp" >> /etc/profile

# 更新软件列表
apt update

4.4 安装基础软件

安装必要的系统工具:

1
apt install curl git nano sudo build-essential python3 -y

五、安装Node.js与OpenClaw

5.1 安装Node.js

OpenClaw需要Node.js 22或更高版本。执行以下命令安装:

1
2
3
4
5
6
7
8
9
10
11
# 1. 先安装依赖(避免脚本执行报错)
apt install curl gnupg2 ca-certificates -y

# 2. 下载nodesource脚本(加国内镜像加速,确保安装23.x)
curl -fsSL https://mirrors.ustc.edu.cn/nodesource/setup_23.x | bash -
# 3. 安装Node.js(从nodesource源安装23.x版本)
apt install nodejs -y

# 4. 验证安装(确认版本≥v23.0.0)
node -v
npm -v

你应该能看到Node.js版本号为v23.x.x或更高。

5.2 配置npm国内镜像

加速npm包下载:

1
npm config set registry https://registry.npmmirror.com

5.3 安装OpenClaw

执行全局安装:

1
npm install -g openclaw@latest

安装过程可能需要1-2分钟,请耐心等待。

启动openclaw

1
openclaw onboard

配置完毕可以通过默认http://localhost:18789访问web或者通过各种配置的app使用。

看到这里就可以结束了,已经安装完成openclaw后续步骤作为拓展。


六、配置SSH远程连接

这一步可以让你通过电脑远程操作手机,比在手机屏幕上敲命令舒服得多。

6.1 安装SSH服务

1
apt install openssh-server nano net-tools iputils-ping -y

6.2 设置Root密码

必须设置密码才能远程登录:

1
passwd

输入密码时屏幕不会显示任何字符,这是正常的。输入两次确认即可。

6.3 配置SSH允许Root登录

1
2
3
4
5
6
7
8
# 允许Root登录
echo "PermitRootLogin yes" >> /etc/ssh/sshd_config

# 修改端口为2222(避开安卓系统22端口)
echo "Port 2222" >> /etc/ssh/sshd_config

# 创建必要目录
mkdir -p /run/sshd

6.4 启动SSH服务

1
/usr/sbin/sshd

如果没有报错,说明SSH服务已经启动成功。

6.5 获取手机IP地址

1
ifconfig

找到 wlan0 这一项,记下 inet 后面的IP地址(例如 192.168.1.5)。

6.6 在电脑上连接

在电脑终端(Mac Terminal或Windows PowerShell)中执行:

1
ssh -p 2222 root@192.168.1.5

将IP地址替换为你手机的实际IP。首次连接会询问是否继续,输入 yes 即可。


七、构建完美启动脚本

🎯 痛点解决:普通启动方式会导致 ADB 丢失系统权限(变成黑户)。以下脚本使用 ctl.restart 配合 setenforce 0,确保 OpenClaw 拥有完整的系统控制权。

7.1 重建引导脚本 (start.sh)

操作位置:手机 Termux 原生界面(先输入 exit 退出Ubuntu)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
su -c "cat << 'EOF' > /data/local/ubuntu22/start.sh
#!/bin/sh
MNT_PATH=\"/data/local/ubuntu22\"
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:\$PATH

# --- 核心修复:赋予 ADB 完整系统权限 ---
if echo \"\$1\" | grep -q \"run_services\"; then
echo \"[Boot] 正在修复 ADB 上下文...\"

# 1. 宽容模式:允许 ADB 调用 Binder 驱动
setenforce 0 2>/dev/null

# 2. 开启网络调试端口
setprop service.adb.tcp.port 5555

# 3. 正规重启 ADB:继承 init 进程的 Root 权限
setprop ctl.restart adbd

sleep 3
fi

# --- 挂载系统目录 ---
mount -o bind /dev \"\$MNT_PATH/dev\" 2>/dev/null
mount -t devpts devpts \"\$MNT_PATH/dev/pts\" 2>/dev/null
mount -t proc proc \"\$MNT_PATH/proc\" 2>/dev/null
mount -t sysfs sysfs \"\$MNT_PATH/sys\" 2>/dev/null
mount -o bind /sdcard \"\$MNT_PATH/mnt\" 2>/dev/null

# --- 进入系统 ---
if [ -n \"\$1\" ]; then
chroot \"\$MNT_PATH\" /bin/bash -c \"\$1\"
else
export HOME=/root
export TERM=xterm-256color
chroot \"\$MNT_PATH\" /bin/bash
fi
EOF"

# 赋予执行权限
su -c "chmod 777 /data/local/ubuntu22/start.sh"

7.2 构建服务管理脚本 (run_services.sh)

🎯 痛点解决

  1. OpenClaw 找不到安卓的 /system/bin/sh
  2. 日志文件无限膨胀导致卡死
  3. 进程优先级太高抢占系统资源

操作位置:手机 Termux 原生界面

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
su -c "cat << 'EOF' > /data/local/ubuntu22/root/run_services.sh
#!/bin/bash
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:\$PATH
export HOME=/root

# 获取本机 IP
CURRENT_IP=\$(ifconfig | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -v '127.0.0.1' | awk '{print \$2}' | sed 's/addr://g' | head -n 1)

echo \"========================================\"
echo \"🚀 正在启动服务 (防卡顿 + 环境修复)...\"
echo \"========================================\"

# --- 1. 环境欺骗 (修复 spawn ENOENT 报错) ---
# OpenClaw 以为在安卓里,硬要找 /system/bin/sh
# 我们创建一个软链接,骗它去用 Ubuntu 的 Bash
mkdir -p /system/bin
ln -sf /bin/bash /system/bin/sh
ln -sf /bin/bash /bin/sh

# --- 2. 启动 SSH ---
pkill -x sshd
mkdir -p /run/sshd
/usr/sbin/sshd

# --- 3. 连接 ADB ---
adb disconnect > /dev/null 2>&1
sleep 1
adb connect 127.0.0.1:5555 > /dev/null 2>&1
sleep 2

# --- 4. 启动 OpenClaw (性能优化) ---
pkill -f openclaw-cn > /dev/null 2>&1
pkill -f node > /dev/null 2>&1

# 优化策略:
# nice -n 15: 降低优先级,把 CPU 让给系统,防止死机
# > /dev/null: 丢弃日志,减少闪存读写
nohup nice -n 15 openclaw-cn gateway --port 18789 > /dev/null 2>&1 &

echo \"✅ 启动完成,生成面板...\"
sleep 2

# --- 状态检查 ---
echo \"\"
echo \"========= 📱 运行状态 ========="
if adb devices | grep -w \"device\" > /dev/null; then
echo \"🔹 [ADB] ✅ 正常 (已授权 Root)\"
else
echo \"🔹 [ADB] ❌ 异常 (Binder 驱动丢失?)\"
fi

if pgrep -f \"openclaw-cn\" > /dev/null; then
echo \"🔹 [OpenClaw] ✅ 运行中\"
echo \" 👉 远程连接: ssh -p 2222 root@\$CURRENT_IP\"
else
echo \"🔹 [OpenClaw] ❌ 启动失败\"
fi
echo \"=================================\"
EOF"

su -c "chmod 777 /data/local/ubuntu22/root/run_services.sh"

八、配置免审批与性能优化

🎯 痛点解决:默认情况下 OpenClaw 执行任何命令都需要在飞书/网页端审批,非常麻烦。此配置将关闭所有询问,开启”上帝模式”。

8.1 注入免审批配置 (config.yaml)

操作位置:手机 Termux 原生界面

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
su -c "mkdir -p /data/local/ubuntu22/root/.openclaw"
su -c "cat << 'EOF' > /data/local/ubuntu22/root/.openclaw/config.yaml
# --- 基础修复 ---
# 显式指定 Shell,防止找不到路径
shell: \"/bin/bash\"

# --- 权限控制 (上帝模式) ---
auto_run: true
safe_mode: \"off\"
offline: true

# 关闭所有工具的审批
approvals:
exec:
enabled: false
fs:
enabled: false

# 允许执行任意命令
tools:
exec:
ask: false
security: \"full\"

# --- 性能优化 (关键!) ---
# 旧手机必须降级画质,否则必卡
stream:
video:
width: 960 # 分辨率降为 540P
height: 540
fps: 15 # 锁帧 15
bitrate: 800k
audio:
enabled: false # 关闭音频推流 (防卡死)
EOF"

8.2 配置参数说明

参数 作用 推荐值
shell 指定Shell路径,避免找不到命令 /bin/bash
auto_run 自动运行模式 true
safe_mode 安全模式 off
video.width 视频宽度 960(旧手机建议)
video.height 视频高度 540(旧手机建议)
video.fps 帧率 15(防止卡顿)
audio.enabled 音频推流 false(节省资源)

九、ADB配置与OpenClaw启动

9.1 安装ADB工具

在Ubuntu中执行:

1
apt install android-tools-adb -y

9.2 开启手机无线调试

在手机上进行以下操作:

  1. 打开 设置 → 开发者选项
  2. 找到 无线调试ADB网络调试
  3. 开启开关,通常端口为5555

9.3 连接本地ADB

在Ubuntu中执行:

1
adb connect 127.0.0.1:5555

⚠️ 重要:执行此命令时,请留意手机屏幕是否弹出”允许USB调试”窗口。**务必勾选”始终允许”并点击”允许”**。

9.4 验证连接状态

1
adb devices

如果显示 device 而不是 unauthorized,说明连接成功。


十、服务持久化配置

10.1 封装一键管理指令

操作位置:手机 Termux 原生界面

一键启动 (./up)

1
2
echo 'su -c "/data/local/ubuntu22/start.sh \"/root/run_services.sh\""' > ~/up
chmod +x ~/up

一键停止 (./down)

包含深度清理,防止关掉程序后手机还烫手:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
cat << 'EOF' > ~/down
#!/bin/bash
echo "🛑 正在执行深度清理..."
# 杀进程
su -c "pkill -f openclaw-cn; pkill -f node; pkill -x sshd"
# 断开 ADB
su -c "adb disconnect" > /dev/null 2>&1
# 强制卸载挂载点 (防止系统 I/O 锁死)
MNT="/data/local/ubuntu22"
su -c "umount -l $MNT/dev/pts 2>/dev/null"
su -c "umount -l $MNT/dev 2>/dev/null"
su -c "umount -l $MNT/proc 2>/dev/null"
su -c "umount -l $MNT/sys 2>/dev/null"
su -c "umount -l $MNT/mnt 2>/dev/null"
echo "✅ 服务已彻底停止。"
EOF
chmod +x ~/down

满血模式 (./boost)

如果要长期运行,建议配合散热背夹:

1
2
3
4
5
6
7
cat << 'EOF' > ~/boost
#!/bin/bash
echo "🔥 开启 CPU 满血模式 (去除温控)..."
su -c "stop thermal-engine; stop thermald"
echo "⚠️ 警告:请务必使用散热背夹,否则手机可能过热关机!"
EOF
chmod +x ~/boost

10.2 配置开机自启(可选)

如果你想实现手机重启后自动启动服务,可以安装 Termux:Boot 插件:

  1. 从F-Droid下载并安装 Termux:Boot
  2. 打开一次Termux:Boot进行初始化
  3. 在Termux中执行:
1
2
3
4
5
6
7
8
9
10
mkdir -p ~/.termux/boot

cat << 'EOF' > ~/.termux/boot/start_auto.sh
#!/data/data/com.termux/files/usr/bin/sh
termux-wake-lock
sleep 10
su -c "/data/local/ubuntu22/start.sh \"/root/run_services.sh\""
EOF

chmod +x ~/.termux/boot/start_auto.sh
  1. 在手机设置中,将Termux和Termux:Boot设为”允许自启动”和”电池无限制”

🏁 如何使用?

现在你的手机已经准备好了!

日常启动

打开 Termux,输入:

1
./up

脚本会自动修复 ADB 权限,启动所有服务,并告诉你 SSH 连接地址。

验证成功

在电脑 OpenClaw 终端输入:

1
adb shell am start -a android.settings.SETTINGS

如果手机自动弹出了设置页面,说明一切完美!

停止服务

1
./down

十一、常见问题与解决方案

Q1: 提示 wget: not found

原因:Root环境下环境变量丢失。

解决:执行以下命令修复:

1
export PATH=/data/data/com.termux/files/usr/bin:$PATH

Q2: apt安装软件时报错 mktemp failed

原因:临时目录变量指向了不存在的路径。

解决

1
2
3
4
export TMPDIR=/tmp
mkdir -p /tmp
chmod 1777 /tmp
apt --fix-broken install -y

Q3: ADB连接显示 unauthorized

原因:手机未授权调试。

解决

  1. 解锁手机屏幕
  2. 执行 adb disconnect
  3. 再执行 adb connect 127.0.0.1:5555
  4. 在弹窗中勾选”始终允许”并点击”允许”

Q4: OpenClaw提示Node版本过低

原因:OpenClaw要求Node.js 22或更高版本。

解决

1
2
3
4
apt remove nodejs -y
curl -fsSL https://deb.nodesource.com/setup_current.x | bash -
apt install nodejs -y
node -v # 确认版本>=22

Q5: 提示 Binder driver could not be opened

原因:ADB权限上下文丢失。

解决

  1. 确保使用最新的 ./up 脚本
  2. 如果还不行,重启手机
  3. 重启后先运行 ./up,不要自己手动去连 ADB

Q6: 执行命令提示 spawn ENOENT

原因:OpenClaw找不到系统的Shell路径。

解决:脚本里已经加了 ln -sf /bin/bash /system/bin/sh,重启服务即可生效:

1
2
./down
./up

Q7: 手机非常烫且卡顿

原因:视频推流画质过高,CPU负载过大。

解决

  1. 检查 config.yaml 里是否关闭了 Audio 并降低了分辨率
  2. 如果还卡,请购买一个手机散热背夹(几十块钱),这是物理定律,软件很难突破
  3. 可以运行 ./boost 关闭温控,但必须配合散热背夹使用

Q8: SSH连接被拒绝

可能原因

  • SSH服务未启动
  • 端口被占用
  • 防火墙拦截

解决步骤

1
2
3
4
5
6
7
8
9
# 检查SSH是否运行
pgrep sshd

# 如果没有,手动启动
mkdir -p /run/sshd
/usr/sbin/sshd

# 检查端口
netstat -tlnp | grep 2222

Q9: 手机重启后无法连接

原因:服务未自启动。

解决

  1. 打开Termux
  2. 输入 ./up
  3. 等待服务启动完成

🎉 总结

通过本教程,你已经成功将一台旧安卓手机改造成为一台功能完整的云手机服务器。现在你可以:

  • ✅ 通过SSH远程管理这台”服务器”
  • ✅ 使用OpenClaw自动化控制手机
  • ✅ 免审批执行任意命令
  • ✅ 防卡顿配置保护旧手机
  • ✅ 一键启动/停止服务

如果本教程对你有帮助,欢迎点赞收藏,让更多吃灰的旧手机焕发新生!


希望能帮到所有折腾旧手机的朋友!