教程[14] 将 Android 设备改造成服务器

开篇废话

我的 LG V30 屏幕在前几个月彻底 GG 了,不过这个洋垃圾也卖不出价格(大概只能卖100),所以就考虑当成一个 arm 服务器用。榨干手机最后一滴价值
很遗憾的是我这台机型并没有人缝合出 Linux 发行版出来,自己技术也不够,所以还是以 Android 作为基底(折腾完后以 Termux 为主)。

将 Android 作为服务器我们应该需要安排以下东西:

  • 多种方案远程 (SSH / ADB / VNC
  • 自动开机
  • busybox
  • 系统不能加密(不设置锁屏密码基本就 ok)

Android 的选择

一般来说,推荐机器是已经解锁的了机器拿来玩,刷个类 AOSP 不带 GAPPS 的 ROM 应该就差不多的。

为了节省工作量,下带 userdebug 的 Android 感觉是比较好的
userdebug 相比 user 来说,一般会自动开启 adb (全局信任设备) 然后 selinux 很有可能是糊的

adb root
adb disable-verify

作为比较懒的就这样了,不然就要手动加 build.prop 参数之类的。
(当然 手动信任也可以的,不过可能就无法无人值守之类的,网络 adb 就算了,太不安全了)。

adb 开启后就可以直接通过 scrcpy 用 adb 来远程控制手机了~
当然 Magisk 也是需要的,刷机部分不再赘述。

建议安装的 app 们:

  • F-Droid (FOSS 商店)
  • Termux (在 F-Droid 上下载)
  • telegram-sms (如果需要自动收短信)

shell 方面,可以使用 Termux 或者 系统自带的 Terminal (要在开发者选项里面使用)

Magisk

这里我安装了以下几个 Magisk 模块:

  • Advanced Charging Controller (ACC)
  • Busybox for Android NDK
  • SSH for Magisk

magisk

ssh

ssh 项目地址

ssh 功能就交给 Magisk 模块完成了,不过密码登录是不可能的,我们需要 (authorized_keys) 才能连上,生成之类的就不再重复了,一吨教程。。。

把 authorized_keys 丢到 /data/ssh/root/.ssh 目录下,然后 ssh root@ip 即可

ssh

(另外推荐 Termux 也开个 ssh)

adb 信任

在无屏模式下, adb 信任可能有、难度(因为要物理点击),但是改 adbd 全信任好像又有点不安全的样子,所以我们要找到 Android 存 adb 公钥的地方,这里我们随便搜索下就有答案了。
设备在我们有 ssh 就按照这个方式添加 adb pub keys 到系统即可。

自动停止充电

acc 项目地址

为了让电池鼓包不会那么快发生,我们需要智能(按需)的充电方案,如果你的 ROM 已经有了大概就不需要再安装 Advanced Charging Controller (ACC) 了,如果没有的话就手动安装然后设置一下。
配套app下载
我设置了 充到 50% 就停止充电,然后低于 20% 的时候再充电。
希望暑假回家的时候不会鼓包 acca

自动开机

XDA 原帖

希望不出什么意外,自动开机还是要安排一下的,参考原帖,我们需要需要修改系统的 init.rc 文件(或者自己找其它方案)
路径为 /etc/init/hw/init.rc 我们手动编辑里面的 on charger
(也有可能文件在 boot.img 里面,需要自己解包然后加回去,这里不再提供教程因为我拆包以后根本没发现文件

on charger
    class_start charger

改成

on charger
    setprop ro.bootmode "normal"
    setprop sys.powerctl "reboot"

即可

(系统只读的话就不用我多说了吧 mount -o rw,remount /system

Termux

程序们大概都在 Termux 里面运行,里面也可以缝合别的发行版(Debian / ArchLinux / Gentoo ….),这里不再赘述。
换源什么的也不用多说了,参考这个
Termux 里面的环境相比正常的 Linux 很多在于文件路径不一样, /etc -> ~/../usr/etc 或者 /data/data/com.termux/files/ (毕竟 /etc 之类的是 Android 系统要占的)
下面举两个例子参考,其它软件包也是差不多这样~

openssh

这里我们又开了个 ssh,区别于 Magisk 的 ssh 这边是 Termux 内部的。

pkg install openssh
echo "Port 2222" >> /data/data/com.termux/files/usr/etc/ssh/sshd_config
passwd #(输入密码) 或者丢个 authorized_keys 到 ~/.ssh
sshd # 测试

不出意外应该是可以连接了,我们还需要安排开机自动启动。

ssh root@ip -p 2222 #(Termux 特别处理,以 root 登录也还是当前用户)

(systemd 底裤 之类的肯定是不可能存在的,守护/开机自启的话会比较简陋)
下载 Termux:Boot 然后参考官方文档

我的启动 sshd 脚本参考 /data/data/com.termux/files/home/.termux/boot/10-sshd

#!/data/data/com.termux/files/usr/bin/sh
termux-wake-lock
sudo hostname lg # 主机名
sshd

nginx

nginx 有点蛋疼,似乎需要以 root 用户启动才能使用 80 (低于 1024)的端口,即使设置了 sudo setcap cap_net_bind_service=+ep /data/data/com.termux/files/usr/bin/nginx 也不行。

pkg install nginx -y
nginx

然后 http://ip:8080/ 就可以访问了

自动启动脚本 /data/data/com.termux/files/home/.termux/boot/20-root-nginx

#!/data/data/com.termux/files/usr/bin/sh
sudo nginx
 # sudo 二进制在 tsu 包里面

关闭屏幕

机器已经摔到,只要屏幕上电就是最大亮度 + 纯白了,耗电 MAX,所以我们需要找办法关闭屏幕。
(亮度设置为0还是一样,这里就直接彻底关闭,当然也不能触摸了)

turnoff_screen.sh:

echo 4 > /sys/class/graphics/fb0/blank

0 应该是恢复,这边就不测试了

使用 Termux 开机自动启动

#!/data/data/com.termux/files/usr/bin/sh
sudo sh /data/data/com.termux/files/home/turnoff_screen.sh

总结

经过这些折腾后,基本上就可以把这玩意当个 mini 服务器了,因为 ta 可以:

  1. 来电自动开机
  2. 开机自动运行程序
  3. 可以远程

至于能开什么服务,我也不知道,也许可以远程跑毒瘤软件,然后跑 node / python 还是很正常的,当成收短信机之类的也不错。

最后希望机器的 watchdog 能正常运行,不会出现死机了要手动长按重启

neofetch
aria2