资讯动态

HP DeskJet 1212搭建CUPS AirPrint打印服务器全攻略

发布时间:2026/10/1 11:53:25 来源:尧图企业网站定制
先把结论放这儿HP DeskJet 1212这台机器出厂就带Wi-Fi和固件级AirPrint支持但实际用起来经常是“能用但不稳”。手机隔三差五找不到打印机、换了路由器就要重新配网、打印任务发起后打印机在休眠状态里半天没反应这些都是入门级喷墨一体机的通病。我后来腾出一台常年开机的Linux小主机通过CUPS把1212重新包装成一台标准AirPrint打印机iPhone、iPad、Mac、Windows乃至其他Linux设备都能稳定走同一个打印通道彻底摆脱了厂商App的反复引导。这篇文章就是按我实际动手的顺序完整记录HP DeskJet 1212配置CUPS实现AirPrint无线打印的全过程包括环境部署、驱动选型、Web后台操作、mDNS广播原理以及统信、麒麟这些系统上最容易踩的几个CUPS坑。1. 先把无线打印这层逻辑拆清楚1212、CUPS、AirPrint各自该干什么1.1 DeskJet 1212自带的“无线”其实很基础HP DeskJet 1212在中国市场定位就是入门家用机价格便宜功能上打印、复印、扫描都有适合放家里或者小型办公室。它的无线连接方式主要是2.4GHz Wi-Fi不支持蓝牙机身也没有液晶屏第一次配网只能靠两种途径一个是按路由器上的WPS键做快速配对另一个是通过HP Smart应用给打印机下发Wi-Fi配置。这两种方式本身没毛病但问题出在稳定性和后续策略上。打印机固件里确实有AirPrint的广播服务可机身的处理器和内存非常有限它能在网络上保持mDNS广播不代表它能持续稳定地响应打印任务。我在实际使用中遇到的情况是白天空闲一阵子后打印机进入深度休眠iPhone上的打印列表里直接搜不到它有时候搜得到打印任务发过去之后又卡在队列里必须等打印机自己睡醒才能出纸。这种体验对入门级喷墨机来说太正常了。1.2 CUPS在中间扮演的角色CUPS全称Common Unix Printing System是Linux和macOS上通用的打印调度服务。它在网络里的作用可以理解成一个快递中转站所有打印任务先发给CUPSCUPS负责把任务排队、转换成打印机认识的页面描述语言、再发送给打印机同时还要向外广播打印机的存在。当我们说“把1212变成AirPrint打印机”时本质上不是去魔改打印机固件而是在Linux主机上让CUPS接管打印机的对外服务。苹果设备通过Bonjour/mDNS发现的是CUPS打印任务也先到CUPS的队列里再由CUPS通过驱动或IPP协议转交给1212。这样做的直接好处是打印任务的调度、重试、日志、权限管理都跑在性能更好的Linux主机上而不是挤在打印机那点可怜的内存里。1.3 什么场景才需要加装CUPS打印服务器不是所有人都需要单独搭一个CUPS服务器但下面几类情况确实值得做打印机原生AirPrint不稳定或者打印机在无线网络里经常“消失”。家里有多个平台的设备iOS、Android、Windows、Linux都可能有打印需求希望统一入口管理。老电脑或闲置小主机正好闲着花二十分钟配置一下就能彻底解决全家的打印问题。你用的是统信UOS、麒麟这类国产Linux桌面系统打印服务本身就和CUPS深度绑定理解CUPS的工作方式等于理解了系统“打印服务”这一整套逻辑。这第4点很关键。很多人在统信、麒麟系统里折腾打印机看到“CUPS服务器未运行”“CUPS默认密码错误”这些提示就懵了其实都是同一个东西在不同发行版上的表现差异。2. 环境准备装CUPS和HPLIP驱动时的“半套”坑2.1 一次性装齐依赖而不是一个个碰运气我在Ubuntu 22.04上操作Debian系和基于Debian的国产系统基本通用。先更新源然后一次性安装CUPS、avahi和HPLIPsudo apt update sudo apt install cups avahi-daemon avahi-utils hplip这里最容易犯的错是只装了cups漏掉avahi-daemon。avahi是mDNS/Bonjour的具体实现AirPrint的打印机发现机制依赖它。没有avahi-daemonCUPS管得再好iPhone那边也搜不到打印服务。所以严格来说一个跑AirPrint服务的CUPS环境里cups和avahi-daemon是必须同时存在的两个进程缺一个都不行。装完后设置开机自启并启动服务sudo systemctl enable --now cups sudo systemctl enable --now avahi-daemon这两个命令执行完确认一下运行状态systemctl status cups systemctl status avahi-daemon看到active (running)才算第一步过关。2.2 别忽略lpadmin用户组否则后台密码永远不对CUPS的后台登录不是用打印机自己的密码而是用Linux系统的用户密码。但有一个隐藏条件这个用户必须在lpadmin组里否则即使密码正确进入管理层后也没有权限添加或修改打印机。把当前用户加进组sudo usermod -aG lpadmin $USER执行完一定要重新登录或者注销一次组权限才能在当前会话生效。很多教程没提这一步用户直接打开http://localhost:631在认证框里输入正确的用户名和密码却发现“没有权限执行此操作”还以为密码记错了。其实纯粹是组权限问题。2.3 防火墙和cupsd.conf局域网能访问才是基础CUPS装好后默认只监听本机的localhost:631。为了AirPrint设备能访问打印队列必须让CUPS监听网络接口并在防火墙放行对应端口。修改/etc/cups/cupsd.conf找到监听配置部分# 默认只有本机 Listen localhost:631 # 增加监听所有网络接口 Port 631 Listen 0.0.0.0:631接着在Location部分确认局域网访问权限。我这里的配置是Location / Order allow,deny Allow localhost Allow LOCAL /Location Location /admin Order allow,deny Allow localhost Allow LOCAL /LocationLOCAL表示允许本地局域网的所有地址访问。保存后重启CUPSsudo systemctl restart cups防火墙这边Ubuntu常用的是UFWsudo ufw allow 631/tcp sudo ufw allow 5353/udp631是CUPS的HTTP端口5353是mDNS广播的端口。如果你用其他发行版防火墙规则里放行这两个端口也是同样的原理。2.4 驱动选型hplip还是IPP EverywhereHP DeskJet 1212在Linux下有两种驱动路线。第一是装HPLIP它会提供完整的HP打印机驱动支持在CUPS添加打印机时可以看到“HP DeskJet 1210 series, hpcups”这样的型号条目。第二是走IPP Everywhere也就是所谓的driverless模式不需要装特定驱动让CUPS通过打印机的IPP能力自动协商参数。我的建议是如果CUPS的“添加打印机”页面里能直接发现1212优先选择IPP Everywhere。原因很简单1212本身支持AirPrint协议而AirPrint的底层就是IPPCUPS用driverless后端能直接对接少一层专有驱动的转换更稳定。只有在自动发现不到或者IPP Everywhere打出来格式不对时才考虑回到HPLIP驱动。安装好HPLIP后也可以用命令行工具进行打印机设置hp-setup -i它会交互式地搜索网络里的HP打印机配置后自动添加到CUPS里。实测下来HPLIP对1210系列的识别率不错但比起IPP Everywhere运行速度稍慢占用资源也大一点。做打印服务器的话优先轻量方案。3. 把打印机注册进CUPSWeb后台完整配置流程3.1 进入Web管理后台并完成认证浏览器打开http://localhost:631能正常显示CUPS界面就说明服务没问题。点“Administration”进入管理页系统会弹出一个HTTP Basic认证框要求输入Linux系统用户名和密码。很多人到这里就会去搜索“CUPS默认密码是多少”实际情况是CUPS压根没有独立的默认密码库。你输入的是操作系统的账号密码并且该账号必须在lpadmin组里。用Ubuntu的root用户登录往往不行因为Ubuntu的root默认没有密码正确做法是使用自己平时登录系统的那个用户账号。3.2 添加打印机的完整步骤在Administration页面点击“Add Printer”CUPS会自动扫描局域网里的打印机。如果DeskJet 1212已经连到同一个Wi-Fi大概率会出现在“Discovered Network Printers”列表里显示为“HP DeskJet 1210 series”后面跟着MAC地址。选择它之后会出现连接地址通常是一段IPP地址格式类似ipp://192.168.1.200/ipp/print如果你在局域网里给打印机配过静态IP也可以手动添加这个地址。接着填写打印机名称、描述和位置。这里有个坑打印机名称建议用简短无空格的英文比如HP-DeskJet-1212避免之后命令行操作时还要处理空格转义的问题。下一步选择驱动程序。如果CUPS识别出来了会直接建议“使用IPP Everywheredriverless”。如果你装了HPLIP也可以在列表里手动选择“HP DeskJet 1210 series, hpcups”。两条路线我都试过IPP Everywhere更稳。最后一步勾选“Share This Printer”这一步千万别漏掉不勾选共享的话局域网其他设备没法看到这个AirPrint队列。3.3 共享与访问控制让局域网设备真正看到队列勾选了共享还需要确认cupsd.conf里的权限规则覆盖了/printers路径。默认配置一般允许本机访问所有Location但为了局域网设备能提交打印任务加上下面这段更保险Location /printers/ Order allow,deny Allow localhost Allow LOCAL /Location改完重启CUPSsudo systemctl restart cups3.4 打印测试页验证基本链路添加完成后回到打印机列表点击这个打印机选择“Print Test Page”。等待十几秒如果打印机正常出纸且测试页内容和页面结构没有乱码或错位说明驱动链路没问题。如果测试页卡住先用命令查队列状态lpstat -t确认队列不是“disabled”或者“stopped”。队列状态异常时先启用打印机sudo cupsenable HP-DeskJet-1212然后再重新发送测试任务。4. 打通AirPrint的关键环节avahi广播与mDNS服务发现4.1 AirPrint背后的协议逻辑AirPrint不是一种新协议它是IPP打印协议加Bonjour服务发现的组合。苹果设备在局域网里通过mDNS/DNS-SD协议查询_ipp._tcp广播找到可用的打印服务然后通过IPP协议提交打印数据。当我们把1212加入CUPS并设置为共享后CUPS会自动注册一个IPP服务由avahi-daemon负责在局域网里广播。也就是说此时iPhone看到的“HP DeskJet 1210 series 主机名”打印队列是CUPS在广播而不是1212固件在广播。这也是为什么CUPS环境里avahi-daemon必须开机自启。4.2 用avahi-browse验证服务是否真的在广播配置完别急着拿手机试先在Linux主机上确认mDNS广播已经生效avahi-browse -rt _ipp._tcp正常输出会显示一个或多个服务条目其中包含你的打印机名称、主机名、IP地址和端口631。这里我踩过一次坑输出里始终看不到打印机服务排查了一圈发现是avahi-daemon虽然服务在跑但系统里出现了多个网络接口avahi默认绑定在一个非局域网接口上。解决办法是在/etc/avahi/avahi-daemon.conf里检查接口绑定配置必要时指定allow-interfaceseth0这样的参数。如果avahi-browse能正常看到服务而iPhone仍然搜不到打印机就要考虑是不是路由器的AP隔离开启导致仅允许多设备但要阻止AP隔离因为隔离状态下客户端mDNS无法互通。4.3 固定IP和网络环境一样重要打印机在局域网里依赖IP地址通信。如果路由器DHCP分配给打印机的地址经常变化CUPS里的IPP后端可能会找不到打印机表现为“打印任务发送失败”或“设备离线”。我给1212设置固定IP的经验是在路由器后台做DHCP静态绑定把打印机MAC地址固定到某个IP比如192.168.1.200。这样CUPS队列里的后端地址始终不变手机搜索打印服务也不会因为IP漂移而间歇性失败。用命令行添加固定地址的队列也可以直接指定lpadmin -p HP-DeskJet-1212 -E -v ipp://192.168.1.200/ipp/print -m everywhere4.4 iPhone/Mac实测连接与打印完成上述配置后iPhone上打开一个文档点分享菜单里的“打印”等待一两秒就能看到名为“HP DeskJet 1210 series 主机名”的打印机队列。选它、设置份数和双面点击打印即可。Mac上更简单系统设置里的“打印机与扫描仪”里点击“”号系统会自动发现AirPrint打印机列表选择CUPS发布的那个队列就可以正常打印。打印时Mac会走IPP协议提交任务CUPS再转交给1212整个过程不需要额外安装HP驱动。5. 高频故障排查从CUPS服务未跑到打印任务卡死5.1 统信UOS上报“CUPS服务器未运行”的排查链路很多统信UOS用户打开打印设置时会直接看到“CUPS服务器未运行”的提示。这里的排查路径很固定按顺序来先看服务状态systemctl status cups如果提示Unit cups.service could not be found说明CUPS根本没装直接补装sudo apt install cups如果提示服务处于failed状态看日志journalctl -u cups -n 50最常见的原因是DBus服务异常或者缺失运行时目录。重启一下相关服务sudo systemctl restart dbus cups还有一个容易被忽略的点在部分精简版统信系统里CUPS服务被设成了“masked”即被屏蔽状态。解除屏蔽sudo systemctl unmask cups sudo systemctl enable --now cups5.2 CUPS后台“默认密码打不开”的真相这个问题在搜索引擎里热度很高核心误解是很多人认为CUPS后台有一个类似admin/admin的默认账号。实际上CUPS的Web认证完全对接Linux系统的PAM认证也就是说浏览器里弹出的用户名密码就是你Linux系统的用户名和密码。在Ubuntu以及大多数桌面Linux上root用户默认没有密码所以不要试图用root去登录。正确做法是用一个已加入lpadmin组的普通用户登录。我之前就犯过这个错用root登录一直提示认证失败换成自己的日常用户账号后一次通过。如果你确认用户名密码都对但仍然进不去检查一下是不是在远程用IP地址访问时被Location规则拦住了。远程访问时需要确认cupsd.conf里已经包含Allow LOCAL否则认证通过也会返回“Forbidden”。5.3 奔图等国产打印机报“操作中出现一个错误成功”的处理这个错误是典型的中文翻译灾难“操作中出现一个错误”和“成功”同时出现在一句话里自相矛盾但实际原因通常是PPD驱动安装不完整或者打印机端到端协议协商失败。虽然这一篇的主角是HP 1212但公网搜索引擎里这个报错跟“奔图COPS”几乎绑定在一起值得顺带说清楚。按照我的经验碰到这类错误先看奔图官网有没有提供Linux驱动包。很多国产打印机品牌虽然支持Linux系统但驱动包更新节奏慢经常出现适用于CUPS 2.2的PPD在CUPS 2.4上不兼容的情况。下载对应的驱动deb包后手动重新安装sudo dpkg -i pantum-*.deb sudo systemctl restart cups如果重装驱动后问题依旧清理半残留的PPD文件ls /etc/cups/ppd/ sudo rm /etc/cups/ppd/Pantum-*.ppd然后在CUPS后台重新添加打印机。这条思路对绝大多数“操作中出现一个错误成功”都有效本质就是让PPD重新生成。5.4 麒麟系统重装CUPS后的权限与端口问题麒麟系统重装CUPS的场景比较多见重装之后用户最先遇到的就是所有打印队列全部消失因为队列配置和PPD文件都存在/etc/cups/下面被干净卸载时一并清理了。我给出的重装策略是sudo apt purge cups cups-client cups-common cups-filters sudo apt install cups cups-client cups-common cups-filters重装后立刻检查三件事第一当前用户是否还在lpadmin组groups $USER第二CUPS是否正常监听端口ss -tlnp | grep 631第三avahi-daemon有没有重新起来systemctl status avahi-daemon这三步检查做完基本能定位麒麟系统里重装CUPS后“服务在跑但就是打不了”的问题。个别麒麟版本还会默认启用严格的安全策略需要额外放行631端口的访问这个在图形化安全设置里解除即可。5.5 打印任务卡在“Pending/已停止”的通用处理使用AirPrint时间长了难免遇到队列里任务一直“Pending”不动或者直接显示“已停止”。这种问题不一定是配置错误多数是打印机休眠后CUPS未能及时唤醒设备。先看队列lpstat -t如果打印机状态是“disabled”恢复启用sudo cupsenable HP-DeskJet-1212如果队列里卡了很多任务直接清空cancel -a HP-DeskJet-1212然后重启一次CUPSsudo systemctl restart cupsLinux打印服务器最稳的状态是“随时可接受任务但不要有积压任务”所以定期清队列是个好习惯。6. 稳定运行后的日常使用休眠唤醒、队列维护与演进思路6.1 打印机休眠后AirPrint搜不到怎么办1212进过深度休眠之后不仅iPhone搜不到有时连CUPS里都显示“不可用”。这个问题的根源是打印机的mDNS广播在休眠时暂停了而CUPS缓存里残留了过期状态。我的处理经验是当你需要打印而手机搜不到打印机时在Linux主机上先ping一下打印机的IP有时候一次ping就能把它唤醒ping -c 2 192.168.1.200如果ping完还是不行重启avahi让广播重新生效sudo systemctl restart avahi-daemon考虑到这台机器是打印服务器我后来干脆在CUPS里设置了一个定时任务每两小时向打印机发送一次空请求让它不至于长时间无人问津而进入深度休眠。具体做法是用crontab配合一个简单的lp命令打印一行空白页到队列再用cancel取消保持设备热状态。6.2 打印任务的生命周期与日志容量CUPS跑久了/var/log/cups/下的日志文件会持续增长。对家用小主机来说磁盘空间一般不是问题但日志文件过大时会拖慢页面加载速度。我习惯把日志级别调低一点改/etc/cups/cups-files.confLogLevel warn AccessLog none PageLog none然后定期清理日志目录sudo rm -rf /var/log/cups/error_log* sudo systemctl restart cups另外如果有小孩或多人共用打印机可以在CUPS里设置配额限制每周打印页数lpadmin -p HP-DeskJet-1212 -o job-quota-period604800 -o job-page-limit100这样每周最多打印100页避免墨水和纸张无意义消耗。6.3 关于HPLIP升级和固件更新的提醒打印机固件更新这件事在Linux上要谨慎。HP官方的固件更新工具在Windows和macOS上做得顺手Linux下通常通过HPLIP的hp-firmware来操作但不是所有机型都支持。1212这种入门机型刷固件风险不小如果现在用得好建议尽量别折腾。HPLIP本身的升级我建议按需升级而非追新。遇到过几次HPLIP从3.22升级到3.23后CUPS队列里的驱动配置需要重新生成的例子。升级前先备份/etc/cups/目录sudo cp -r /etc/cups /etc/cups.bak万一升级后打印队列出问题直接恢复备份再重启服务sudo systemctl stop cups sudo cp -r /etc/cups.bak/* /etc/cups/ sudo systemctl start cups6.4 这条链路还能延伸到哪些设备CUPSAirPrint的架构不局限于让苹果设备打印。因为CUPS后端还可以安装Samba共享Windows电脑可以通过\\主机名\打印机名的方式直接使用这个队列Android设备也可以借助PrintHand等支持IP打印的应用走同一个CUPS服务。打印服务器一旦架起来整个家庭或小办公室就统一进了一个打印入口后续加装任何打印机只是在CUPS后台多添加一台设备的事。我现在家里这台小主机上跑着CUPS管理着DeskJet 1212和一台黑白激光打印机所有设备打印都走同一个Web后台状态一清二楚。最后再分享一个小技巧如果哪天AirPrint又搜不到打印机别急着重启整台主机先sudo systemctl restart avahi-daemon大多数情况下十秒钟就能恢复。这个动作我一个月里至少要做一次算是摸透这台入门打印机的脾气了。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑