diff --git a/README.md b/README.md index 3e41d93..dd48883 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # Repurpose Your Old Android Phone +**[中文文档](README.zh.md)** + Turn any old Android phone into a **Linux desktop** or a **smart home server** — no PC, no root, no cloud. Just [Termux](https://termux.dev). > Created to accompany a YouTube video walkthrough. Timestamps are referenced in the video description. diff --git a/README.zh.md b/README.zh.md new file mode 100644 index 0000000..bebe597 --- /dev/null +++ b/README.zh.md @@ -0,0 +1,444 @@ +# 旧安卓手机再利用 + +**[English](README.md)** + +将任意旧安卓手机变成 **Linux 桌面**或**智能家居服务器** — 无需电脑、无需 Root、无需云服务,只需 [Termux](https://termux.dev)。 + +> 本项目配合 YouTube 视频教程制作,视频描述中附有时间戳索引。 + +```mermaid +graph LR + A["📱 旧安卓手机
+ Termux"] --> B["🖥️ Linux 桌面
termux-linux-setup.sh"] + A --> C["🏠 智能家居服务器
setup-homeassistant.sh"] + B --> D["GPU 加速桌面环境
Firefox、VLC、SSH、Wine"] + C --> E["Home Assistant Core
控制灯光和插座"] +``` + +### 选择你的方案 + +| | Linux 桌面 | 智能家居服务器 | +|---|---|---| +| **是什么** | 手机上的完整 GUI 桌面环境 | 控制 WiFi 设备的 Home Assistant 中心 | +| **使用场景** | 学习 Linux、Python 开发、SSH 服务器、网页浏览、媒体播放 | 控制智能灯/插座、自动化、仪表盘 | +| **脚本** | `bash termux-linux-setup.sh` | `bash setup-homeassistant.sh` | +| **耗时** | 10–30 分钟 | 15–45 分钟 | +| **跳转** | [桌面安装](#安装) | [Home Assistant 安装](#home-assistant--智能家居服务器) | + +两者可以在同一部手机上运行 — 互不冲突。 + +YouTube 视频教程:https://youtu.be/tYm2rQpkOcg?si=moV59vk5J7B4h46N + +mayukh_builds (3) + +--- + +## 系统要求 + +### 硬件 +- 搭载 **arm64(64 位)** 处理器的安卓手机 +- 推荐 **3 GB 以上内存**(KDE Plasma 需 4 GB 以上) +- **5–10 GB** 可用存储空间(安装 Wine 需要更多) +- **高通骁龙**芯片最佳 — 可获得最好的 GPU 加速效果(Turnip/Adreno)。脚本也支持 Mali 及其他 GPU,但性能较弱。 + +### 软件 +| 应用 | 获取方式 | +|---|---| +| **Termux** | [F-Droid](https://f-droid.org/en/packages/com.termux/) — **请勿使用 Play Store 版本,该版本已过时** | +| **Termux-X11** | [GitHub Releases](https://github.com/termux/termux-x11/releases) — 下载最新 `.apk` | + +> **关于 Root / 自定义 ROM 的说明:** 本脚本在原版安卓上即可运行。视频演示使用的是 **LineageOS** 系统的一加 5T。脚本本身不需要 Root。 + +--- + +## 桌面环境 — 如何选择? + +| # | 桌面环境 | 适合人群 | 资源占用 | +|---|---|---|---| +| 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 并运行: + +```bash +termux-wake-lock +pkg upgrade -y +``` + +`termux-wake-lock` 命令可保持 Termux 在屏幕关闭时继续运行 — 没有它,安卓可能会在安装过程中杀死进程。`pkg upgrade` 会在脚本运行前更新基础系统,避免 `libpcre` 和 `libandroid-selinux` 相关的已知崩溃问题。 + +### 步骤 3 — 下载并运行脚本 + +```bash +curl -O https://raw.githubusercontent.com/mayukh4/linux-anroid/main/termux-linux-setup.sh +chmod +x termux-linux-setup.sh +bash termux-linux-setup.sh +``` + +脚本会询问你选择哪个桌面环境以及是否安装 Wine,其余全部自动完成。 + +安装耗时 **10–30 分钟**,取决于网络速度。完整的日志保存在 `~/termux-setup.log` 中,方便排查问题。 + +### 步骤 4 — 启动桌面 + +```bash +bash ~/start-linux.sh +``` + +然后在手机上**打开 Termux-X11 应用**,Linux 桌面将显示在其中。 + +停止桌面: + +```bash +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 应用本身),运行: + +```bash +# 启动 SSH 服务器 +sshd + +# 设置 Termux 密码(SSH 登录时使用) +passwd +``` + +查看手机 IP 地址: + +```bash +ip addr show wlan0 | grep 'inet ' +``` + +输出类似 `inet 192.168.1.42/24` — IP 地址是 `/` 前面的部分。 + +### 从电脑连接 + +在你的电脑上(Linux、macOS 或 Windows 终端): + +```bash +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 8022 +``` + +之后只需输入: + +```bash +ssh myphone +``` + +### 使用 SCP 或 SFTP 传输文件 + +从电脑复制文件到手机: + +```bash +scp -P 8022 myfile.txt u0_a123@192.168.1.42:~/ +``` + +从手机复制文件到电脑: + +```bash +scp -P 8022 u0_a123@192.168.1.42:~/somefile.txt ./ +``` + +也可以使用任何 SFTP 客户端(如 FileZilla 或 Cyberduck)— 连接到相同 IP 和端口 8022。 + +### 关闭 Termux 后保持 SSH 运行 + +默认情况下 `sshd` 会在 Termux 关闭时停止。要保持持久运行: + +```bash +# 添加到 ~/.bashrc,使 sshd 在 Termux 打开时自动启动 +echo 'sshd 2>/dev/null' >> ~/.bashrc +``` + +--- + +## Windows 应用支持(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+)均可正常使用。 + +### 安装 + +```bash +curl -O https://raw.githubusercontent.com/mayukh4/linux-anroid/main/setup-homeassistant.sh +bash setup-homeassistant.sh +``` + +安装耗时 **15–45 分钟**,取决于手机性能。最耗时的步骤是在 Ubuntu 容器中编译 Home Assistant 的 Python 依赖(numpy、cryptography 等)。 + +### 启动和停止 + +```bash +# 启动 Home Assistant +bash ~/start-homeassistant.sh + +# 停止 Home Assistant +bash ~/stop-homeassistant.sh +``` + +### 访问仪表盘 + +HA 运行后,在**同一 WiFi 网络中的任何设备**的浏览器中访问: + +``` +http://<你的手机IP>:8123 +``` + +在 Termux 中运行 `ip addr show wlan0 | grep 'inet '` 查看手机 IP。 + +首次启动需要 **5–10 分钟** 进行初始化。首次访问时你需要在浏览器中创建管理员账户。 + +### 添加第一个设备 — TP-Link Kasa + +1. 在常用手机上打开 Kasa 应用,记下设备的 IP 地址(设备设置 → 设备信息) +2. 在 HA 仪表盘中:**设置 → 设备与服务 → + 添加集成** +3. 搜索 **"TP-Link Kasa Smart"** +4. 按提示输入设备 IP 地址 +5. 你的灯/插座应该会出现 — 现在可以从 HA 仪表盘控制它了 + +> 由于安卓上 mDNS 被禁用,自动发现无法找到设备。请始终通过 IP 手动添加。 + +### 添加 Tuya / Smart Life 设备 + +Tuya 设备通过 Tuya 云 API 连接,不受本地网络限制影响: + +1. 前往 [iot.tuya.com](https://iot.tuya.com) 创建免费开发者账户 +2. 创建**云项目** → 选择你的数据中心区域 → 添加**智能家居** API +3. 进入**设备** → **关联涂鸦 App 账号** → 使用 Smart Life / Tuya Smart 应用扫描二维码 +4. 在 HA 仪表盘中:**设置 → 设备与服务 → + 添加集成 → Tuya** +5. 输入 Tuya IoT 控制台中的 **Access ID** 和 **Access Secret** + +### 保持 Home Assistant 后台运行 + +默认情况下,安卓会在 Termux 切到后台时杀死其进程。要保持 HA 24/7 运行: + +```bash +# 方式 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` 可防止安卓挂起进程。将手机接上充电器,它就变成了一台专用常驻服务器。 + +--- + +## 视频使用场景 + +旧安卓手机运行此方案后的用途灵感: + +- **智能家居控制器** — 插上电源,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`,然后重新运行脚本。 + +**包安装失败,提示"unmet dependencies"或"Conflicts"** +脚本的 `safe_install_pkg` 函数会自动读取 apt 的冲突声明,跳过可能导致系统异常的包。如果仍然出现此问题,请查看日志并提交 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 等)。 + +--- + +## 进阶说明 + +
+自定义 GPU 参数 + +`~/.config/linux-gpu.sh` 在每次桌面启动时被加载。常用调整: + +```bash +# 强制软件渲染(用于调试) +export GALLIUM_DRIVER=llvmpipe + +# 启用 Mesa 调试输出 +export MESA_DEBUG=1 + +# 修改 OpenGL 版本覆盖 +export MESA_GL_VERSION_OVERRIDE=3.3 +``` +
+ +
+SSH 密钥认证(免密登录) + +在电脑上生成密钥对(如果还没有): + +```bash +ssh-keygen -t ed25519 +``` + +将公钥复制到手机: + +```bash +ssh-copy-id -p 8022 u0_a123@192.168.1.42 +``` + +之后 SSH 将不再要求输入密码。 +
+ +
+Termux 打开时自动启动桌面 + +在 Termux 的 `~/.bashrc` 中添加: + +```bash +# 取消注释以在 Termux 打开时自动启动桌面 +# bash ~/start-linux.sh +``` +
+ +
+冲突安全安装器的工作原理 + +Termux 中有几个包会互相硬冲突(例如 `vulkan-loader-android` 和 `vulkan-loader-generic` 声明了互斥的 `Conflicts`)。标准的 `apt-get` 在安装一个包时如果另一个已存在会直接报错,导致脚本退出。 + +`safe_install_pkg` 函数通过在每次安装前从 `apt-cache show` 读取 `Conflicts` 字段来解决这个问题。如果声明的冲突包已安装,则跳过该包并发出警告,脚本继续运行。这意味着无论系统中预装了什么包,脚本都可以安全运行。 +
+ +
+关于 Termux 路径 + +所有硬编码的 `/data/data/com.termux/...` 路径都已替换为 `$PREFIX`(Termux 标准环境变量)。这意味着脚本也适用于非标准安装,例如安卓次要用户配置文件中的 Termux。 +
+ +--- + +## 贡献 + +欢迎提交 PR 和 Issue。如果包名已更改、某个桌面环境有更好的启动命令,或者你发现了新的冲突需要处理,请提交 Issue 并附上设备型号和安卓版本。 + +--- + +## 许可证 + +MIT — 可自由使用和修改。