最稳方案是用system-config-printer图形工具配置打印机,手动输入ip地址的uri(优先socket://),选真实ppd驱动而非everywhere,再修改cupsd.conf启用局域网访问并重启服务。

直接用系统图形工具最稳,别硬敲命令
绝大多数现代 Linux 发行版(Ubuntu、Fedora、Debian 等)自带 system-config-printer,它比手动敲 lpadmin 更可靠,尤其对 USB 打印机或 IP 已知的网络打印机。DNS 自动发现经常失效,但手动输 IP 地址后几乎必成。
- 运行
system-config-printer(需要管理员权限,右上角点“解锁”再输密码) - 点击“添加”,选“网络打印机” → “输入设备 URI”,填
socket://192.168.1.105或ipp://192.168.1.105/ipp/print(优先试 socket,兼容性更好) - 驱动选“Provide PPD file”或“Select from database”,避免选
everywhere——它看似万能,实则常导致双面/纸张尺寸不生效 - 装完立刻去
/etc/cups/printers.conf检查:URI 是否已固化为 IP,而非 DNS 名;若仍是主机名,手动改掉并sudo systemctl restart cups
远程访问必须改 cupsd.conf,Web 界面默认只听 localhost
想让 Windows/macOS 通过 http://192.168.x.x:631 添加共享打印机,光开服务远远不够。CUPS 默认禁止局域网访问,Listen localhost:631 这一行就是拦路虎。
- 编辑
/etc/cups/cupsd.conf,找到Listen行,改成Listen 0.0.0.0:631(或更安全的Listen 192.168.1.100:631,即本机局域网 IP) - 在
<location></location>块里加Allow 192.168.1.*(别写Allow all,有风险) - 确认
Browsing On已启用(否则其他机器看不到这台 CUPS 服务器) - 改完必须
sudo systemctl restart cups,systemctl status cups看是否无报错
lpadmin 加网络打印机时,-m 参数选错等于白配
用命令行配置不是不行,但 -m(驱动模型)是最大雷区。选 everywhere 或空着,看似省事,实际会跳过 PPD 文件加载,导致高级功能(如装订、介质类型、色彩校准)全部失效。
- 先用
lpinfo -m | grep -i "hp laserjet"查真实可用驱动名,例如hp-laserjet_mfp_m725-ps.ppd - URI 用
socket://协议最通用;ipp://要求打印机原生支持 IPP Everywhere,老机型常不认 - 完整命令示例:
lpadmin -p HP-M725 -v socket://192.168.1.105 -m hp-laserjet_mfp_m725-ps.ppd -E - 加完立刻
lpstat -l -p HP-M725确认状态是 “idle”,且显示 “ppd-file” 路径存在
Windows/macOS 连 CUPS 共享打印机,别碰 Samba
用 Samba 共享 CUPS 打印机,表面看能连,但实际问题一堆:Windows 上看不到实时队列、要输密码、UDP 广播超时卡死。CUPS 原生 IPP 就是为此设计的,TCP 直连,零配置,状态实时同步。
- Windows:设置 → 设备 → 打印机和扫描仪 → “我需要的打印机不在列表中” → “按名称选择” → 输入
http://192.168.1.100:631/printers/HP-M725(注意路径含/printers/) - macOS:系统设置 → 打印机与扫描仪 → “+” → 选“IP”标签页 → 协议选 IPP,地址填
192.168.1.100,队列填HP-M725,驱动选“AirPrint”或自动匹配 - 关键点:所有客户端都不需要装厂商驱动,CUPS 服务器端已处理好 PPD,客户端只管发 IPP 请求
真正容易被忽略的是日志验证环节——配完不看 journalctl -u cups --no-pager -n 30,等于没配。很多“添加成功但打不出”的问题,日志里早写了 “PPD file not found” 或 “unable to connect to device”。CUPS 不报错,只沉默丢任务。










