Linux cups 打印总结备忘

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兼容性非常好的原因:
    第一种,直接传输PostScript文件给CUPS的后台,再将打印流传输到PostScript打印机,接下来的事情全部丢给打印机去处理,当然,这种打印机大多价格不菲;
    第二种方式是交给CUPS的内置程序处理,把PostScript转换成其特有的raster格式,这种格式是CUPS特有的,至于为什么要转成这种格式,是为了方便打印机生产商,让他们可以只需开发CUPS的raster格式到其打印机的接口,方便大家统一,但似乎这一方式的驱动还不多。
    第三种方式,也是支持打印机最多的方式,叫做GhostScript格式的驱动模式。它其实和第二种打印驱动比较类似,只把CUPS的解释器换成了外置的 GhostScript来解释PostScript文件,之所以这么周折,是因为目前支持这种方法的打印机比支持CUPS的raster的打印机要多很多。GhostScript程序是独立于CUPS运行的,它的功能也不仅限于打印,但很多情况下通过CUPS来调用GhostScript打印是件很方便的事情。foomatic则是用于连接CUPS和GhostScript的一个脚本程序(用perl写的),用来打包各种不同格式的打印机命令,它非常有用,对于通过CUPS调用GhostScript来说则是必须的。GhostScript格式的驱动程序很多,大家可以到http://www.openprinting.org/去看看,现在大部分打印机在Linux都是用GhostScript驱动的。当然,有些时候,GhostScript还不能包打天下,像HP的1020就比较特殊,它的打印流有点不一样,需要再用特殊的程序进行处理,GhostScript负责讲PostScript格式转换成点阵模式后,还要进过 foo2zjs处理,转换成特殊的打印流,再交给后台。这种模式,相当于给GhostScript又装了个插件,附加了一个小模块。

    总之,无论是哪种模式,实际上CUPS都是把打印机“看成”PostScript打印机,或是直接调用,或是用自带的方法虚拟,或者用GhostScript虚拟。

---------------------------------------------我是分割线-------------------------------------

CUPS 简介

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 管理打印环境,您必须先在 CUPS 下创建一个打印队列。打印队列可以指向通过 USB 端口或并行端口直接连接到系统的打印机。但是,队列也可以指向网络打印机、Internet 打印机或多个打印机,具体取决于您配置应用程序的方式。无论队列指向何处,系统对待打印队列的方式与任何其他打印机相同。

CUPS 服务

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 管理打印环境,您必须先在 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 管理打印请求

每次您提交打印请求时,CUPS 都会创建一个打印任务,其中包含有关您向其发送请求的打印队列、文档名称以及页面说明的信息。打印作业已进行编号,例如 queue-1queue-2,以便您可以在打印每项打印作业时监视打印作业或取消打印作业(如有必要)。

提交打印请求后,CUPS 将执行以下操作:

  1. 确定要使用哪些程序(过滤器、打印驱动程序、端口监视器和后端程序)。

  2. 运行这些程序以完成打印作业。

  3. 打印作业完成时从打印队列中删除作业,然后打印提交的下一个打印作业。您可以将 CUPS 配置为在完成打印作业时或在打印期间出现任何错误时通知您。






  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值