将任意旧安卓手机变成 Linux 桌面或智能家居服务器 — 无需电脑、无需 Root、无需云服务,只需 Termux。

选择你的方案
| Linux 桌面 | 智能家居服务器 | |
|---|---|---|
| 是什么 | 手机上的完整 GUI 桌面环境 | 控制 WiFi 设备的 Home Assistant 中心 |
| 使用场景 | 学习 Linux、Python 开发、SSH 服务器、网页浏览、媒体播放 | 控制智能灯/插座、自动化、仪表盘 |
| 脚本 | bash termux-linux-setup.sh | bash setup-homeassistant.sh |
| 耗时 | 10–30 分钟 | 15–45 分钟 |
| 跳转 | 桌面安装 | Home Assistant 安装 |
两者可以在同一部手机上运行 — 互不冲突。
系统要求
硬件
- 搭载 arm64(64 位) 处理器的安卓手机
- 推荐 3 GB 以上内存(KDE Plasma 需 4 GB 以上)
- 5–10 GB 可用存储空间(安装 Wine 需要更多)
- 高通骁龙芯片最佳 — 可获得最好的 GPU 加速效果(Turnip/Adreno)。脚本也支持 Mali 及其他 GPU,但性能较弱。
软件
Termux-X11
桌面环境 — 如何选择?
| # | 桌面环境 | 适合人群 | 资源占用 |
|---|---|---|---|
| 1 | XFCE4 (默认) | 大多数用户。快速、可定制、macOS 风格 Dock | 低–中 |
| 2 | LXQt | 旧手机或低内存设备(2–3 GB) | 极低 |
| 3 | MATE | 经典桌面体验 | 中等 |
| 4 | KDE Plasma | 仅适合高性能手机 — Windows 11 风格 | 高 |
如果不确定,选择 XFCE4。
安装
步骤 1 — 安装必要应用
从 F-Droid 安装 Termux,从 GitHub 安装 Termux-X11(链接见上方)。授予两个应用所需的所有权限。
步骤 2 — 预升级 Termux(重要 — 请先执行此步)
打开 Termux 并运行:
termux-wake-lock
pkg upgrade -ytermux-wake-lock 命令可保持 Termux 在屏幕关闭时继续运行 — 没有它,安卓可能会在安装过程中杀死进程。pkg upgrade 会在脚本运行前更新基础系统,避免 libpcre 和 libandroid-selinux 相关的已知崩溃问题。
步骤 3 — 下载并运行脚本
curl -O https://raw.githubusercontent.com/mayukh4/linux-android/main/termux-linux-setup.sh
chmod +x termux-linux-setup.sh
bash termux-linux-setup.sh脚本会询问你选择哪个桌面环境以及是否安装 Wine,其余全部自动完成。
安装耗时 10–30 分钟,取决于网络速度。完整的日志保存在 ~/termux-setup.log 中,方便排查问题。
步骤 4 — 启动桌面
bash ~/start-linux.sh然后在手机上打开 Termux-X11 应用,Linux 桌面将显示在其中。
停止桌面:
bash ~/stop-linux.sh安装内容一览
| 组件 | 说明 |
|---|---|
| Termux-X11 | 显示服务器 — 在屏幕上渲染桌面 |
| 桌面环境 | 你的选择:XFCE4、LXQt、MATE 或 KDE |
| Mesa / Zink | 通过 Vulkan 实现 OpenGL — 启用 GPU 加速图形渲染 |
| Turnip 驱动 | 高通 Adreno 开源 Vulkan 驱动(如检测到) |
| PulseAudio | 音频服务器 |
| Firefox | 完整桌面浏览器 |
| VLC | 视频和音频播放器 |
| Git、wget、curl | 常用开发工具 |
| Python 3 + pip | Python 运行时和包管理器 |
| OpenSSH | SSH 服务器和客户端 — 从电脑远程访问 |
| Wine (可选) | 通过 Hangover + Box64 运行 Windows x86 应用 |
GPU 加速
脚本通过硬件属性自动检测 GPU(而非品牌名称 — 三星根据地区不同会同时使用 Adreno 和 Mali,因此品牌检测不可靠)。
高通 Adreno(骁龙手机): 使用开源 Turnip Vulkan 驱动 + Zink(Vulkan 上的 OpenGL)。接近原生 GPU 性能。
Mali / 其他 GPU: 回退到 Zink + SwRast(软件 Vulkan)。功能可用,但强烈建议使用轻量级桌面(XFCE4、LXQt)。
GPU 环境配置保存在 ~/.config/linux-gpu.sh 中,每次运行 start-linux.sh 时自动加载。你可以编辑该文件来调整 Mesa 参数。
SSH — 从电脑访问手机
脚本会自动安装 OpenSSH。你可以从同一 WiFi 网络中的任何电脑 SSH 到手机 — 适合执行命令、传输文件或在正式键盘上进行开发。
首次 SSH 设置
在 Termux 中打开终端(不是桌面内的终端,而是 Termux 应用本身),运行:
# 启动 SSH 服务器
sshd
# 设置 Termux 密码(SSH 登录时使用)
passwdip addr show wlan0 | grep 'inet 'ssh 你的termux用户名@192.168.1.42 -p 8022端口 8022 是 Termux SSH 的默认端口(不是标准的 22 端口,后者需要 Root 权限)。
在 Termux 中运行 whoami 查看你的用户名,通常是类似 u0_a123 的格式。
使用 SSH 配置简化登录(可选)
在电脑上将以下内容添加到 ~/.ssh/config,无需每次输入完整命令:
Host myphone
HostName 192.168.1.42
User u0_a123
Port 8022ssh myphonescp -P 8022 myfile.txt u0_a123@192.168.1.42:~/scp -P 8022 u0_a123@192.168.1.42:~/somefile.txt ./也可以使用任何 SFTP 客户端(如 FileZilla 或 Cyberduck)— 连接到相同 IP 和端口 8022。
关闭 Termux 后保持 SSH 运行
默认情况下 sshd 会在 Termux 关闭时停止。要保持持久运行:
# 添加到 ~/.bashrc,使 sshd 在 Termux 打开时自动启动
echo 'sshd 2>/dev/null' >> ~/.bashrcWindows 应用支持(Wine)
如果你选择安装 Wine,它使用 Hangover Wine 配合 Box64 将 Windows x86 调用转换为 ARM64。简单工具和实用程序通常可以运行;大型软件或游戏可能无法正常工作。
要配置 Wine,在桌面终端中运行 winecfg 或点击桌面上的 Wine Config 快捷方式。
Home Assistant — 智能家居服务器
将旧安卓手机变成全天候智能家居中心,控制 WiFi 智能灯、插座和其他设备 — 可从网络中的任何浏览器访问。
Home Assistant Core 运行在手机上的轻量级 Ubuntu 容器中(通过 proot-distro),无需 Root,本地设备无需云服务。
可控制的设备
| 设备类型 | 品牌示例 | 连接方式 |
|---|---|---|
| WiFi 智能灯 | TP-Link Kasa、Govee、LIFX | 通过本地网络直连 IP |
| WiFi 智能插座 | TP-Link Kasa、Wemo | 通过本地网络直连 IP |
| 云连接设备 | Tuya / Smart Life、Govee | 通过云 API(随处可用) |
| 其他 WiFi 设备 | 智能开关、传感器、摄像头 | 通过 IP 或云集成 |
安卓上的限制
- 不支持蓝牙 — HA 无法通过 Termux 访问手机的蓝牙协议栈
- 不支持 USB 适配器 — Zigbee/Z-Wave USB 设备需要 Root 和内核支持才能使用
- 不支持自动发现(mDNS) — Android 10+ 阻止了
/proc/net/dev的访问,导致 Zeroconf 无法工作。必须通过 IP 地址或云 API 添加设备,不能依赖自动发现 - 不支持 Docker/插件 — 这是 HA Core,不是 HA OS。需要 Docker 的社区插件无法运行。核心集成(2000+)均可正常使用。
安装
curl -O https://raw.githubusercontent.com/mayukh4/linux-android/main/setup-homeassistant.sh
bash setup-homeassistant.sh安装耗时 15–45 分钟,取决于手机性能。最耗时的步骤是在 Ubuntu 容器中编译 Home Assistant 的 Python 依赖(numpy、cryptography 等)。
启动和停止
# 启动 Home Assistant
bash ~/start-homeassistant.sh
# 停止 Home Assistant
bash ~/stop-homeassistant.sh
# 升级到当前容器 Python 所能支持的最新版本
bash ~/upgrade-homeassistant.shcustom_components/ 中已有手动安装的集成,请先删除它们,否则 HACS 可能会处于损坏状态。)proot-distro login ubuntu -- sh -c "cd ~/hass-config && wget -O - https://get.hacs.xyz | bash -"然后重启 Home Assistant,并在仪表盘中完成设置:
- 设置 → 设备与服务 → + 添加集成
- 搜索 HACS
- 勾选所有确认项,然后使用 GitHub 账号授权
完整配置文档:hacs.xyz/docs/use/configuration/basic。
升级 Home Assistant
bash ~/upgrade-homeassistant.sh为什么全新安装得到的版本比 HA 官网显示的旧。 pip 只会安装解释器所满足 requires-python 的最新版本,然后就停下来。这不是安装失败:
| 容器 Python | 可运行的最新 Home Assistant |
|---|---|
| 3.12 | 2025.1.x |
| 3.13.0 – 3.13.1 | 2025.5.x |
| 3.13.2+ | 2026.2.x |
| 3.14.2+ | 2026.3 及以后 |
(依据 PyPI 上各版本的 requires-python 核实。)
proot-distro install ubuntu 跟随 Ubuntu 滚动发行版,所以你拿到哪个 Python 取决于安装容器的时间。bash ~/upgrade-homeassistant.sh 会打印你的 Python 版本,并在触及上限时告诉你。
http://<你的手机IP>:8123在 Termux 中运行 ip addr show wlan0 | grep 'inet ' 查看手机 IP。
首次启动需要 5–10 分钟 进行初始化。首次访问时你需要在浏览器中创建管理员账户。
添加第一个设备 — TP-Link Kasa
- 在常用手机上打开 Kasa 应用,记下设备的 IP 地址(设备设置 → 设备信息)
- 在 HA 仪表盘中:设置 → 设备与服务 → + 添加集成
- 搜索 "TP-Link Kasa Smart"
- 按提示输入设备 IP 地址
- 你的灯/插座应该会出现 — 现在可以从 HA 仪表盘控制它了
添加 Tuya / Smart Life 设备
Tuya 设备通过 Tuya 云 API 连接,不受本地网络限制影响:
- 前往 iot.tuya.com 创建免费开发者账户
- 创建云项目 → 选择你的数据中心区域 → 添加智能家居 API
- 进入设备 → 关联涂鸦 App 账号 → 使用 Smart Life / Tuya Smart 应用扫描二维码
- 在 HA 仪表盘中:设置 → 设备与服务 → + 添加集成 → Tuya
- 输入 Tuya IoT 控制台中的 Access ID 和 Access Secret
保持 Home Assistant 后台运行
默认情况下,安卓会在 Termux 切到后台时杀死其进程。要保持 HA 24/7 运行:
# 方式 1:使用 nohup 后台运行
termux-wake-lock
nohup bash ~/start-homeassistant.sh > ~/hass.log 2>&1 &
# 方式 2:Termux 启动时自动运行(添加到 ~/.bashrc)
echo 'termux-wake-lock && nohup bash ~/start-homeassistant.sh > ~/hass.log 2>&1 &' >> ~/.bashrctermux-wake-lock 可防止安卓挂起进程。将手机接上充电器,它就变成了一台专用常驻服务器。视频使用场景
旧安卓手机运行此方案后的用途灵感:
- 智能家居控制器 — 插上电源,24/7 运行 Home Assistant,从网络中的任何设备控制灯光和插座
- 学习用 Linux 桌面 — 完整的 XFCE4/KDE/MATE 桌面,无需购买电脑即可学习 Linux
- SSH 开发服务器 — 在笔记本上编码,通过 SSH 在手机上运行
- Python 开发工作站 — Python 3 + pip 开箱即用,适合学习或小型项目
- 媒体服务器 / 文件服务器 — 使用 Python 内置 HTTP 服务器或安装 Samba 在本地网络上共享文件
- 网络监控仪表盘 — 从任何浏览器访问 Home Assistant 和系统状态
故障排除
脚本安装中途退出且无明确错误 查看 ~/termux-setup.log。脚本会记录每个包的安装结果,最后一行会告诉你具体是哪个包导致了失败。
运行 start-linux.sh 后桌面不显示 手动打开 Termux-X11 应用 — 桌面在该应用内渲染,而不是在 Termux 终端中。
Termux-X11 中黑屏 运行 stop-linux.sh 然后重新运行 start-linux.sh。KDE Plasma 首次启动比其他桌面环境多需要 20–30 秒。
安装时出现"library not found"或"cannot link executable"错误 这是 libpcre 崩溃问题。完全关闭 Termux,重新打开,运行 pkg upgrade -y,然后重新运行脚本。
出现"Unable to contact settings server"或"Failed to connect to socket .../dbus-XXXX: Connection refused" 桌面的设置守护进程通过 D-Bus 会话总线通信。要么总线没有启动,要么上一次会话被强制杀死后留下了失效的 socket,而桌面仍在尝试复用它。现在 start-linux.sh 会先清理残留状态,再在固定地址上启动总线,然后才启动桌面。如果你用的是旧版脚本,重新运行 termux-linux-setup.sh 以重新生成启动脚本,或手动修复:
pkg install dbus
pkill -9 -f dbus-daemon
rm -rf ~/.dbus "$PREFIX"/tmp/dbus-*
mkdir -p "$PREFIX/var/run/dbus"
export DBUS_SESSION_BUS_ADDRESS="unix:path=$PREFIX/var/run/dbus/session_bus_socket"
dbus-daemon --session --address="$DBUS_SESSION_BUS_ADDRESS" --nopidfile --forkVulkan / Mesa 包安装失败:提示"vulkan-loader-generic : Conflicts: vulkan-loader-android",或 dpkg 报"trying to overwrite libvulkan_freedreno.so" 这是两个独立的原因,现在都已修复:
vulkan-loader-generic同时 provides 和 conflictsvulkan-loader-android,因此在正常安装环境下请求 android 版本会让整个事务失败,且毫无收益。脚本现在直接安装vulkan-loader-generic。- 第三方的
mesa-zink-vulkan-icd-freedreno(Mesa 22)与主仓库的 Turnip 驱动(Mesa 26)打包了同名的libvulkan_freedreno.so,同时安装会让 dpkg 中止。脚本现在只选择其中一套并始终保持一致。
如果你的安装早于此修复,GPU 加速大概率仍然可用 — 这两个报错声势很大但并不致命。重新运行脚本即可清理。
包安装失败,提示"unmet dependencies"或"Conflicts" 脚本的 safe_install_pkg 函数会读取每个包声明的冲突,正确处理版本约束,并允许 apt 执行该包合法替换(Replaces)的冲突。如果仍然出现此问题,请查看日志并提交 GitHub Issue,附上你的设备型号和安卓版本。
音频不工作 桌面出现后等待 5–10 秒。PulseAudio 首次启动需要一点时间来初始化。
SSH 连接被拒绝 确保 sshd 正在运行(ps aux | grep sshd)。如果未运行,重新执行 sshd。确认使用的是端口 8022,而非 22。
Wine 无法启动 Wine 需要活跃的显示环境。确保桌面已运行,然后在桌面内的终端中运行 winecfg。
Home Assistant:"pip install homeassistant"编译错误 通常表示缺少构建依赖。运行 proot-distro login ubuntu 并确认已安装 python3-dev、libffi-dev、libssl-dev 和 cargo。然后重试:source ~/hass-venv/bin/activate && pip install homeassistant。
Home Assistant:8123 端口仪表盘无法加载 首次启动需要 5–10 分钟。检查 HA 是否仍在初始化:proot-distro login ubuntu -- bash -c "source ~/hass-venv/bin/activate && hass -c ~/hass-config" 并查看输出。确保手机和浏览器在同一 WiFi 网络中。
Home Assistant:启动时出现"address already in use"错误 已有 HA 实例在运行。先停止它:bash ~/stop-homeassistant.sh,或手动停止:pkill -f "hass -c"。
Home Assistant:设备无法自动发现 这在安卓上是正常现象。Android 10+ 对 /proc/net/dev 的限制导致 mDNS/Zeroconf 无法工作。请通过 IP 地址手动添加设备,或使用云端集成(Tuya、Govee Cloud 等)。
进价
~/.config/linux-gpu.sh 在每次桌面启动时被加载。常用调整:
# 强制软件渲染(用于调试)
export GALLIUM_DRIVER=llvmpipe
# 启用 Mesa 调试输出
export MESA_DEBUG=1
# 修改 OpenGL 版本覆盖
export MESA_GL_VERSION_OVERRIDE=3.3在电脑上生成密钥对(如果还没有):
ssh-keygen -t ed25519ssh-copy-id -p 8022 u0_a123@192.168.1.42在 Termux 的 ~/.bashrc 中添加:
# 取消注释以在 Termux 打开时自动启动桌面
# bash ~/start-linux.shTermux 中有几个包会互相硬冲突(例如 vulkan-loader-android 和 vulkan-loader-generic 声明了互斥的 Conflicts)。标准的 apt-get 在安装一个包时如果另一个已存在会直接报错,导致脚本退出。
safe_install_pkg 函数通过在每次安装前从 apt-cache show 读取 Conflicts 字段来解决这个问题。如果声明的冲突包已安装,则跳过该包并发出警告,脚本继续运行。这意味着无论系统中预装了什么包,脚本都可以安全运行。
所有硬编码的 /data/data/com.termux/... 路径都已替换为 $PREFIX(Termux 标准环境变量)。这意味着脚本也适用于非标准安装,例如安卓次要用户配置文件中的 Termux。