抽屉里的旧安卓手机别扔:两条脚本,把它变成 Linux 桌面或 Home Assistant 服务器

mayukh4/linux-android 用两个 Bash 脚本把闲置安卓手机改造成 GPU 加速的 Linux 桌面(XFCE4/KDE/LXQt/MATE)或 7×24 的 Home Assistant 智能家居中心,不需要 Root、不需要电脑、不需要云。本文讲清两条路线怎么选、四步装完、GPU 加速靠什么、安卓上哪四件事注定做不到,以及一个会让人误判「装坏了」的 Python 版本天花板。

本文整理自 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.shbash 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,但只能退回软件渲染

软件

应用从哪装注意
TermuxF-Droid别用 Play Store 版本,已过时
Termux-X11GitHub Releases下载最新 .apk

Root 的问题: 脚本在原版安卓上就能跑,不需要 Root。作者的演示机是一加 5T 刷的 LineageOS,但那只是演示环境,不是前置条件。


三、路线一:桌面环境怎么选

#桌面环境适合谁资源占用
1XFCE4 (默认)大多数人。快、可定制、带 macOS 风格 Dock低–中
2LXQt老机器或低内存(2–3 GB)极低
3MATE想要经典桌面手感中
4KDE 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运行时与包管理
OpenSSHSSH 服务端与客户端
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.122025.1.x
3.13.0 – 3.13.12025.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 executablelibpcre 崩溃。彻底关掉 Termux → 重开 → pkg upgrade -y → 重跑脚本
Unable to contact settings server / dbus-XXXX: Connection refusedD-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 之上,安卓的后台管理策略随时可能来打扰你。它是个很好的玩具和很有用的实验平台,但不是生产基础设施。

我的建议上手路径

  1. 先看重装系统这条路 —— 老机器刷一个 LineageOS 之类的轻量 ROM,可用的内存和闪存会明显宽裕。
  2. 装 Termux(F-Droid)+ Termux-X11,先老老实实跑 pkg upgrade -y。
  3. 先走桌面路线,选 XFCE4,不装 Wine。先把"能出来一个桌面"这件事跑通。
  4. 确认稳定后,再在同一部手机上加装 Home Assistant —— 两者不冲突。
  5. 最后再考虑 Wine,并且带着"能跑记事本就算成功"的心理预期。

最后说句实在的:这个项目最有价值的地方,不是省下了买树莓派的那几百块,而是它把"旧手机 = 电子垃圾"这个默认结局换成了"旧手机 = 待分配的算力"。一台能跑 Vulkan、能跑 Python 3、能 7×24 供电的八核 ARM 机器,在抽屉里放十年也不会自己变成别的东西。花半小时装两个脚本,它就变成了一台服务器 —— 这笔账怎么算都划算。

项目地址:github.com/mayukh4/linux-android,MIT 许可,作者配了完整的 YouTube 视频教程(描述里有时间戳索引)。如果它帮你省下了买硬件的钱,作者接受 GitHub Sponsor。