想在群晖 DSM7.2 上使用 老古董 HP CP1025 打印机, 但群晖自带的打印服务器不支持该打印机驱动, 只能通过 Docker 安装 CUPS 来实现.
搜索多篇文章,找到几个 docker 镜像,大部分无法识别 HP CP1025 打印机, 只有 chuckcharlie/cups-avahi-airprint 能找到打印机。
文章中提到的几个 docker 镜像:
- olbat/cupsd 找不到打印机
- ydkn/cups 找不到打印机
- chuckcharlie/cups-avahi-airprint 能找到打印机
chuckcharlie/cups-avahi-airprint 能找到打印机, 但无法打印,提示 “Filter failed”。
一番搜索后,在树莓派论坛找到了原因, hplip 驱动有问题,需要安装 foo2zjs 开源驱动。
玩客云测试
为了测试 foo2zjs 驱动是否有效, 打开了另一件吃灰的老古董玩客云, 系统是 armbian, 安装了 openmediavault 4。
从 omv-extras 里安装 openmediavault-cups, 然后在 cups web 界面添加打印机, 选择 “HP LaserJet Pro CP1025nw Foomatic/foo2zjs-z3 (en)” 驱动,成功打印测试页。
如果选择 “HP LaserJet Cp1025, hpcups 3.23.12 (en)” 驱动,打印测试页失败,提示 “Filter failed”。
确认 foo2zjs 驱动可以正常使用。
在群晖 DSM7 上安装 CUPS
关闭自带 cups 服务
在群晖 DSM7 上, 需要先关闭自带的打印服务器服务, 否则会占用 631 端口.
| |
运行 docker 容器
创建配置目录 mkdir -p /volume1/docker/airprint/config /volume1/docker/airprint/services
创建 /volume1/docker/airprint/docker-compose.yml 文件:
| |
启动容器: cd /volume1/docker/airprint && sudo docker-compose up -d
安装 foo2zjs 驱动
foo2zjs 官网 http://foo2zjs.rkkda.com 已经无法访问,幸好 webarchive.org 上有存档可以下载。
进入容器: cd /volume1/docker/airprint && sudo docker-compose exec airprint sh
在容器内下载并安装 foo2zjs 驱动。
| |
安装完成后,运行 make cups 进行配置修改, 会修改 /etc/cups/cups-files.conf 文件, 允许使用 file 设备。
但是这里会依赖 vim,镜像里没有;对比修改前后的文件,发现只需要添加两行配置, 直接用 echo 命令添加即可。
echo -e 'FileDevice Yes\nSandboxing Relaxed' >> /etc/cups/cups-files.conf
修改完成后,重启容器。
添加打印机
打开浏览器访问 http://群晖IP:631, 进入 CUPS web 界面, 添加打印机。
Administration - Add Printer - 选择 HP CP1025 打印机 - 下一步勾选 “Share This Printer” - 选择驱动 “HP LaserJet Pro CP1025nw Foomatic/foo2zjs-z3 (en)” - 完成添加。
下一步修改打印机默认选项:
- Color Mode: Color
- Resolution: 600x600dpi
- Paper Size: A4
- Media Source: Auto Source
- Media Type: Standard Paper
点击 “Set Default Options” 保存。
打印测试页,成功打印。
设置自动启动
打印从休眠中恢复,需要重启 docker 容器才能使用。
在群晖里创建udev 规则,检测到打印机连接时,自动重启 docker 容器。
获取打印机属性
ssh 到群晖,运行 sudo udevadm monitor --kernel --property --subsystem-match=usb,然后插入打印机 USB 线,记录打印机的属性:
| |
记录 PRODUCT=3f0/112a/1。
创建 udev 规则
创建文件 /lib/udev/rules.d/50-hp-cp1025.rules,内容如下:
| |
上面的规则在检测到 HP CP1025 打印机连接时,运行 /volume1/docker/airprint/restart-cups.sh 脚本。
/volume1/docker/airprint/restart-cups.sh 脚本内容如下:
| |
这里已经完成了全部配置,局域网内的 Mac 和 iOS 设备都可以通过 AirPrint 使用 HP CP1025 打印机了,windows 设备也可以通过添加网络打印机使用。
无线打印使用
iOS 设备
iOS 设备可以直接通过 AirPrint 使用打印机,连接 wifi 后自动搜索网络打印机,无需额外配置。需要打印的文件,点击分享按钮,选择打印机即可。
Mac 设备
同样无需设置,自动出现在打印机列表中,直接选择打印机打印即可。
Windows 设备
Windows 设备需要去惠普网站下载安装 HP CP1025 驱动,然后添加网络打印机。 控制面版 - 设备和打印机 - 添加打印机 - 选择 “我需要的打印机不在列表中” - 选择 “使用 TCP/IP 地址或主机名添加打印机” - 设备类型选择 “TCP/IP 设备” - 主机名或 IP 地址填写群晖 IP 地址
