本文整理自 GitHub 项目 mayukh4/linux-android(MIT 许可)的中文 README、
termux-linux-setup.sh与setup-homeassistant.sh的行为说明、以及 README 的故障排除与进阶章节。命令、限制与版本对应关系忠于原文;章节组织、选型建议与评述为本文编辑归纳。数据截至 2026-10-02(仓库 3.6k star / 271 fork,创建于 2026-03-01,主要语言 Shell,配套 YouTube 完整视频教程)。
每个人的抽屉里大概都躺着一两台旧安卓手机。屏幕碎了、电池鼓了、系统不更新了 —— 但 CPU 是八核的,内存 4 GB 起,闪存 64 GB,还带一块支持 Vulkan 的 GPU。它只是不能再当手机用了,不是不能再当计算机用了。
mayukh4/linux-android 干的事情很直接:用 Termux 在这台手机上架起两个东西之一 —— 一个完整的 GPU 加速 Linux 桌面,或者一个7×24 的 Home Assistant 智能家居中枢。前提条件是标语里写的三句:不需要电脑、不需要 Root、不需要云服务。
一、先选路线:桌面还是服务器
两条路可以同时跑在同一部手机上,互不冲突 —— 这一点很多人不知道。但你得先想清楚主用途,因为它们的资源画像完全不同。
| Linux 桌面 | 智能家居服务器 | |
|---|---|---|
| 是什么 | 手机上的完整 GUI 桌面环境 | 控制 WiFi 设备的 Home Assistant 中枢 |
| 典型用途 | 学 Linux、Python 开发、SSH 服务器、浏览网页、放媒体 | 控智能灯/插座、做自动化、看仪表盘 |
| 入口脚本 | bash termux-linux-setup.sh | bash setup-homeassistant.sh |
| 耗时 | 10–30 分钟 | 15–45 分钟 |
| 跑起来长什么样 | Termux-X11 应用里出现一个桌面 | 局域网浏览器打开 http://手机IP:8123 |
一个判断标准:如果你要的是一台能插键盘鼠标的"小电脑",走路线一;如果你要的是一个插上充电器就再也不碰的"家电",走路线二。
二、门槛:硬件和软件各看什么
硬件
- arm64(64 位) 处理器的安卓机 —— 32 位机器直接出局
- 3 GB 以上内存(选 KDE Plasma 建议 4 GB 以上)
- 5–10 GB 可用空间,装 Wine 还要更多
- 高通骁龙最优 —— 因为 Adreno GPU 有开源的 Turnip Vulkan 驱动,能拿到接近原生的 GPU 加速。脚本也支持 Mali 和其他 GPU,但只能退回软件渲染
软件
| 应用 | 从哪装 | 注意 |
|---|---|---|
| Termux | F-Droid | 别用 Play Store 版本,已过时 |
| Termux-X11 | GitHub Releases | 下载最新 .apk |
Root 的问题: 脚本在原版安卓上就能跑,不需要 Root。作者的演示机是一加 5T 刷的 LineageOS,但那只是演示环境,不是前置条件。
三、路线一:桌面环境怎么选
| # | 桌面环境 | 适合谁 | 资源占用 |
|---|---|---|---|
| 1 | XFCE4 (默认) | 大多数人。快、可定制、带 macOS 风格 Dock | 低–中 |
| 2 | LXQt | 老机器或低内存(2–3 GB) | 极低 |
| 3 | MATE | 想要经典桌面手感 | 中 |
| 4 | KDE Plasma | 只给高性能机 —— Windows 11 风格 | 高 |
拿不定主意就选 XFCE4。这不是客气话,是脚本把 XFCE4 设为默认的原因。
四步装完
步骤 1 —— 装应用。 从 F-Droid 装 Termux,从 GitHub 装 Termux-X11,两个应用的权限全部授予。
步骤 2 —— 先升级 Termux 本身,这步别跳:
termux-wake-lock
pkg upgrade -y
termux-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 应用,桌面在那里渲染 —— 不在 Termux 终端里。这是新手最容易卡住的地方。停止桌面用 bash ~/stop-linux.sh。
一条命令装进来的东西
| 组件 | 作用 |
|---|---|
| Termux-X11 | 显示服务器,负责把桌面画到屏幕上 |
| Mesa / Zink | 通过 Vulkan 实现 OpenGL,GPU 加速的入口 |
| Turnip | 高通 Adreno 的开源 Vulkan 驱动(检测到时装) |
| PulseAudio | 音频 |
| Firefox / VLC | 完整桌面浏览器 / 多媒体播放 |
| git、wget、curl | 基础工具链 |
| Python 3 + pip | 运行时与包管理 |
| OpenSSH | SSH 服务端与客户端 |
| Wine (可选) | Hangover + Box64,跑 Windows x86 应用 |
GPU 加速:靠硬件属性,不靠品牌
这一处设计值得单独说。脚本不看品牌名,而是读硬件属性来判定 GPU 类型 —— 原因很实在:三星在不同地区同时用 Adreno 和 Mali,按品牌检测直接误判。
- 高通 Adreno(骁龙): 走开源 Turnip Vulkan 驱动 + Zink(Vulkan 之上的 OpenGL),性能接近原生。
- Mali / 其他: 回退到 Zink + SwRast(软件 Vulkan)。功能能用,但强烈建议配轻量桌面(XFCE4 或 LXQt),否则会卡到怀疑人生。
GPU 环境变量写在 ~/.config/linux-gpu.sh,每次 start-linux.sh 自动加载,可以直接改:
export GALLIUM_DRIVER=llvmpipe # 强制软件渲染(调试用)
export MESA_DEBUG=1 # 打开 Mesa 调试输出
export MESA_GL_VERSION_OVERRIDE=3.3
顺手把它变成无头 SSH 服务器
装了 OpenSSH 之后,你可以在同 WiFi 的任何电脑上 SSH 进来 —— 用正式键盘写代码,让手机负责跑。
在 Termux 应用本身(不是桌面里的终端)执行:
sshd # 启动 SSH 服务
passwd # 设置登录密码
ip addr show wlan0 | grep 'inet ' # 查 IP,形如 192.168.1.42
whoami # 查用户名,形如 u0_a123
然后在电脑上:
ssh u0_a123@192.168.1.42 -p 8022
端口是 8022,不是 22 —— 22 端口需要 Root。嫌命令长就写进 ~/.ssh/config:
Host myphone
HostName 192.168.1.42
User u0_a123
Port 8022
之后 ssh myphone 即可。传文件用 scp -P 8022 ...,或者任何 SFTP 客户端(FileZilla、Cyberduck)连同一个 IP 和 8022 端口。
想让 sshd 跟着 Termux 一起起来:
echo 'sshd 2>/dev/null' >> ~/.bashrc
Wine:聊胜于无
选了 Wine 的话,它是 Hangover Wine + Box64 的组合,把 Windows x86 调用翻译到 ARM64。简单小工具一般能跑,大型软件和游戏基本别指望。 配置在桌面终端里跑 winecfg,或点桌面上的 Wine Config 快捷方式 —— 注意 Wine 需要桌面已经跑起来,它没有自己的显示环境。
四、路线二:Home Assistant 智能家居中枢
这条路的思路是把旧手机变成全天候的家居中心: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 访问不到手机的蓝牙协议栈。
- 没有 USB 适配器。 Zigbee / Z-Wave USB 网关需要 Root 和内核支持,走不通。
- 没有自动发现(mDNS)。 Android 10+ 挡住了
/proc/net/dev,Zeroconf 失效。必须用 IP 或云 API 手动添加设备。 - 没有 Docker / 插件。 这是 HA Core,不是 HA OS —— 依赖 Docker 的社区插件跑不了。但核心集成(2000+ 个)都能正常用。
换句话说:这台机器适合控 WiFi 设备,不适合当 Zigbee 网关。 后者请老老实实买树莓派或专用网关。
安装与三个脚本
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 这类)。
装完你会得到三个脚本:
bash ~/start-homeassistant.sh # 启动
bash ~/stop-homeassistant.sh # 停止
bash ~/upgrade-homeassistant.sh # 升级
Python 版本天花板:不是装坏了
这是全文最值得记住的一段。全新安装拿到的 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 版本,并在触及上限时明确告诉你。想冲破这个上限(换 Python 3.14)README 里给了英文文档的指引,但那要替换正在运行的安装所用解释器,因此没有自动化 —— 属于"知道有这条路,但别轻易走"。
访问与添加设备
HA 起来后,同一 WiFi 网络中的任何设备打开浏览器:
http://<手机IP>:8123
首次启动需要 5–10 分钟 初始化,首次访问时创建管理员账户。
添加 TP-Link Kasa: 在常用手机的 Kasa 应用里记下设备 IP(设备设置 → 设备信息)→ HA 里「设置 → 设备与服务 → + 添加集成」→ 搜 “TP-Link Kasa Smart” → 填 IP。因为 mDNS 被禁,永远靠 IP 手动添加。
添加 Tuya / Smart Life: 走云 API,不受本地网络限制。到 iot.tuya.com 建免费开发者账户 → 建云项目(选数据中心区域,添加智能家居 API)→ 「设备」里关联涂鸦 App 账号扫二维码 → HA 里添加 Tuya 集成,填 Access ID 和 Access Secret。
HACS:社区插件商店
HACS 是 HA 核心之外那些集成、主题、Lovelace 卡片的商店,安装脚本会问你要不要装。
务必在装任何其他自定义集成之前先装 HACS。 如果
custom_components/里已经有手工装的集成,请先删掉再装,否则 HACS 会处于损坏状态。
让它 7×24 跑着
安卓默认会在 Termux 切后台时杀进程。要常驻:
# 方式 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 &' >> ~/.bashrc
termux-wake-lock 阻止安卓挂起进程。接上充电器,它就变成了一台专用常驻服务器。
五、排障速查表
| 现象 | 原因与处理 |
|---|---|
| 脚本中途退出但没报错 | 看 ~/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 / dbus-XXXX: Connection refused | D-Bus 会话总线没起来,或上次被强杀后留下失效 socket。新版 start-linux.sh 会先清残留状态再在固定地址起总线;老版本重跑 termux-linux-setup.sh 或手动修(pkill -9 -f dbus-daemon + 清 ~/.dbus 与 $PREFIX/tmp/dbus-* + 用 DBUS_SESSION_BUS_ADDRESS="unix:path=$PREFIX/var/run/dbus/session_bus_socket" 重启 daemon) |
vulkan-loader-generic : Conflicts: vulkan-loader-android,或 dpkg 报 trying to overwrite libvulkan_freedreno.so | 两个独立原因,现均已修复:前者是 generic 包同时 provides 和 conflicts android 包,脚本改为直接装 generic;后者是第三方 mesa-zink-vulkan-icd-freedreno(Mesa 22)与主仓库 Turnip(Mesa 26)打包了同名 .so,脚本改为只选一套。老安装遇到这两个报错大多 GPU 加速仍可用,重跑脚本即可清理 |
unmet dependencies / Conflicts | 脚本的 safe_install_pkg 会从 apt-cache show 读 Conflicts 字段并正确处理版本约束。仍失败就去提 Issue,附机型与安卓版本 |
| 没声音 | 桌面出现后等 5–10 秒,PulseAudio 首次启动要一点时间 |
| SSH 连接被拒 | 确认 sshd 在跑(ps aux | grep sshd),端口是 8022 不是 22 |
| Wine 起不来 | 需要活跃的显示环境 —— 先确保桌面在运行,再在桌面内终端跑 winecfg |
HA 的 pip install homeassistant 编译错误 | 缺构建依赖。进 proot-distro login ubuntu 确认 python3-dev、libffi-dev、libssl-dev、cargo 都在,再重试 |
| HA 的 8123 打不开 | 首次启动要 5–10 分钟;确认手机和浏览器在同一 WiFi |
HA 报 address already in use | 已有实例在跑,bash ~/stop-homeassistant.sh 或 pkill -f "hass -c" |
| HA 发现不了设备 | 安卓上正常现象。mDNS 被 Android 10+ 限制,改用 IP 手动添加或云集成 |
六、它适合谁,不适合谁
适合
- 抽屉里有 2019 年以后的安卓机,性能还行但已经没人用来打电话。
- 想学 Linux / Python,但不想为"学习"先买一台电脑 —— 一台 XFCE4 桌面加 root 都不用的环境,够跑完一整个入门教程。
- 想试智能家居,但不想为此添置树莓派和一堆配件,且手上主要是 WiFi 设备。
- 需要一个低功耗、插上电就不管的 SSH 跳板机或文件服务器。
不适合
- 32 位机器 —— 直接不满足前提。
- Zigbee / Z-Wave 用户 —— 没有 USB 适配器支持,这条路是死的。
- 想要 HA OS 全套体验的人 —— 没有 Docker、没有插件商店里的 add-ons。
- 对稳定性要求苛刻的人 —— 毕竟跑在 Termux 和 proot 之上,安卓的后台管理策略随时可能来打扰你。它是个很好的玩具和很有用的实验平台,但不是生产基础设施。
我的建议上手路径
- 先看重装系统这条路 —— 老机器刷一个 LineageOS 之类的轻量 ROM,可用的内存和闪存会明显宽裕。
- 装 Termux(F-Droid)+ Termux-X11,先老老实实跑
pkg upgrade -y。 - 先走桌面路线,选 XFCE4,不装 Wine。先把"能出来一个桌面"这件事跑通。
- 确认稳定后,再在同一部手机上加装 Home Assistant —— 两者不冲突。
- 最后再考虑 Wine,并且带着"能跑记事本就算成功"的心理预期。
最后说句实在的:这个项目最有价值的地方,不是省下了买树莓派的那几百块,而是它把"旧手机 = 电子垃圾"这个默认结局换成了"旧手机 = 待分配的算力"。一台能跑 Vulkan、能跑 Python 3、能 7×24 供电的八核 ARM 机器,在抽屉里放十年也不会自己变成别的东西。花半小时装两个脚本,它就变成了一台服务器 —— 这笔账怎么算都划算。
项目地址:github.com/mayukh4/linux-android,MIT 许可,作者配了完整的 YouTube 视频教程(描述里有时间戳索引)。如果它帮你省下了买硬件的钱,作者接受 GitHub Sponsor。