socket://协议更稳,优先用于绝大多数网络打印机;ipp://仅适用于明确支持ipp everywhere的新型号,老机型常不响应而超时。

Linux 要连上远程打印机,关键不是“能不能连”,而是选对协议、填对 URI、配对驱动——错一个环节,打印任务就卡在队列里不动,或者只打半页就停。
socket:// 和 ipp:// 哪个 URI 更稳?
绝大多数网络打印机(尤其 HP、Canon、Brother 中端以上型号)优先认 socket:// 协议,它绕过 IPP 发现机制,直连端口 9100,兼容性最好。老机型或某些国产打印机甚至不响应 IPP 请求,ipp:// 会直接超时。
-
socket://192.168.1.105是首选,URI 简洁,CUPS 内部用原始流传输,不依赖打印机的 IPP 实现质量 -
ipp://192.168.1.105/ipp/print仅在打印机明确支持 IPP Everywhere(如较新 HP LaserJet Pro、Epson WorkForce)时可用;若填了但lpstat -l -p MyPrinter显示 “no PPD” 或状态为 “connecting”,基本就是协议不认 - 别用
http://或https://开头的地址——CUPS 不解析网页 URL,会报unable to locate printer
用 lpadmin 添加时 -m 参数不能空着
lpadmin -p MyPrinter -v socket://192.168.1.105 -E 这种写法看似省事,实则埋雷:-m 缺失会导致 CUPS 自动 fallback 到 everywhere 驱动,高级功能全失效——双面开关灰掉、纸盒选项消失、缩放比例固定为 100%。
- 先查真实驱动名:
lpinfo -m | grep -i "hp laserjet m725",结果可能是hp-laserjet_mfp_m725-ps.ppd - URI 和驱动必须匹配:HP 设备别硬套
pxlcolor或gutenprint,否则色彩/字体渲染错乱 - 加完立刻验证:
lpstat -l -p MyPrinter输出里要有ppd-file行,且路径存在(如/etc/cups/ppd/MyPrinter.ppd)
Windows 主机共享的打印机怎么填 URI?
Linux 连 Windows 共享打印机,URI 不是 smb:// 地址,也不是 Windows 的“打印机名称”,而是取决于 Windows 开启的服务类型。
- 如果 Windows 已启用“LPD 服务”(控制面板 → 启用或关闭 Windows 功能 → 勾选 LPD Service),URI 是:
lpd://192.168.1.200/HP_LaserJet_MFP_M725,其中HP_LaserJet_MFP_M725必须和 Windows 打印机属性 → 共享选项卡里的“共享名称”完全一致(不能有空格、不能含中文) - 如果只开了 SMB 共享(没开 LPD),需确保已安装
cups-backend-smb(Ubuntu/Debian:运行sudo apt install cups-backend-smb),URI 格式为:smb://WORKGROUP/WinPC/HP_LaserJet_MFP_M725,注意 WORKGROUP 是 Windows 的实际工作组名(默认常为 WORKGROUP,非 HOME 或 DOMAIN) - 测试连通性:在 Linux 终端执行
echo test | lpr -P MyPrinter,若报unable to connect to server,先在 Windows 上确认“文件和打印机共享”已启用,并检查防火墙是否放行 TCP 515(LPD)或 445(SMB)
为什么 Windows 能看到 CUPS 打印机却连不上?
CUPS 默认只监听 localhost:631,Windows 浏览器打不开 http://192.168.1.100:631 就说明根本没暴露服务——这不是网络问题,是配置漏项。
- 必须改
/etc/cups/cupsd.conf:把Listen localhost:631换成Listen 0.0.0.0:631或更安全的Listen 192.168.1.100:631 - 三个
<location></location>、<location></location>、<location></location>块内都要加Allow 192.168.1.*(别写Allow all,有安全风险) -
Browsing On必须启用,否则 CUPS 不广播自己有打印机,Windows 的“通过网络发现”功能扫不到 - 改完必须
sudo systemctl restart cups,systemctl reload cups不生效,status 里看不到错误也不代表成功
最易被忽略的是:CUPS 共享给 Windows 时,驱动必须由 Windows 自己提供,CUPS 不传驱动。哪怕 URI 和权限全对,Windows 侧装错驱动(比如用通用 PCL 替代 HP 官方驱动),双面/纸张选择就直接失效——这问题不报错,只静默降级。











