在 Android 上跑一个完整的 Debian(真 chroot,非 proot):开机自动挂载、sshd
局域网可达、通知直通 Android 通知栏。合并自两个成熟模块
(debian-sshd-autostart v2.2 + chroot-android-bridge v1.0)并附自动化 bootstrap。
开机 (KernelSU service.sh, root)
│ 等待 sys.boot_completed + Termux 数据目录
├─ 挂载: proc sys dev/pts dev/shm run tmp
│ + /storage/emulated/0 → /mnt/android_raw (bind)
│ + bindfs uid 重映射 → /mnt/android ← 普通用户也能读写 sdcard
├─ DNS: getprop net.dns* + 公共 DNS → /etc/resolv.conf
├─ aid_inet/aid_net_raw 组(chroot 内联网需要)
├─ sshd :8022(仅密钥,iptables 仅放行局域网+loopback)
└─ /etc/service.d/*.sh 按序执行 chroot 内自定义服务
└─ 40-android-bridge.sh: dbus 会话总线 + 通知转发 daemon
│
chroot 内 libnotify 调用 ────┤ D-Bus org.freedesktop.Notifications
▼
TCP 127.0.0.1:9870 (JSON 协议)
▼
Termux ~/android-bridge/bridge.py (Termux:Boot 常驻)
▼
termux-api → Android 通知/Toast/振动
| 组件 | 位置 | 职责 |
|---|---|---|
module/service.sh |
KSU 模块 | 开机编排:挂载/DNS/sshd/防火墙/service.d |
debian-sshd |
Termux $PREFIX/bin |
控制台:start/stop/restart/status/shell |
module/chroot/* |
装进 chroot | D-Bus 通知转发 daemon + profile + service.d 钩子 |
module/termux/bridge.py |
~/android-bridge/ |
通知桥 Termux 侧(TCP 9870 → termux-api) |
bootstrap.sh |
本仓库 | 自动下载 LXC rootfs 并安装依赖(原手工手册的自动化) |
- arm64 设备 + root(KernelSU / Magisk)
- Termux + Termux:API、Termux:Boot 插件(F-Droid 同源签名)
- chroot 内(bootstrap 自动装):
openssh-server dbus python3-dbus python3-gi libnotify-bin bindfs - 约 2GB+ 空闲空间(最小 rootfs ~120MB,装完依赖 ~400MB)
# 1. rootfs(可指定 trixie/bookworm,默认 trixie)
bash bootstrap.sh
# 2. 公钥(密码登录已禁用!)
su -c 'cp your_key.pub /data/local/debian/root/.ssh/authorized_keys'
# 3. 模块(二选一)
bash install.sh # 仓库内直装,立即生效
# 或 ./build.sh 出 zip → 管理器刷入 → 重启
# 4. 连接
ssh root@<平板局域网IP> -p 8022debian-sshd status # 挂载/sshd/连接信息
debian-sshd shell # 免密进入 chroot 交互 shell
debian-sshd restart # 重启 sshdchroot 内自定义开机服务:往 /etc/service.d/ 放可执行 .sh(数字前缀排序,
脚本需自行后台化,支持 set -e)。
通知桥(chroot 内任何 libnotify 程序零改动):
notify-send "编译完成" "gradle build ✓" # → Android 通知栏
# 协议(直连 TCP 9870 亦可):
# {"cmd":"notify","title":"..","content":"..","id":1,"sound":false,"vibrate":[300,100],"buttons":["A"]}
# {"cmd":"toast","content":"hi","short":true}
# {"cmd":"vibrate","duration":1000}
# {"cmd":"notify-cancel","id":1} / {"cmd":"ping"}- sshd:
PermitRootLogin prohibit-password,全部密码类认证关闭,强加密套件 - 防火墙:iptables/ip6tables 仅放行
127/8 · 10/8 · 172.16/12 · 192.168/16 · ::1 · fc00::/7,其余 DROP - 通知桥只监听
127.0.0.1,不暴露局域网
/data/local/debian— rootfs(卸载模块不删除,手动删需谨慎先 umount)/data/local/tmp/debian-sshd-boot.log、android-bridge-boot.log— 启动日志- 原始手工安装手册见 docs/manual-install.txt
管理器卸载模块(自动 umount,rootfs 保留);彻底删除:
su -c 'sh /data/adb/modules/debian-chroot/uninstall.sh
rm -rf /data/adb/modules/debian-chroot /data/local/debian'MIT — 见 LICENSE