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

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 · 智能硬件开放实验室