
1. 为什么需要N1盒子DockerCUPS组合家里那台老掉牙的USB打印机是不是让你很头疼每次打印都得找根数据线连电脑手机想打印更是麻烦。我之前用的HP LaserJet M1005就是这种状况直到发现了N1盒子这个神器。这个巴掌大的小盒子配上Docker和CUPS居然能让十年前的打印机秒变无线设备。N1盒子其实是斐讯出品的电视盒子但因为其搭载的S905D芯片性能强悍早被极客们玩出了各种花样。我实测下来用它做打印服务器比树莓派性价比高多了二手市场80块就能淘到。关键是不用额外买打印服务器硬件省下好几百。CUPS全称Common UNIX Printing System是苹果公司开源的打印系统。它最厉害的地方在于能把任何打印机变成网络打印机而且跨平台支持完美。我在Windows、iPhone和安卓平板上都测试过打印文档就像用原装无线打印机一样顺滑。2. 硬件准备与系统环境搭建2.1 你需要准备这些设备N1盒子建议刷Armbian或OpenWRT系统USB打印机我用的HP M1005其他品牌也兼容网线或可靠的WiFi连接至少8GB的U盘用于系统安装先说说系统选择。我试过Armbian和OpenWRT最终选了OpenWRT。不是因为它更好用而是对Docker的支持更稳定。刷机过程网上教程很多记得要选带Docker的固件包。有个坑要注意某些版本的OpenWRT会阉割USB驱动导致打印机识别失败。连接打印机时有个小技巧先把N1盒子断电接好打印机再通电。我刚开始热插拔经常认不出设备后来发现冷启动识别率100%。如果遇到设备不识别用这个命令检查lsusb应该能看到类似HP LaserJet的设备信息。2.2 Docker环境配置OpenWRT默认的Docker可能版本较旧建议先更新opkg update opkg install docker-ce装好后别急着跑CUPS先设置下Docker的存储路径。N1盒子内置存储小我推荐挂载U盘作为Docker数据盘mkdir -p /mnt/usb/docker mount /dev/sda1 /mnt/usb/docker然后在/etc/docker/daemon.json添加{ data-root: /mnt/usb/docker }这样能避免把盒子撑爆。我刚开始没注意结果打印任务一多就把存储塞满了。3. CUPS容器部署实战3.1 一键启动打印服务直接上我优化过的启动命令这个版本解决了打印机热插拔问题docker run \ --namecups \ --restartalways \ --privileged \ --nethost \ -v /var/run/dbus:/var/run/dbus \ -v /mnt/usb/cups/config:/config \ -v /mnt/usb/cups/services:/services \ -v /dev/bus/usb:/dev/bus/usb \ -e CUPSADMINadmin \ -e CUPSPASSWORD123456 \ jysky007/cups:v1几个关键点--privileged参数必须加否则USB设备没权限端口631要确保没被占用密码别用简单的password我吃过亏启动后用这个命令检查状态docker logs cups看到Listening to /var/run/cups/cups.sock就成功了。3.2 打印机驱动选择玄学在浏览器打开http://N1的IP:631用刚才设置的账号登录。点击Add Printer时可能会遇到驱动找不到的情况。我的经验是HP打印机选foomatic/foo2xqx系列驱动兄弟打印机选brlaser驱动佳能选CNCUPS开头的驱动如果列表里没有你的型号试试Generic PostScript Printer。我家的M1005就是用这个驱动反而比官方驱动稳定。实在不行就去打印机官网下PPD文件上传到CUPS里。4. 各终端配置指南4.1 Windows电脑设置Win10/11的自动发现经常抽风建议手动添加控制面板→设备和打印机→添加打印机选择我需要的打印机不在列表中输入URL格式http://N1的IP:631/printers/你的打印机名驱动安装有个坑要注意如果系统自带的驱动不行去Microsoft Update Catalog网站下载。比如我的M1005就要下专门的驱动包解压后选择里面的.inf文件安装。4.2 手机无线打印技巧iPhone用户最幸福系统自带AirPrint支持。在相册或文件里点分享→打印自动就能发现打印机。安卓机稍微麻烦点但用PrinterShare这个APP也能搞定。实测发现个有趣现象手机打印PDF比电脑还快。后来发现是因为CUPS会自动把文件转为PostScript格式手机直接发PDF省去了格式转换步骤。5. 扫描功能扩展方案原版CUPS不支持扫描但可以用scanservjs容器弥补docker run -d \ -p 8080:8080 \ -v /var/run/dbus:/var/run/dbus \ --nethost \ --name scanservjs \ --privileged \ sbs20/scanservjs:latest访问http://N1的IP:8080就能用网页扫描了。不过扫描速度比直接连电脑慢适合偶尔用用。建议扫描时关闭其他容器把资源留给扫描服务。6. 常见问题排坑指南6.1 打印机断电后无法连接这是最烦人的问题解决方案是在N1盒子里创建自动重启脚本vi /etc/hotplug.d/usb/10-usb_printer加入以下内容#!/bin/sh sleep 15 docker restart cups然后给执行权限chmod x /etc/hotplug.d/usb/10-usb_printer6.2 打印任务堆积卡死CUPS默认会保留所有打印任务久了会占满存储。SSH登录N1盒子定期清理docker exec cups cupsctl --no-jobs或者直接删任务文件夹rm -rf /mnt/usb/cups/config/spool/*6.3 时间戳错误问题如果发现打印日志时间差8小时是时区问题。进容器执行docker exec -it cups bash ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime exit docker restart cups折腾这套系统花了我两个周末但看到十年前的老打印机秒变AirPrint设备时那种成就感真的爽。现在家里谁想打印手机一点就能出纸再也不用求着开电脑了。最惊喜的是耗材兼容性——之前用Windows共享经常提示非原装墨盒现在CUPS完全不管这些限制。