Linux 打印

最后更新: 2024-03-21 21:27:10 +0800 +0800
tags: Cups | Linux | Printing
原文以英文撰写。您正在阅读AI翻译版本。

CUPS 提供互联网打印协议(IPP)客户端和调度器。CUPS 的目标是命名的打印机队列或类;物理打印机或网络打印机则是该队列所到达的设备。因此,队列状态、作业状态和设备可达性是不同的诊断关注点。

队列、打印机和 IPP #

客户端在 IPP 请求中编码作业文档和属性。本地客户端通常通过 Unix 域套接字连接调度器,而远程客户端使用 ipp:// 或加密的 ipps://,通常使用 TCP 端口 631。调度器会将作业加入假脱机队列,选择目标,在需要时转换数据,并通过后端或无驱动 IPP 连接发送输出。

现代 IPP Everywhere 打印机会直接公布格式和装订能力。旧式队列则可以使用基于 PPD 的过滤器链和后端。无论哪种情况,队列都仍是面向客户端的稳定对象。

提交作业 #

lp 提供 System V 接口,lpr 提供兼容 BSD 的接口。两者都会通过 CUPS 提交:

sh
lp report.pdf
lp -d office report.pdf
lpr -P office report.pdf
printf 'status report\n' | lp -d office

lp -d 和 lpr -P 要求明确指定目标。对于 lp,CUPS 依次从 LPDEST、PRINTER、每用户 lpoptions 默认值,最后是服务器默认值中选择默认目标。

使用 -o 传递 IPP 作业模板属性;首先查询目标,因为打印机特定值不同:

sh
lpoptions -p office -l
lp -d office -n 2 \
  -o media=A4 \
  -o sides=two-sided-long-edge \
  -o print-quality=4 report.pdf

lpoptions -p office -o name=value 会保存后续作业使用的默认值。lp -o name=value 只更改已提交的作业。CUPS 还支持名为 office/duplex 的打印机实例,以保存选项集。

检查队列和打印机 #

使用独立的状态视图来确定工作停止的位置:

sh
lpstat -r                 # scheduler running
lpstat -p -d              # printer queues and default
lpstat -a                 # whether queues accept jobs
lpstat -v                 # queue device URIs
lpstat -o office          # incomplete jobs for one destination
lpstat -W completed -o office
lpq -P office             # BSD-compatible queue view

lpstat -p 报告队列是否已启用打印,而 lpstat -a 报告队列是否接受新作业。已禁用的队列仍可以保留作业,不接受新作业的队列仍可以继续处理已经存在的工作。

取消和控制作业 #

提交响应和 lpstat -o 会提供诸如 office-42 的标识符。使用任一接口取消一个作业:

sh
cancel office-42
lprm -P office 42

cancel -a office 会取消目标上的所有作业,因此通常需要管理权限。lp -i office-42 -H resume 会释放暂停的作业。队列管理是独立的:cupsdisable/cupsenable 停止或开始 打印,而 cupsreject/cupsaccept 拒绝或接受提交。

诊断过滤器和后端 #

从 lpstat -t 开始,然后检查受影响的作业和队列。停止的队列通常会记录过滤器退出、 后端连接失败、身份验证失败或不支持的文档格式。CUPS 将调度器和作业消息写入 error_log;配置的 ErrorLog 可以是文件、标准错误或系统日志。 cupsctl --debug-logging 会启用额外诊断;重现失败后应将其禁用,因为日志可能包含文档名称、用户名和设备详细信息。

对于旧式流水线,确认每个过滤器存在且可执行,并在可用时使用 cupsfilter 测试转换。对于设备失败,将 lpstat -v 与预期 URI 比较,解析并连接到端点,然后检查后端消息。队列的 ErrorPolicy 决定 CUPS 在后端或过滤器失败后是中止、重试还是停止打印机。

权限和远程服务器 #

用户通常可以提交和取消自己的作业。cupsd.conf 中的服务器策略控制打印机管理和取消其他用户的作业;加入特定发行版的组只是可能的策略机制之一。-U NAME 选择声明的身份验证用户名,但不会绕过身份验证。

使用 CUPS 命令的 -h server[:port] 或 CUPS_SERVER 环境变量选择其他调度器:

sh
lpstat -h print.example.com:631 -p -d
lp -h print.example.com:631 -E -d office report.pdf

-E 强制传输加密。远程服务器必须监听可访问接口,公布或配置目标,并授权请求的 IPP 操作。

上游的命令行打印指南、lpstat(1) 和 cupsd-logs(5) 记录了这些接口。

评论

在 GitHub 上阅读或评论(发表评论需要登录)