 安装教程 —— 把安卓机顶盒变成「打印机服务器」

 openhardwarelab · 智能硬件开放实验室 · 面向普通用户 / 开发者。约 20–40 分钟。
 用一台吃灰的安卓机顶盒 + 一台 USB 打印机，做成一台局域网共享打印服务器：
 手机扫码传文件打印、电脑用 IPP/网络打印机、盒子屏幕显示二维码、可打印二维码贴纸。
 本项目在 烽火 HG680-J（海思 Hi3798MV100 / Android 4.4.2 / armv7）实测通过。

---

 0. 你需要

- 一台已 root 的安卓机顶盒（建议 Android 4.4+，本教程多在 HG680-J 实测）。
- 一台 USB 打印机（普通家用喷墨/激光即可；老式"主机型/GDI"打印机也能用 brlaser 驱动）。
- 电视/显示器（看盒子屏幕）、路由器（组局域网）。
- 电脑一台（装 adb，用于安装；WSL/Linux/macOS/Windows 均可）。
- 可选：U 盘（放驱动 .ppd 文件用）。

 总思路：盒子里跑一个 Linux 子系统（chroot），里面装 CUPS（打印服务）+ 一个网页打印门户 printd（:8080）；
 盒子屏幕装一个 打印服务器桌面 App（开机即进，内嵌网页打印界面 + 二维码）；开机自动拉起全部服务。

---

 1. 认清你的盒子（1 分钟）

    getprop ro.product.cpu.abi          # armv7 / arm64
    getprop ro.build.version.release; getprop ro.build.version.sdk
    cat /proc/meminfo; df -k
记下：架构 / 安卓版本 / 内存 / 分区。/data 常常很小，后面要注意空间。

---

 2. 打开控制通道（ADB）

盒子开「ADB 调试」→ 电脑：
    adb connect 192.168.1.100:5555     # 换成你的盒子 IP
    adb devices
 连不上按你盒子的说明（有的在「运维调试」里，可能弹随机码）。串口(TTL)是备用生命线（万一网络挂了还能救）。

---

 3. 准备 Linux 子系统（CUPS 跑在里面）

打印服务（CUPS + printd）跑在盒子的 Linux chroot 里。若你已按
「机顶盒改电脑主机」教程建好了子系统 /data/linux，可直接进入第 4 步。

还没建？在盒子（root）里大致这样做：
    # 1) 准备一个 armhf 的 Ubuntu 根文件系统镜像 -> /sdcard/linux.img
    #    （也可用现成的 linux20.img；ARMv7 盒子要 armhf 版）
    # 2) 挂载
    busybox losetup /dev/block/loop0 /storage/emulated/0/linux.img
    mkdir -p /data/linux
    busybox mount -t ext4 /dev/block/loop0 /data/linux
    busybox mount -t proc proc /data/linux/proc
    busybox mount -o bind /dev /data/linux/dev
子系统里装依赖（关键，见第 5 步）。 详细见 开发者资料/系统改造手册.md。

---

 4. 进入子系统装依赖（CUPS + 驱动）

在电脑上（盒子已连 adb），进子系统装打印相关的包：
    adb shell "busybox chroot /data/linux /usr/bin/env \
      PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin \
      /bin/bash -c 'apt-get update && apt-get install -y \
        cups cups-filters avahi-daemon avahi-utils \
        printer-driver-gutenprint printer-driver-brlaser printer-driver-cups-pdf \
        python3-pil fonts-droid-fallback qrencode'"
- cups 打印服务；avahi 让 Mac/iPhone 自动发现；
- printer-driver-gutenprint 通用驱动（几千个 PPD）；printer-driver-brlaser 主机型 Brother/联想激光；
- python3-pil + fonts-droid-fallback 用于生成「二维码贴纸」（也顺带让中文文档能正常打印）；
- qrencode 生成二维码。

 盒子一般只有 HTTP(80) 能出网（HTTPS 不通），apt 走 http 镜像没问题；若要用某品牌驱动，可 apt-get install printer-driver-<品牌。

---

 5. 部署打印服务（一键或手动）

一键（电脑上，切到 安装文件 目录）：
    ./一键安装.sh 192.168.1.100
它会：把 打印服务.py/二维码贴纸.py 推进子系统 /root/；装桌面 App；并提示后续步骤。

手动：
    adb push 打印服务.py   /data/linux/root/printd.py
    adb push 二维码贴纸.py /data/linux/root/qrsheet.py

配置 CUPS（子系统里）：
    # 允许局域网访问（cupsd.conf 里 Listen 0.0.0.0:631，各 <Location> 加 Allow all）
    # 启动
    dbus-daemon --system --fork
    /usr/sbin/cupsd
    avahi-daemon -D --no-chroot --no-drop-root
    python3 /root/printd.py            # 网页打印门户 :8080

---

 6. 插打印机、装驱动

- USB 打印机插到盒子 USB 口（盒子挑口：不行换另一个口 / 用带供电的 HUB）。
- 浏览器（手机/电脑）打开 http://<盒子IP:8080/：
  - 没配打印机 → 自动进设置向导：自动检测 USB 打印机型号 → 搜驱动 → 选定安装。
  - 找到的驱动里没有你的型号？用「联网检索驱动型号」按品牌在线装，或「上传 .ppd」。
  - 装好后回首页，自动出现打印机地址 + 二维码。
- 老式主机型(GDI)打印机：用 brlaser（如联想 M7206 对应 br1600）。

 装完打一张测试页验证出纸（管理页/首页菜单都有）。

---

 7. 装「打印服务器桌面」（盒子开机即进）

把桌面 App 装成盒子 HOME：
    adb push 桌面.apk /sdcard/printsrv.apk
    adb shell 'pm install -r /sdcard/printsrv.apk'
    # 让它成为默认桌面（若还有别的 HOME 应用，禁用/卸载旧的）
装好后盒子屏幕就是打印服务器界面：
- 左：内嵌网页打印界面（拖文件/选文件 → 打印；带二维码）
- 右：菜单（驱动管理 / 打印测试页 / 复制打印机地址 / 回到首页）
- 顶部：当前打印机 + 打印机地址（ipp://<IP:631/printers/<名）

---

 8. 开机自启

让子系统开机自动挂载并拉起服务。参照「机顶盒改电脑主机」的做法：
- 在子系统的 /root/startbox.sh 里依次拉起：dbus / cupsd / avahi / printd；
- 在盒子的开机脚本里 chroot 执行 startbox，并在末尾 am start ... HOME。
- 装好后重启复查：http://<盒子IP:8080/ 能开、桌面显示打印界面。

 3-开机自启.sh / 4-开机兜底.sh 是本项目用到的启动脚本，可按你 ROM 调整路径。

---

 完成！日常怎么用

- 手机传文件打印：同一 WiFi，扫盒子屏幕/网页上的二维码，或浏览器开 http://<盒子IP:8080/，选/拖文件 → 打印。
- 电脑当网络打印机用：Windows/Mac「添加打印机 → 按地址/IP 添加」，填
  ipp://<盒子IP:631/printers/<打印机名（首页可一键复制）。
- 打印二维码贴纸：打印页二维码下面「打印此二维码（A4 一版 6 张）」→ 直接打出一整张 A4，含 6 张二维码（每张上方有说明），剪下来贴到打印机/墙上。

---
 可选：拖拽打印 / 扫码贴纸 / 换驱动 / 隐私模式
- 拖拽打印：网页打印页支持把文件拖进去即打印（电脑浏览器体验最好）。
- 二维码贴纸：A4 一版自动排 6 张；需 python3-pil + 中文字体。
- 换驱动：管理页对每台打印机可「更换驱动 / 设默认 / 测试页 / 删除」。
- 保密模式：打印后清除任务记录与上传文件（默认开）。

---
—— openhardwarelab · 智能硬件开放实验室
