HP LaserJet P1505n 是一款基于 Host-based 协议的经典打印机。本文将分享一套通过 Docker 容器化技术,为该打印机提供完美 AirPrint 支持的方案。
本方案解决了 iOS 预览显示、Web 管理权限、多余打印机名称以及物理关机后自动显示离线等核心问题。
🛠 1. 环境准备 (宿主机 Debian) 在开始之前,请确保宿主机没有任何冲突的打印服务:
清理冲突服务 :停止并禁用宿主机的 avahi-daemon 和 cups。
创建持久化目录 :建议路径为 /opt/docker_data/hp-cups/,并在其下创建 config 和 services 文件夹。
准备插件 :将 hplip-3.22.6-plugin.run 放入 /opt/docker_data/hp-cups/。
📦 2. 核心配置文件 2.1 Docker Compose (1Panel 编排) 使用 Host 网络模式以确保 mDNS 广播效率,并通过自定义 entrypoint 解决 D-Bus 冲突。
1 2 3 4 5 6 7 8 9 10 11 12 services: cups: image: p1505n-final:latest container_name: cups-server restart: always network_mode: host privileged: true entrypoint: /bin/sh -c "rm -f /var/run/avahi-daemon/pid && sed -i 's/.*enable-dbus=.*/enable-dbus=no/g' /etc/avahi/avahi-daemon.conf && chmod 644 /etc/avahi/services/airprint.service && avahi-daemon -D --no-chroot && sleep 2 && /usr/sbin/cupsd -f & sleep 10 && cupsctl --remote-admin --remote-any --share-printers && avahi-daemon --reload && wait" volumes: - /opt/docker_data/hp-cups/config:/etc/cups - /opt/docker_data/hp-cups/services/airprint.service:/etc/avahi/services/airprint.service - /opt/docker_data/hp-cups/hplip-3.22.6-plugin.run:/etc/cups/hplip-3.22.6-plugin.run
2.2 cupsd.conf (权限与广播策略) 关闭内置广播以消除重复,并放行远程管理权限。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 LogLevel warn MaxLogSize 1m ErrorLog stderr Port 631 Listen /var/run/cups/cups.sock Browsing Off BrowseLocalProtocols none BrowseWebIF No <Location /> Order allow,deny Allow all </Location> <Location /admin> Order allow,deny Allow all </Location> <Location /printers> Order allow,deny Allow all </Location> DefaultEncryption IfRequested ServerAlias *
2.3 airprint.service (Avahi 广播描述) 定义 iOS 发现打印机所需的 URF 参数,确保预览图显示正常。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <?xml version="1.0" standalone='no'?> <!DOCTYPE service-group SYSTEM "avahi-service.dtd" > <service-group > <name replace-wildcards ="yes" > HP LaserJet P1505n (AirPrint)</name > <service > <type > _ipp._tcp</type > <subtype > _universal._sub._ipp._tcp</subtype > <port > 631</port > <txt-record > txtvers=1</txt-record > <txt-record > rp=printers/hp1505n</txt-record > <txt-record > ty=HP LaserJet P1505n</txt-record > <txt-record > URF=W8,SRGB24,CP1,RS600</txt-record > <txt-record > Color=F</txt-record > </service > </service-group >
📡 3. 物理状态同步 (自动离线监控) 通过检测打印机 IP 连通性来联动开关广播服务,让 iOS 端状态与物理机同步。
3.1 监控脚本 ip_monitor.sh 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #!/bin/bash PRINTER_IP="192.168.1.X" CONTAINER_NAME="cups-server" while true ; do if ping -c 2 -W 2 $PRINTER_IP > /dev/null; then if ! docker exec $CONTAINER_NAME pgrep avahi-daemon > /dev/null; then docker exec $CONTAINER_NAME avahi-daemon -D --no-chroot docker exec $CONTAINER_NAME avahi-daemon --reload fi else if docker exec $CONTAINER_NAME pgrep avahi-daemon > /dev/null; then docker exec $CONTAINER_NAME avahi-daemon -k 2>/dev/null fi fi sleep 10 done
💡 4. 初始化与维护流程
启动编排 :在 1Panel 中应用并启动容器。
安装驱动插件 :运行以下命令完成固件插件安装。1 docker exec -it cups-server hp-plugin -i -p /etc/cups/hplip-3.22.6-plugin.run -s
清理缓存 :若在手机端发现重名打印机,请重启 iPhone 或开关飞行模式以刷新 mDNS 缓存。
本文由 Elric 的 不太聪明智能助理「小龍蝦 🦞」协助整理与发布。