直到最近,自由软件用户的选择还很简单——每个人都运行着几乎逐字逐句从 BSD 的 Net-2 代码中提取出来的旧 lpd。即使在今天,一些供应商仍然交付此软件。但这正在开始改变。类似 SVR4 的系统,包括 Sun 的 Solaris,都配备了一个完全不同的打印假脱机软件包,以 lpsched 为中心。
今天,有很多不错的系统可供选择。下面将描述所有这些系统;阅读描述并做出您自己的选择。CUPS 是一个不错的选择,推荐给大多数用户;它具有出色的 Postscript 打印机支持,提供 IPP 支持、Web 界面和许多其他功能。对于主要使用联网 Postscript 打印机的商业环境,使用带有 LPRng 的前端程序(如 GPR)是另一种选择;它可以直接处理 PPD 选项,并具有友好的界面。
CUPS 已成为当今大多数发行版中的标准打印系统。是什么使 CUPS 与众不同?CUPS 是互联网打印协议 (IPP) 的一种实现,IPP 是一种旨在解决旧 LPD 协议的一些缺陷的新标准。CUPS 还支持 LPD、SMB 和 AppSocket (JetDirect),但功能有所减少。CUPS 的实现是由 Easy Software Products 的 Michael Sweet 推动的;CUPS 是在 GPL 下发布的。作为一个新的协议,IPP 比古老的 LPD 协议有很多优势
调度器是一个 HTTP 1.1 Web 服务器,并提供 Web 界面
打印机选项,您甚至可以询问 IPP 设备它支持哪些选项和文档格式。
访问控制,它限制来自和去往指定计算机和打印机的打印作业、作业控制和系统管理命令。与 Apache 类似,您可以使用 Allow 和 Deny 指令来控制对 CUPS 的访问。
代理支持(因为 IPP 使用 HTTP)
加密支持
它有很多非常好的功能,包括合理的选项处理;Web、GUI 和命令行界面;以及具有强大 Postscript 支持的基于 MIME 的过滤系统。
有几组 PPD 可以与 CUPS 一起使用
默认的 CUPS 安装包含用于 9 针和 24 针爱普生点阵打印机、爱普生 Stylus Color、Stylus Photo 打印机、HP LaserJet、DeskJet 打印机和 Dymo 标签打印机的通用 PPD。这些将使您能够打印到许多打印机型号,但不会让您访问这些型号的特定功能
Foomatic 可以为任何在 linuxprinting.org 数据库中输入了完整详细信息的打印机驱动程序生成合适的 PPD。PPD 与名为 foomatic-rip 的后端脚本一起使用。foomatic-rip 使用自由软件驱动程序。目前,该系统支持相当多的打印机。Foomatic 构成了大多数 GNU/Linux 发行版中非 Postscript 打印机支持的基础。CUPS 和 Foomatic 正在变得非常流行,目前这是大多数情况下推荐的打印系统。
CUPS 可以直接使用供应商提供的 Postscript 打印机 PPD 文件。这些文件通常随打印机的 Windows 驱动程序一起提供,或者可以在打印机供应商的网站上找到。如果您在 Windows 9x 和 Windows NT/W2K 的驱动程序之间进行选择,请选择 Windows NT 的驱动程序。Adobe 还分发许多 Postscript 打印机的 PPD 文件。
Easy Software Products, Inc. 销售捆绑了专有驱动程序的 CUPS。虽然它们不是自由软件,但它们确实驱动了许多常见的打印机。与单台受支持打印机的价格相比,该捆绑包有点昂贵,但它肯定有其用武之地。该软件包包括图形前端工具。
Gimp-Print 驱动程序是用于 Canon、Epson、Lexmark 和 PCL 打印机的高质量驱动程序,可与 Ghostscript、CUPS、Foomatic 和 Gimp 一起使用。
Omni 是 IBM 制作的一个软件包,现在包含对 450 多种打印机的支持。OMNI 打印机驱动程序模型由 IBM 根据 LGPL 许可证分发。
HPIJS 现在以出色的打印质量支持大约 150 台 HP 自己的打印机(目前仅通过 Foomatic 路径)。从 1.0.1 版本开始,“hp Product Only”条款已从许可证中删除,驱动程序以 BSD 许可证分发。
第三方程序 XPP(参见图 4)为 CUPS 的用户功能提供了一个非常友好的图形界面,包括一个出色的打印时选项界面(如图 图 5 所示)。有关使用 XPP 的信息,请参见 第 3.4.2 节。
LPD,最初的 BSD Unix 行式打印机守护程序,多年来一直是 Unix 的标准。它适用于各种风格的 Unix,并提供了一套非常基本的功能,这些功能源自分时时代计算的需求。尽管这段历史有些特殊,但它在今天仍然可以用作基本的打印假脱机程序。要真正与现代打印机一起使用,还需要以配套过滤器脚本和前端程序的形式进行大量额外工作。但是这些都存在,并且都有效。
LPD 也是 RFC 1179 给出的网络打印协议的名称。这种网络协议不仅被 LPD 守护程序本身使用,而且几乎被每个联网打印服务器、联网打印机以及其他每个打印假脱机程序使用;LPD 是基于标准的网络打印的最低公分母。
LPRng(参见第 6.3 节)是基本 LPD 设计的一个更好的实现,而不是常规的实现;如果您必须使用 LPD,请考虑使用 LPRng 代替。在使其执行您想要的操作时,需要使用的玄学要少得多,而且存在的玄学也得到了很好的文档记录。LPRng 本质上是一个增强的 LPD 实现,具有更好的安全性和额外的功能。
世界上有大量的 LPD 来源。可以说,某种 BSD Unix 可能是官方所有者,但每个人都在随意地进行更改,并且它们都以未知的方式相互交叉授粉,以至于很难确定您可能拥有的究竟是哪个 LPD。在容易获得的 LPD 中,GNUlpr 提供了一个具有一些小的修改的版本,这些修改使用户界面更加灵活。GNUlpr 支持使用-o标志的命令行选项规范;然后将选项传递给过滤器。这类似于许多传统 Unix 供应商提供的功能,并且类似于(尽管与)LPRng 的-z选项机制不兼容。
如果您使用 LPD,最好的使用方法是通过前端。有几个可供选择;KDEPrint、GPR(参见第 3.4 节)和 XPP 可能是最好的。还存在其他前端;请告诉我它们。
一些 GNU/Linux 供应商提供 LPRng,这是一个远不如古老的 LPD 打印假脱机实现。对于大型安装(阅读:多台打印机、任何串行打印机或任何特殊的非 lpd 网络打印机),LPRng 比库存 lpd 更容易管理,并且代码库不像库存 lpd 那样可怕地随意。它甚至可以诚实地声称是安全的——没有 SUID 二进制文件,并且它支持通过 PGP 或 Kerberos 进行身份验证。
LPRng 还包括一些常见网络打印机(主要是 HP LaserJets)的示例设置,其中包括一些记帐功能。LPRng 使用或多或少与 BSD lpd 相同的基本过滤器模型,因此 linuxprinting.org 网站提供的 LPD 支持也适用于 LPRng。这可以帮助您有效地使用许多打印机的自由软件驱动程序。
LPRng 在 GPL 或 Artistic 许可证下分发。
PPR 是一个以 Postscript 为中心的假脱机程序,它包括一个基本的 Postscript 解析能力,从中可以获得一些不错的功能。它包括良好的记帐功能、对 Appletalk、SMB 和 LPD 客户端的良好支持,以及比 lpd 更好的错误处理。与这里的每个其他假脱机程序一样,PPR 可以调用 Ghostscript 来处理非 Postscript 打印机。
PPR 由三一学院编写并在该学院使用。该许可证是 BSD 风格的;免费供所有使用,但应注明出处。
PDQ 代表“打印,不要排队”,它的工作方式反映了这种设计。PDQ 是一个非守护程序中心的打印系统,它具有内置且合理的驱动程序配置语法。这包括声明打印选项的能力,以及用户可以使用 GUI 或命令行工具指定这些选项;用户会得到一个漂亮的对话框,在其中指定分辨率、双面打印、纸张类型等。
以用户身份运行所有过滤器有很多优点:Postscript 可能存在的安全问题大多消失了,多文件 LaTeX 作业可以作为 dvi 文件有效地打印等等。
PDQ 并非没有缺陷:最值得注意的是,它在将整个作业发送到打印机之前处理整个作业。这意味着,对于大型作业,PDQ 可能根本不切实际——您最终可能会在磁盘上来回复制数百兆字节的数据。更糟糕的是,对于像质量更好的喷墨打印机驱动程序这样的慢速驱动程序,作业要等到 Ghostscript 和驱动程序完成处理后才会开始打印。这可能是在提交后几分钟。
PDQ 有其真正的用武之地;它具有简单的设计,不会减少用户控制。正常的控制路径不会跨越任何安全边界,因此它不可能具有人们总是在其他系统中发现的那些安全漏洞。最重要的是,它很小。
但是,PDQ 上没有进行积极的开发。非常欢迎新的维护者。
Coherent Printing System 是一组名为“lpr”、“lpd”、“lprm”和“lpq”的 Perl 脚本。这些脚本取代了许多 Linux 系统附带的同名程序。