CUPS实际上是一个集成的服务。包括了前端接收打印命令的相关程序,后端控制打印机硬件的程序,中间则是打印驱动。
首先来看看CUPS驱动打印机的方式。这里要说明的是所谓驱动,其实是一系列的程序加定义文件的总和,不像我们有时候想像的那样是一个很简单的单一文件。当CUPS接受到打印命令时,首先会进行一个格式的预转换,比如将.jpg等各种文件先转换成PostScript格式(图1桔红方框)。然后进一步将PostScript格式转换成 CUPS内部格式,这个称为PostScript到PostScript转换,这两种PostScript格式还是有差别的,当然大家可以不必深究(我也没好好看,只是知道在MIME中定义了这两种不同的PostScript,哪位知道的请指教下)。
以上这些都是预处理工作,接下来CUPS的工作围绕PostScript展开(图1,金色部分),CUPS会根据PPD(PostScript Printer Description 文件)文件来选择相应的处理流程。PPD文件其实是驱动的核心,不同的打印机有不同的PPD文件, PPD 包含有关输出设备的信息,CUPS使用 PPD 文件中的信息来确定在打印文档时向打印机发送哪些 PostScript 信息。需要说明的是,CUPS实际上把所有打印机都“看成”PostScript打印机,即便打印机本身不支持PostScript,也可以通过CUPS 自带的PostScript解释程序(pstoraster)或者GhostScript来解释PostScript文件,从而把普通的打印机模拟成 PostScript打印机。图1中金色的线条显示就是CUPS处理PostScript文件的方式,按我的理解,可以分为三种,第一种就是接正在的 PostScript打印机的,而后面两种就是分别用CUPS的pstoraster或GhostScript来解释PostScript,虚拟出一台 PostScript打印机。三种工作方式能够分别支持不同的打印机,所以,这也是CUPS兼容性非常好的原因:总之,无论是哪种模式,实际上CUPS都是把打印机“看成”PostScript打印机,或是直接调用,或是用自带的方法虚拟,或者用GhostScript虚拟。
---------------------------------------------我是分割线-------------------------------------
CUPS 是一种模块化开源打印系统,使用 Internet 打印协议 (Internet Printing Protocol, IPP) 作为基础来管理打印机、打印请求和打印队列。CUPS 支持网络打印机浏览和基于 PostScript 打印机描述的打印选项。CUPS还提供了跨越本地网络的公共打印接口。
IPP 是网络打印的标准协议。与其他基于 IP 的协议类似,可以在本地或通过 Internet 使用 IPP 与远程打印机进行通信。但与其他协议不同的是,IPP 还支持访问控制、验证和加密,从而使其成为比其他协议强大且安全许多的打印解决方案。IPP 位于超文本传输协议 (Hypertext TransferProtocol, HTTP) 的顶层。HTTP 是 Internet 中的 Web 服务器的基础协议。使用 IPP 时,您可以验证打印机或服务器的状态信息、管理打印机以及通过浏览器打印作业。CUPS 是基于 IPP/1.1的完整打印系统,它提供基本的摘要本地证书验证,以及基于用户、域或 IP 的访问控制。
CUPS 包括对动态打印机检测和分组的支持。CUPS 会将 lpr 命令替换为自己的命令,将 LPD 打印机驱动程序替换为自己的打印驱动程序。CUPS 与 LP 打印服务的相似之处在于,它也使用 PostScript 格式作为其页面说明底层语言。由于CUPS 提供 System V 和 Berkeley 打印命令,因此用户和应用程序可以打印到 CUPS 队列,只需稍微更改之前使用的选项或根本无需更改。
最后,CUPS 还包括由许多开源应用程序和工具包使用的应用程序级别界面。在后端,CUPS 包括用于处理带注释的光栅图像格式 (raster image format, RIP) 所需的界面。对此格式以及这些界面的支持已集成到其他关键开源打印驱动程序技术中。
CUPS 是 Oracle Solaris 发行版中唯一的缺省打印服务,它将取代 LP 打印服务。通过以下各项可管理在 Oracle Solaris 操作系统 (operating system,OS) 中使用 CUPS 进行打印的过程:
CUPS 命令行实用程序-这些命令包括新的 CUPS 打印命令以及之前由 LP 打印服务使用的一些打印命令。
CUPS Web 浏览器界面-转至 http://localhost:631。
CUPS 打印管理器 GUI-您可以从包括 GNOME 2.30 的 Oracle Solaris Desktop 或通过在终端窗口中键入 system-config-printer 命令访问此 GUI。
为使 CUPS 管理打印环境,您必须先在 CUPS 下创建一个打印队列。打印队列可以指向通过 USB 端口或并行端口直接连接到系统的打印机。但是,队列也可以指向网络打印机、Internet 打印机或多个打印机,具体取决于您配置应用程序的方式。无论队列指向何处,系统对待打印队列的方式与任何其他打印机相同。
CUPS 服务是通过以下两种新的服务管理工具 (Service Management Facility, SMF) 服务提供的:
svc:/application/cups/scheduler
该服务管理 cupsd 守护进程。此守护进程提供包括排队、过滤、假脱机、通知、IPP 支持、设备枚举以及 Web 管理的基本打印服务。
svc:/application/cups/in-lpd
该服务运行 cupsd-lpd 守护进程。此守护进程为 CUPS 服务提供基本的 RFC-1179(LPD 协议)支持。
通过打印机管理配置文件和 solaris.smf.manage.cups 授权,没有 root 登录权限的用户可以管理这些 SMF 服务。
为使 CUPS 管理打印环境,您必须先在 CUPS 下创建一个打印队列。
您可以按以下某一方法创建新的打印队列:
使用 lpadmin 命令手动创建打印队列。有关更多信息,请参见 lpadmin (8) 手册页。
使用可以从 Oracle Solaris Desktop 访问的打印管理器 GUI。有关更多信息,请参见使用 CUPS 打印管理器设置打印机(任务列表)。
使用 Web 浏览器界面。安装 CUPS 后,转至 http://localhost:631/admin。
将 USB 打印机物理连接到本地系统。
如果 CUPS 在您的系统上处于启用状态,则硬件抽象层 (hardware abstraction layer, HAL) 和 hal-cups-utils 实用程序将识别 USB 打印机热插拔事件。它们可以识别已连接到本地系统的新打印机。hal-cups-utils 实用程序自动在 CUPS 下为新的打印机创建打印队列。
此外,CUPS 还支持使用 mDNS 框架 (Bonjour) 和 SNMP 搜索打印机。CUPS 可以通过 CUPS 浏览功能搜索其他 CUPS 服务器共享的打印机。有关更多信息,请转至 http://www.cups.org/documentation.php/doc-1.5/options.html。
对于网络打印队列,请在您的系统上启用 CUPS 的“浏览功能”(缺省设置)。如果网络中的另一个系统通告远程系统上有可用的打印机,CUPS 将检测到该打印机并创建一个新的打印队列。
每次您提交打印请求时,CUPS 都会创建一个打印任务,其中包含有关您向其发送请求的打印队列、文档名称以及页面说明的信息。打印作业已进行编号,例如 queue-1、queue-2,以便您可以在打印每项打印作业时监视打印作业或取消打印作业(如有必要)。
提交打印请求后,CUPS 将执行以下操作:
确定要使用哪些程序(过滤器、打印驱动程序、端口监视器和后端程序)。
运行这些程序以完成打印作业。
打印作业完成时从打印队列中删除作业,然后打印提交的下一个打印作业。您可以将 CUPS 配置为在完成打印作业时或在打印期间出现任何错误时通知您。