好的。因此,我了解到 CUPS 充当打印后台处理程序,管理打印作业并将其发送到打印机。我还了解 PPD 文件描述了打印机的功能集,并且 CUPS 使用这些文件和过滤器与打印机连接,生成打印机可用于打印文档的输出(以 PostScript、PCL 或任何专有格式)打印机需要)。但我对这件事的几个方面感到困惑。主要是:
- 应用程序如何将打印作业发送到 CUPS?
- 应用程序如何获取所选打印机的打印选项?这些是否来自 CUPS 用于打印机的 PPD 文件或过滤器?
- 当 CUPS 通过 IPP 共享打印机时,此功能如何工作?向 CUPS 发送打印作业的设备是在本地进行处理还是由 CUPS 服务器进行处理?如果 CUPS 这样做,是否意味着本地设备需要 PPD 文件来获取打印选项,或者 CUPS 是否将其发送到本地设备?
- 据我所知,任何 Linux 计算机都可能在本地使用 CUPS 进行打印,那么它在打印选项和将打印作业处理为 PostScript/PCL 等方面如何工作?
感谢您帮助消除我的困惑。
答案1
有多种方法可以将打印作业发送到 CUPS:
- 如果本地进程是传统的 Unix 程序,则该进程可能只是将 ASCII 文本或 PostScript 通过管道传输到 CUPS 的
lp
或命令的实现以进行打印。lpr
localhost
或者,如果 CUPS 启用了 LPD 兼容性,则它可能会在端口 515/TCP 上使用 LPD 打印协议- 或者它可能通过
localhost
端口 631进行 IPP - 或者它可能使用 CUPS 的客户端库 (
libcups.so
) 来获得完整的本机 CUPS 支持。
如果使用lp
或lpr
命令,则必须使用命令行选项指定任何作业选项,并且没有传统方式可以自动发现支持的选项;任何使用此旧式 Unix 界面的程序通常都会让用户编辑打印命令行来设置任何必要的选项。CUPS 还包括文件格式自动检测(类似于命令file
),因此理论上,如果 CUPS 有可用的 PNG 格式转换器,您只需说lp something.png
并以某种合理的方式打印图像即可。
IPP 的 CUPS 实现包括一些协议扩展允许客户端查询和设置打印机和作业选项,甚至请求 PPD 内容。
IPP 协议本身包括内容协商,很像 HTTP:服务器指定它可以接受的打印作业格式作为 MIME 类型,而客户端则声明它要发送的数据的格式。如果服务器不支持特定的作业格式,则该作业可能会被拒绝。还可以指定“application/vnd.cups-raw”作为作业格式,以指示作业应按原样传递到打印机,无需任何转换:CUPS 管理员可以选择允许或不允许。
一般来说,CUPS 服务器具有一系列作业格式转换器,可用于将各种文件类型转换为某种标准的“排队作业格式”,并从那里转换为打印机接受的任何格式(例如 PCL、PostScript 或更专有的格式之一)。 “排队作业格式”过去是 PostScript,但现在在现代版本的 CUPS 中是 PDF。