>_ DevTrendszh

语言

首页

语言

板块

前端 后端 移动端 DevOps AI / ML 游戏开发 区块链 嵌入式 安全
Java

如何使用 Termux Boot 将旧 Android 手机变成独立服务器

我们很多人家里都有一部积灰的旧 Android 智能手机。屏幕稍微有点碎裂,电池不太耐用,也卖不出好价钱。然而,它内部有一颗功能完好的四核处理器和几 GB 的内存。这些硬件使其成为运行 Telegram 机器人、轻量级自动化脚本或本地 SSH 节点的出色家庭服务器。

Termux 终端早已将 Android 变成了一个完整的 Linux 环境。但有一个烦人的问题。如果智能手机因电池耗尽而关机或更新后重启,所有正在运行的进程都会终止。你必须手动打开应用,输入命令,从头重启服务。

Termux:Boot 插件有助于解决这个问题。它是一个实用工具,可挂钩到操作系统的启动事件并运行用户脚本。

Android 中的自动启动是如何工作的

Android 对后台进程有严格限制。未经用户直接同意和特殊权限,系统不允许应用随操作系统启动。

Termux:Boot 作为系统事件 BOOT_COMPLETED 和 Termux 内部 Linux 环境之间的桥梁。当智能手机开机时,插件从系统接收信号,查看用户指定的目录,并按顺序运行找到的可执行文件。

这里有一个关于应用签名的细节。Termux 和 Termux:Boot 通过共享访问权限进行通信。由于 Android 的安全规则,两个应用必须使用相同的开发者密钥签名。

如果你从 F-Droid 安装了主 Termux,那么 Termux:Boot 插件也必须严格从 F-Droid 获取。尝试混合 Google Play 版本和 F-Droid APK 将导致访问错误。如果你想测试最新的提交,开发者会将调试版本上传到 GitHub Actions。但请记住:更改安装源需要完全卸载 Termux 及其所有插件。

分步设置

设置方案很简单。说白了就是创建一个文件夹和几个文本文件。

首先,你需要安装 Termux:Boot 插件本身。安装后,一定要在应用菜单中找到它的图标并点击一次。这将授予插件拦截系统自动启动的权限。没有这个操作,Android 将直接阻止后台启动。

然后打开 Termux 终端,创建脚本目录:

mkdir -p ~/.termux/boot/

放置在此文件夹中的所有文件都将成为自动启动场景。如果文件夹中有多个文件,插件将按字母顺序执行它们。

为防止智能手机在启动五分钟后进入深度睡眠,脚本开头使用命令 termux-wake-lock 非常有用。它强制 Android 保持 CPU 处于唤醒状态。

实用脚本示例

让我们通过几个实际场景来演示。一个常见任务是让系统在启动后立即提供 SSH 访问。

让我们创建文件 ~/.termux/boot/start-sshd

#!/data/data/com.termux/files/usr/bin/sh
termux-wake-lock
sshd

确保使文件可执行,否则系统将忽略它:

chmod +x ~/.termux/boot/start-sshd

现在当你重启手机时,Termux 将在后台启动 SSH 服务器。你将能够通过网络连接它,无需任何屏幕交互。

如果你使用 termux-services 包来管理系统守护进程(普通 Linux 发行版中的 systemd 等效项),启动脚本如下:

#!/data/data/com.termux/files/usr/bin/sh
termux-wake-lock
source /data/data/com.termux/files/usr/etc/profile.d/start-services.sh

~/.termux/boot/start-services 中创建此文件,授予执行权限,所有通过 sv-enable 命令启用的服务都将自动启动。

实际用例

这个项目的主要价值在于完全自主。智能手机变成了一台安静的迷你服务器,拥有自己的内置不间断电源。

以下是几个明确的场景:

  • Telegram 机器人托管。机器人随设备启动,无需持续监控即可运行。
  • 通过 Syncthing 进行文件同步。手机作为 24/7 节点用于备份照片或文档。
  • 家庭网络监控。脚本定期检查路由器或外部服务的可用性,并在故障时发送通知。
  • 本地数据库服务器(如 SQLite 或 PostgreSQL)用于收集智能家居设备的日志。

调试和陷阱

没有完美的解决方案,Termux:Boot 也有其自身的问题。

现代 Android 固件中激进的省电模式喜欢杀死后台进程。MIUI、One UI 和 EMUI 在这方面尤其严重。为了让插件正常工作,请进入 Android 的电池设置,为 Termux 和 Termux:Boot 禁用电池优化。在类似 MIUI 的固件上,你还应在应用设置中手动允许插件自动启动。

然后值得检查日志功能。如果脚本没有启动,在脚本中直接将错误输出重定向到文件:

#!/data/data/com.termux/files/usr/bin/sh
exec 2>&1
exec 1>/sdcard/termux-boot.log
termux-wake-lock
echo "Boot completed at $(date)"

这样你就能立即看到脚本是否在环境变量路径上遇到问题,或者是否找不到所需的二进制文件。

更新应用或刷写设备后,有时需要通过桌面图标手动重新启动 Termux:Boot。

总结

Termux:Boot 是一个极其简单的插件,只有一个任务,而且做得很好。Java 源代码占用空间极小,任何熟悉基本 bash 的人都能理解其逻辑。

如果你计划用旧智能手机构建家庭服务器或紧凑型自动化系统,这个插件将在设备意外重启时为你节省时间。

相关项目