Akemi

CUPS服务管理打印机

2025/04/03

CUPS(全称 Common UNIX Printing System)是一个开源的 跨平台打印管理系统,最初为类Unix系统设计,现已成为Linux、macOS等操作系统的默认打印服务。

CUPS功能介绍

  • 统一打印管理:提供标准的打印接口,支持本地打印机、网络打印机(如IP打印机、AirPrint)以及云打印服务。
  • 驱动程序支持:内置大量打印机驱动程序(通过PPD文件定义),支持主流的打印机品牌(HP、Epson、Canon等)。
  • 协议兼容性:支持 IPP(Internet Printing Protocol)、LPD(Line Printer Daemon)、SMB/CIFS(Windows共享打印)等协议。
  • 格式转换:自动将文档转换为打印机支持的格式(如PDF转PostScript),通过“过滤器”机制实现。

CUPS工作流程

1.接收打印请求

用户通过命令行(如 lplpr)或应用程序(如 LibreOffice)提交打印任务。

CUPS 调度器(cupsd 守护进程)接收请求,并生成一个打印作业(Job)。

2.任务队列管理

  • 调度器将任务放入队列,根据优先级和打印机状态决定何时处理。
  • 用户可通过 lpstat 查看队列状态,或通过 cancel 终止任务。

3.格式转换(过滤链)

CUPS 使用一系列 过滤器(Filters) 将文件转换为打印机支持的格式。

  • 例如:用户打印一个 PDF 文件,但打印机只支持 PostScript。CUPS 会调用 pdftops 过滤器将 PDF 转为 PostScript。
  • 转换过程可能涉及多级处理(如文本→PDF→PostScript→打印机语言)。

4.后端传输

负责将处理后的数据发送到物理打印机。

  • 本地打印机:通过 USB、并口等后端(如 usb://parallel://)。
  • 网络打印机:通过 IPP、LPD、Socket 等协议(如 ipp://http://)。
  • 共享打印机:通过 SMB/CIFS(Windows 共享)或 AirPrint。

5.状态反馈与日志

  • CUPS 记录任务状态(完成/失败)到日志(/var/log/cups/error_log)。
  • 用户和管理员可通过日志排查问题(如驱动错误、连接超时)。

本地打印机与网络打印机

本地打印机 网络打印机
连接方式 直接通过物理接口连接(如USB、并口) 通过网络连接(Wi-Fi、以太网、IP地址)或共享打印服务器
配置步骤 1. 连接物理接口
2. 安装驱动
3. CUPS自动检测 1. 获取打印机IP或网络路径
2. 手动添加至CUPS
3. 选择协议(IPP/LPD等)
使用场景 单台计算机专用 多台设备共享(局域网内电脑、手机、平板等)
依赖条件 计算机必须与打印机直连 打印机和计算机需在同一网络,或支持远程协议
传输协议 无(直接硬件通信) IPP、LPD、Socket、SMB/CIFS(Windows共享)、AirPrint
优点 - 即插即用- 延迟低
  • 无需网络依赖 | - 多设备共享
  • 灵活部署位置- 支持远程打印 |
    | 缺点 | - 仅限单机使用
  • 无法远程访问 | - 依赖网络稳定性
  • 配置较复杂
  • 可能有延迟 |
    | 典型示例 | 家用打印机通过USB连接个人电脑 | 办公室打印机通过IP地址供全员使用 |

打印协议

IPP 是当前最先进、通用的打印协议,适合现代网络环境,LPD/Socket/SMB 主要用于兼容旧设备或特定场景。

协议 工作原理 优点 缺点 适用场景
IPP (Internet Printing Protocol) - 基于 HTTP(支持 HTTPS)
  • 支持加密、认证
  • 可传输打印作业元数据(如纸张类型、颜色模式) | - 跨平台(Linux/Windows/macOS)
  • 支持双向通信(反馈打印状态)
  • 安全性高 | - 配置依赖打印机支持 IPP
  • 旧设备可能不兼容 | 现代网络打印机、云打印 |
    | LPD (Line Printer Daemon) | - 基于 TCP/IP 的简单协议
  • 无加密,明文传输数据 | - 广泛兼容老旧设备
  • 轻量级 | - 安全性差
  • 不支持复杂打印设置 | 传统打印机(直连)、Unix/Linux系统 |
    | Socket (Raw TCP/IP) | - 直接通过 TCP 端口(如9100)发送原始打印数据 | - 速度快- 无需复杂协议解析 | - 无状态管理- 易受网络干扰 | 工业打印机、专用设备 |
    | SMB/CIFS (Windows共享打印) | - 通过 Windows 文件共享协议传输打印任务 | - 无缝集成 Windows 环境
  • 支持权限控制 | - 依赖 Windows 系统- 跨平台兼容性差 | Windows 局域网共享打印 |
    | AirPrint | - 基于 IPP 的扩展协议
  • 专为 Apple 设备优化 | - 苹果设备即插即用
  • 无需驱动 | - 仅限 Apple 生态
  • 功能受限 | iOS/macOS 设备无线打印 |

管理打印机

发现、添加打印机

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
29
30
31
32
33
34
# 安装cups,avahi等多个软件包,提供命令行工具
yum -y install cups
systemctl enable cups --now

# 监听端口为5353
netstat -tunlp | grep 53
udp 0 0 0.0.0.0:5353 0.0.0.0:* 118599/avahi-daemon
udp6 0 0 :::5353 :::* 118599/avahi-daemon

# 寻找网络中的打印机 20秒
ippfind -T 20
ipp://server12.local:631/printer/bwprinter

# 通过组播地址解析打印机ip地址
dig @224.0.0.251 -p 5353 server12.local
192.0.2.12
相当于实际url为ipp://192.0.2.12:631/printer/bwprinter

# 添加打印队列——添加打印机
lpadmin -p Printer -v ipp://192.0.2.12:631/printer/bwprinter -m everywhere -E
-p 打印机逻辑名称
-v 协议://地址,如果有dns解析,也可以用域名
-m 使用驱动,ipp推荐使用everywhere
-E 启用打印机(添加后立即激活)

# 列出当前添加的打印机信息
lpstat -v
device for Printer ipp://192.0.2.12:631/printer/bwprinter

# 设置默认打印机
lpadmin -d Printer

# 删除打印机
lpadmin -x Printer

发送打印请求

1
2
3
4
5
6
7
8
9
10
11
12
# 使用命令行工具lp进行打印
lp <文件名称>
lp -d <打印机名称> <文件名称>

# 查看打印任务队列
lpstat
lpstat -u # 所有角色的

# 取消掉队列
cancel <打印任务名>
# 取消掉打印机的所有任务
cancel -a Printer

维护打印机

1
2
3
4
5
6
7
8
9
10
11
12
13
# 关闭打印机
cupsdisable Printer
# 关闭打印机并提供一个消息
cupsdisable -r "Reject" Printer

# 重新开启打印机
cupsenable Printer

# 停止接受job
cupsreject -r 'xxx' Printer

# 重新开始接受job
cupsaccept Printer

原文作者:王盛

原文链接:https://akemi.zj.cn/2025/04/03/CUPS/

发表日期:April 3rd 2025, 6:07:10 pm

更新日期:April 3rd 2025, 6:19:07 pm

版权声明:本文采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可

CATALOG
  1. 1. CUPS功能介绍
  2. 2. CUPS工作流程
    1. 2.1. 本地打印机与网络打印机
    2. 2.2. 打印协议
  3. 3. 管理打印机
    1. 3.1. 发现、添加打印机
    2. 3.2. 发送打印请求
    3. 3.3. 维护打印机