SDB:Information for Printer Manufacturers Regarding Linux Support

跳转到:导航搜索

情况

您是打印机制造商或提供需要特殊打印机支持的软件,并希望实现基本的或最佳的 Linux 支持。

本文适用于 Linux 下 CUPS 版本高达 2.x,以及那里的传统过滤系统和后端。

如今的无驱动程序打印工作流程则大不相同。

常规信息

本文面向技术人员和非技术人员。

然而,所涉及的问题无法在没有技术基础的情况下进行描述或理解。如果缺乏技术精确性,这个主题的多样性将导致混淆。

本文分为通用部分和技术部分

通用部分放在前面,并以概述和索引结尾,其中列出了各个情况。这些情况在技术部分中介绍。技术细节在相应标记的子部分中介绍。由于技术细节包括有关许可问题的背景信息,因此对于非技术人员也可能很有趣。

公开信息

最重要的是公开可用信息

  • 哪些打印机型号在现有的免费 Linux 驱动程序下表现良好。
  • 哪些打印机型号在现有的专有 Linux 驱动程序下表现良好。
  • 哪些打印机型号不适用于 Linux。
  • 哪些打印机型号在软件上彼此兼容(打印机语言)。

哪些版本的 Linux 驱动程序支持哪些打印机型号以及支持程度如何非常重要。

为了对不断增长的打印机型号和型号变体进行分类,兼容性信息至关重要。最合适的方法是按兼容性类别进行分类,每个类别包含软件兼容的打印机型号,即支持相同的打印机语言并使用相同的 Linux 驱动程序和 Linux 驱动程序设置(请参阅 SDB:购买打印机和兼容性)。通常,打印机驱动程序不是针对每个单独的型号不同的,而是针对每个兼容性类别不同的。例如,HP 的 HPIJS 驱动程序就是基于这种策略(请参阅 http://hplipopensource.com/hplip-web/tech_docs/device_classes.html)。

这是每位打印机制造商应公开提供的最低限度信息,以便客户选择合适的打印机型号。毕竟,无忧打印的最重要前提是选择合适的打印机型号。

基本的打印系统 CUPS 的重要性居于次要地位。通常可以通过修改配置来解决打印系统的问题。虽然可能无法满足所有要求,但几乎所有问题都可以找到合适的解决方案。然而,由于不合适的打印机造成的多数问题,仅仅通过修改打印系统的配置是无法解决的。

访问 OpenPrinting/LinuxPrinting.org 上最全面的 Linux 打印机数据库:http://www.linux-foundation.org/en/OpenPrinting。请查看 http://www.linux-foundation.org/en/OpenPrinting/Database/HowToContribute,以获取所需信息的详细说明。

当然,相同的信息也可以发布在打印机制造商的网页上,例如 http://hplipopensource.com/hplip-web/supported_devices/index.html

当通过并行端口 (IEEE-1284)、通过 USB 或通过 SNMP 轮询时,提供特定型号的确切标识字符串并非必要但非常有用。这些型号标识字符串可以自动检测型号并在可用驱动程序时自动配置它。

条件

打印机的 Linux 支持不应通过实现全新的自定义打印系统来实现。如果需要在同一主机上同时运行多个打印系统以设置用于各种打印机的打印服务器,则无法实现。

无论如何实现 Linux 支持,都必须将其与现有结构无缝集成,即必须与现有打印系统的处理阶段兼容。本文的主要目的是提供为此目的所需的基本信息。

这并不意味着您不能在下面概述的可能性之外开发新的自定义打印系统;相反,这意味着打印机的 Linux 支持不应依赖于这样的打印系统。

打印机 Linux 驱动程序和 PPD 文件必须

  • 具有开源代码,
  • 受允许修改源代码、分发和重新分发的足够自由的许可(例如,GPL、BSD)(请参阅 http://www.debian.org/social_contract.html#guidelines 上的“Debian 自由软件指南 (DFSG)”),
  • 具有平台无关的源代码。

这样,我们将能够将其集成到我们的产品中,因为我们产品的标准软件是从源代码为各种硬件平台编译的。

虽然这并不意味着我们不能将任何专有软件集成到我们的产品中,但这意味着我们不能定期这样做,而只有当我们对此感兴趣时才能这样做。由于有数百种打印机型号可以有效地使用免费的开源 Linux 驱动程序,因此专有的 Linux 驱动程序不太可能对我们有吸引力。

通常,专有的 Linux 驱动程序对用户也没有吸引力。由于功能性新打印机的成本相对较低,因此花费在专有 Linux 驱动程序上的精力和成本可能看起来是浪费时间金钱。更重要的是,使用合适的打印机将一次性解决驱动程序问题,因为它将消除安装和配置专有驱动程序软件以及为打印系统中的新开发而获取驱动程序更新的需要。

满足这些条件的打印机 Linux 驱动程序适合于标准集成到我们的产品中。

打印机制造商的优势在于,他将获得对其设备的全面 Linux 支持

  • 在所有包含打印系统的产品中,
  • 在这些产品可用的所有硬件平台上,
  • 对于包含打印系统的产品的最新版本

而打印机制造商无需为此付出额外费用。

HP 的 HPIJS 驱动程序是 Linux 驱动程序设计方式的一个很好的例子。请访问 http://hplipopensource.com 上的“HP Linux Imaging and Printing (HPLIP)”项目

实际的 Linux 驱动程序必须与任何附加软件(例如,远程打印机管理工具等)区分开来。只有实际的 Linux 驱动程序必须满足上述要求。

摘要

我们不想推广无法与现有打印系统无缝集成的 Linux 驱动程序。请参阅 SDB:GDI 打印机 中的“备注”部分。

如果制造商已经拥有专有软件(例如,专有的自定义打印系统)并正在寻找操作系统来提供完整的服务器解决方案,则情况不同。这可以通过使用 SUSE LINUX 服务器产品的 OEM 版本来实现。

详细信息

为什么必须允许修改 Linux 驱动程序和 PPD 文件的源代码?

  • 由于我们始终从源代码为各种硬件平台编译 Linux 驱动程序,因此可能会遇到源代码并非完全平台无关的事实。在这种情况下,我们必须能够修改源代码,以便可以为各种硬件平台进行编译。
  • 在我们的测试中,我们可能会检测到 Linux 驱动程序或 PPD 文件中的错误。在这种情况下,我们必须能够修改源代码,以避免或消除这些错误。
  • 出于时间原因,我们必须能够立即进行这些修改,而无需获得许可。

关于问题和可能解决方案的反馈会发送给 Linux 驱动程序或 PPD 文件的作者,从而能够长期优化和微调驱动程序和 PPD 文件。

为什么必须允许分发和重新分发 Linux 驱动程序和 PPD 文件?

  • 分发权限允许将 Linux 驱动程序或 PPD 文件集成到通过向最终客户销售 Linux 驱动程序或 PPD 文件的最终客户产品中。
  • 重新分发权限允许将 Linux 驱动程序或 PPD 文件集成到通过“原始设备制造商”向最终客户销售 Linux 驱动程序或 PPD 文件的 OEM 产品中。

概述和索引

在这种情况下,“基本的 Linux 支持”意味着正常打印有效且输出看起来不错。但是,可能不支持最大分辨率,颜色色调可能不完全正确,或者特殊功能(例如选择纸盘或特殊的照片模式)可能不受支持。

“最佳的 Linux 支持”意味着该型号能够实现的所有打印机功能在 Linux 中都可用。

如果 Linux 支持标记为“可用”,则表示该支持已实现。

如果 Linux 支持标记为“可能”,则表示该支持可能尚未实现,但可以轻松实现,例如通过集成满足上述条件的 Linux 驱动程序。

PostScript 打印机

始终提供基本的 Linux 支持。

要获得最佳的 Linux 支持,需要

  • 适用于相应 PostScript 打印机的 PPD 文件。

PCL+JCL 打印机

始终提供基本的 Linux 支持。

要获得最佳的 Linux 支持,需要

  • 适用于相应 PCL+JCL 打印机的 PPD 文件。
  • 通常,一个合适的脚本或程序执行额外的处理阶段(如下所示)。

支持 Ghostscript 的打印机

通常提供基本的 Linux 支持,并且始终可行。

要获得最佳的 Linux 支持,需要

  • 支持该型号所有打印机功能的 Ghostscript 驱动程序。
  • 适用于相应 Ghostscript 驱动程序的 PPD 文件。
  • 如有必要,一个合适的脚本或程序执行额外的处理阶段(如下所示)。

支持 CUPS "rasterto..." 的打印机

通常提供 CUPS 打印系统的基本 Linux 支持,并且始终可行。

要获得 CUPS 打印系统的最佳 Linux 支持,需要

  • 支持该型号所有打印机功能的 "rasterto..." 驱动程序。
  • 适用于 "rasterto..." 驱动程序的 PPD 文件。

此外,具有平台无关源代码的 "rasterto..." 驱动程序也可以用于 Mac OS X 操作系统,因为 Mac OS X 使用 CUPS 打印系统。

支持 "Postfilter" 的打印机

可以提供基本的 Linux 支持,但对于普通用户来说可能很困难或不可能。

最佳的 Linux 支持取决于具体情况,并且对于普通用户来说通常很困难或不可能。

没有 Linux 支持的打印机 (GDI 打印机)

为了获得基本的或最佳的 Linux 支持,打印机制造商必须提供 Linux 驱动程序。以下两种选项是可行的

Ghostscript驱动程序为打印机配备Ghostscript支持。Ghostscript支持提供了与打印系统无关性,但需要额外的处理阶段(参见下面的“Foomatic”)。

CUPS“rasterto...”驱动程序为打印机提供直接的CUPS支持。此外,具有平台无关源代码的“rasterto...”驱动程序也可以用于Mac OS X操作系统,因为Mac OS X使用CUPS打印系统。


技术部分通用信息

关于Linux支持,技术部分从最简单的情况(PostScript打印机)进展到更困难的情况。了解更简单的情况对于更困难的情况是必要的。

每种情况都从对打印机类型的定义和相关术语的基本解释开始。

接下来是发送正确数据到打印机所需处理阶段的基本概述。这是理解相应的Linux支持应该是什么样子的前提,基本Linux支持的必要条件是什么,以及最佳Linux支持的充分条件是什么。

为了限制文章的结构复杂性,我们的重点是CUPS打印系统。对于其他打印系统(如LPRng/lpdfilter)存在局限性。有关CUPS,请参阅 http://www.cups.org/


PostScript 打印机

术语“PostScript打印机”是指支持“PostScript level 2”或“PostScript level 3”的打印机。

PostScript由Adobe开发,是Linux中的标准打印机语言。

处理阶段

  1. 如果打印数据不是PostScript,它们将被转换为PostScript。
  2. 如果需要,合适的控制命令(打印机需要用于激活特殊打印机功能,例如选择纸盘、双面打印模式或省墨模式)将被插入到PostScript数据中。PostScript打印机的所有打印机功能及其相关的控制命令都存储在特定于打印机的PPD文件中。
  3. PostScript数据加上控制命令被发送到打印机。

基本Linux支持

由于PostScript打印机可以直接打印PostScript数据,因此对于PostScript level 2或level 3打印机,始终可用基本的Linux支持,无论打印系统如何。

通过额外的处理阶段生成PostScript level 1,可以始终为PostScript level 1打印机提供基本的Linux支持。

最佳Linux支持

要获得最佳的 Linux 支持,需要

  • 适用于相应 PostScript 打印机的 PPD 文件。

对于PostScript打印机,已经提供了PPD文件,因为所有制造商都随打印机附带合适的PPD文件。

然而,打印机制造商通常以其他操作系统(例如,自解压EXE存档)的不方便格式提供PPD文件——尽管PPD文件由纯ASCII文本组成,并且不大到需要压缩的程度。

PPD文件的限制性许可也可能阻止在Linux中使用。

技术细节

什么是PPD文件及其用途?

PPD文件包含特定于型号的打印机功能及其选项以及相关的PostScript代码片段,这些代码片段必须发送到PostScript打印机才能激活所选功能。

根据“Adobe PostScript Printer Description File Format Specification, version 4.3”,打印机功能的条目结构如下

每个打印机功能都与“主关键字”相关联。

每个选项都与“选项关键字”和“PostScript调用值”相关联。可选的“翻译字符串”用于用户友好的显示,并且可以本地化。

* 主关键字 选项关键字 / 翻译字符串  " PostScript调用值 "
*分辨率 300x300dpi/300点每英寸 "<</HWResolution[300 300]>>setpagedevice"
*分辨率 600x600dpi/600点每英寸 "<</HWResolution[600 600]>>setpagedevice"

PostScript代码片段(PostScript调用值)是免费PPD文件连接中可能引起许可问题的唯一元素。然而,这些代码片段仅仅用于激活打印机功能,并且不会泄露打印机如何实现打印功能。例如,上述代码片段绝不会泄露打印机内部如何打印300 DPI或600 DPI。

CUPS实用程序“cupstestppd”,也可在 http://www.cups.org/testppd.php 获得,应用于检查每个PPD文件是否符合“Adobe PostScript Printer Description File Format Specification, version 4.3”。

如果该实用程序返回“FAIL”,则PPD文件中的错误非常严重,如果使用该PPD文件,可能会出现重大问题。应消除“cupstestppd”指示的问题。

如果该实用程序返回“PASS”并带有“WARN”消息,则PPD文件应可用,但“cupstestppd”指示的问题不符合上述PPD规范。

不符合PPD规范的PPD文件可能会导致各种错误。即使CUPS能够使用这样的PPD文件,但这并不一定意味着其他程序也能使用它。例如,打印对话框工具(例如KDE打印对话框或Gnome打印对话框)或应用程序中的打印数据处理可能对不符合PPD规范的PPD文件存在各种问题。此外,使用PPD文件中的默认设置的正常打印可能运行良好,但其他设置可能会导致问题。

如果该实用程序返回“PASS”且没有任何警告,则可以假定PPD文件符合PPD规范,但仅此而已。PPD文件可能仍然包含阻止使用的重大错误,例如:

打印机功能与打印机不匹配

  • 一些定义的打印机功能在打印机中不可用。
  • 一些在打印机中可用的打印机功能缺失。

选项不正确

  • 一些定义的选项不受打印机支持。
  • 一些受打印机支持的选项缺失。
  • 某些不能一起工作的选项的组合没有相互排除(例如,透明胶片上的双面打印),即PPD文件中缺少“约束”。
  • 选项的默认设置与PPD文件中的现有“约束”冲突。

PostScript代码片段不正确

  • 不正确的PostScript代码片段会导致打印机的PostScript解释器出现各种错误。

所有这些只能由打印机制造商检查,他们拥有关于打印机内部细节(尤其是打印机中PostScript解释器的内部细节)所需的信息。


PCL+JCL打印机

术语“PCL+JCL打印机”是指支持打印机语言PCL和作业控制语言(JCL)的打印机。

PCL(打印机控制语言)是HP的打印机语言。许多其他制造商的许多打印机型号也支持PCL。与PostScript类似,PCL也有几个级别:PCL3、PCL4、PCL5、PCL5e、PCL6、PCLXL。

PJL(打印机作业语言)是HP的作业控制语言。许多打印机制造商都有自己的作业控制语言。

PCL是页面描述语言(PDL),它告诉打印机打印输出应该是什么样子。例如,它可能告诉打印机打印单词“Hello”。

相反,作业控制语言告诉打印机如何制作打印输出,例如从哪个纸盘取纸以及是否激活双面打印模式或省墨模式。

处理阶段

  1. 如果打印数据不是PostScript,它们将被转换为PostScript。
  2. 如果需要,合适的JCL控制命令(打印机需要用于激活特殊打印机功能,例如选择纸盘、双面打印模式或省墨模式)将添加到PostScript数据中。对于支持作业控制语言的打印机,打印机功能和所需的JCL控制命令可以存储在特定于打印机的PPD文件中。
  3. PostScript数据加上JCL控制命令必须在额外的处理阶段中进行转换
    1. 提取JCL控制命令。
    2. 将PostScript数据转换为PCL。可以使用Ghostscript执行此转换。请参阅“具有Ghostscript支持的打印机”部分。
    3. 重新连接PCL数据和JCL控制命令。
  4. PCL数据加上JCL控制命令被发送到打印机。

基本Linux支持

对于上述所有PCL级别,都有合适的Ghostscript驱动程序可用于将PostScript数据转换为PCL。因此,无论打印系统如何,始终可以为PCL打印机提供基本的Linux支持。

最佳Linux支持

要获得最佳的 Linux 支持,需要

  • 适用于相应 PCL+JCL 打印机的 PPD 文件。
  • 一个合适的脚本或程序,执行上述额外的处理阶段。

Foomatic PPD文件适用于大量PCL打印机,可在OpenPrinting/LinuxPrinting.org上找到:http://www.linux-foundation.org/en/OpenPrinting。对于某些PCL-Ghostscript驱动程序,上述额外的处理阶段由Foomatic过滤器脚本“foomatic-rip”从Foomatic版本3.0.1执行。在理想情况下,Foomatic可以提供最佳的Linux支持。

然而,在许多情况下,打印机制造商必须提供合适的PPD文件和合适的额外的处理阶段。如果创建了“foomatic-rip”兼容的PPD文件,则后者是不必要的。

因此,应该按照Foomatic进行操作,因为已经为此奠定了基础,并且Foomatic在数十万个Linux安装中高效运行。对所有相关方来说,打印机制造商直接支持和协助Foomatic的进一步开发是最好的。

技术细节

如何在PPD文件中定义JCL打印机功能?

以下是使用作业控制语言PJL选择分辨率的示例

*JCLResolution 300x300dpi/300点每英寸 "@PJL SET RESOLUTION = 300"
*JCLResolution 600x600dpi/600点每英寸 "@PJL SET RESOLUTION = 600"

用于代替PostScript代码片段的JCL控制命令是免费PPD文件连接中可能引起许可问题的唯一内容。然而,这些JCL控制命令仅仅用于激活打印机功能,并且不会泄露打印机如何实现打印功能。例如,JCL控制命令绝不会泄露打印机内部如何打印300 DPI或600 DPI。

对于CUPS打印系统,上述额外的处理阶段在PPD文件中定义如下(示例:Foomatic过滤器脚本“foomatic-rip”)

*cupsFilter "application/vnd.cups-postscript 0 foomatic-rip"

有关过滤器脚本的详细信息,请参阅文章 SDB:Using Your Own Filters to Print with CUPS


支持 Ghostscript 的打印机

Ghostscript (http://www.cs.wisc.edu/~ghost/) 是一个全面的程序包,用于将PostScript数据转换为其他格式,尤其是各种打印机语言。Ghostscript通过各种Ghostscript驱动程序来实现这一点(例如,请参阅 http://www.cs.wisc.edu/~ghost/doc/printer.htm)。

如果其打印机语言有Ghostscript驱动程序可用,则打印机具有Ghostscript支持。

特定打印机型号的支持级别取决于相应的Ghostscript驱动程序

许多打印机型号对几乎所有选项都具有Ghostscript支持。

许多打印机型号只有基本支持,即正常打印效果良好,但高分辨率图形打印可能不可行,颜色色调可能无法正确打印,或者特殊功能(例如纸盘选择或特殊照片模式)可能不受支持。例如,所有PCL打印机至少具有基本的Ghostscript支持。

一些打印机型号仅得到初步支持,即正常打印有效,但效果不好或彩色打印不可接受或不可能。

在Ghostscript中,用于打印输出的参数(尤其是各自的Ghostscript驱动程序的参数)通过各种命令行选项设置。

以下信息假定打印机不支持任何作业控制语言。支持作业控制语言的打印机可以按照“PCL+JCL打印机”部分所述进行处理。

基本处理阶段

  1. 如果打印数据不是PostScript,它们将被转换为PostScript。
  2. 使用适合相应打印机型号的Ghostscript驱动程序将PostScript数据转换为打印机语言。
  3. 将特定于打印机的数据发送到打印机。

基本Linux支持

对于具有基本Ghostscript支持的打印机,无论打印系统如何,始终可以提供基本的Linux支持。

对于没有Ghostscript支持的打印机,必须开发合适的Ghostscript驱动程序才能实现与打印系统无关的Linux支持。CUPS的特殊替代方案在“具有CUPS 'rasterto...'支持的打印机”部分中描述。

最佳Linux支持的处理阶段

  1. 如果打印数据不是PostScript,它们将被转换为PostScript。
  2. 如果需要,将伪控制命令添加到PostScript数据中,并在下一个处理阶段将其转换为实际的Ghostscript参数。这尤其适用于Ghostscript驱动程序需要用于激活特殊功能的参数。打印机功能和所需的伪控制命令可以存储在特定于打印机的PPD文件中。
  3. PostScript数据加上伪控制命令必须在额外的处理阶段中进行转换,如下所示
    1. 伪控制命令用于生成包含合适的Ghostscript参数的Ghostscript命令行。
    2. 通过执行Ghostscript命令行,将PostScript数据转换为相应的特定于打印机的数据。
  4. 将特定于打印机的数据发送到打印机。

最佳Linux支持

要获得最佳的 Linux 支持,需要

  • 支持相应型号所有打印机功能的Ghostscript驱动程序。
  • 合适的PPD文件。
  • 一个合适的脚本或程序,执行上述额外的处理阶段。

Foomatic PPD文件适用于大量打印机,可在LinuxPrinting.org上找到:http://www.linuxprinting.org/。上述额外的处理阶段由Foomatic过滤器脚本“foomatic-rip”从Foomatic版本3.0.0执行。在理想情况下,Foomatic可以提供最佳的Linux支持。

然而,在许多情况下,只需微调Foomatic PPD文件中的Ghostscript参数(例如,为了获得最佳颜色色调),就可以实现最佳的Linux支持。

然而,在许多情况下,打印机制造商必须提供Ghostscript驱动程序、合适的PPD文件和合适的脚本或程序用于额外的处理阶段。如果创建了“foomatic-rip”兼容的PPD文件,则后者是不必要的。

因此,应该按照现有的Ghostscript驱动程序和Foomatic进行操作,因为已经为此奠定了基础。对所有相关方来说,打印机制造商直接支持和协助Ghostscript驱动程序和Foomatic的进一步开发是最好的。

CUPS的特殊替代方案在“具有CUPS 'rasterto...'支持的打印机”部分中描述。

技术细节

如何通过伪控制命令在PPD文件中定义Ghostscript参数?

例如,对于与HP LaserJet 4兼容的PCL5e打印机,可以使用命令行参数“-sDEVICE=ljet4”来寻址Ghostscript驱动程序“ljet4”。可以指定分辨率300x300 DPI和600x600 DPI作为命令行参数:“-r300x300”或“-r600x600”。因此,可以使用Ghostscript命令“gs -sDEVICE=ljet4 -r300x300 ...”生成分辨率为300 DPI的PCL5e打印机数据。

以下示例显示了Foomatic过滤器脚本“foomatic-rip”在Foomatic PPD文件中使用伪控制命令选择这些Ghostscript参数

 *cupsFilter: "application/vnd.cups-postscript 0 foomatic-rip"
 ...
 *FoomaticRIPCommandLine: "gs ... -sDEVICE=ljet4 %B ..."
 ...
 *FoomaticRIPOption Resolution: enum CmdLine B
 *DefaultResolution: 300x300dpi
 *Resolution 300x300dpi/300 DPI: "%% FoomaticRIPOptionSetting: Resolution=300x300dpi"
 *FoomaticRIPOptionSetting Resolution=300x300dpi: " -r300x300 "
 *Resolution 600x600dpi/600 DPI: "%% FoomaticRIPOptionSetting: Resolution=600x600dpi"
 *FoomaticRIPOptionSetting Resolution=600x600dpi: " -r600x600 "
 

“FoomaticRIPOption ... B”导致占位符“%B”在“FoomaticRIPCommandLine”中被Ghostscript参数替换。

出于安全原因,使用对实际Ghostscript参数的间接引用“Resolution=300x300dpi”和“Resolution=600x600dpi”,因为直接指定Ghostscript参数,例如

 *Resolution 300x300dpi/300 DPI: "%% FoomaticRIPOptionSetting: -r300x300 "
 

将在PostScript数据流中生成以下行

%% FoomaticRIPOptionSetting: -r300x300

如果过滤器脚本从这里获取Ghostscript参数,恶意用户可以更改此行以

%% FoomaticRIPOptionSetting: $( rm -rf /* )

导致Ghostscript命令

gs ... -sDEVICE=ljet4 $( rm -rf /* ) ...

这将删除过滤器脚本运行的身份的用户有权删除的所有文件。

与此相反,间接引用会生成该行

%% FoomaticRIPOptionSetting: Resolution=300x300dpi

并且滤镜脚本会从 PPD 文件中的相应 "*FoomaticRIPOptionSetting" 行获取 Ghostscript 参数,前提是它可以找到合适的行。如果未找到合适的行,则使用默认设置。PPD 文件本身是安全的,因为它只能由系统管理员修改。

这个例子说明了为什么自定义开发应该与现有的 Ghostscript 驱动程序和 Foomatic 保持一致,因为这些工具是基于许多开发人员的经验和数十万 Linux 安装的反馈而构建的。

在开发新的 Ghostscript 驱动程序时,必须牢记什么?

过去,Ghostscript 驱动程序曾经直接编译到 Ghostscript 中。这种方法的缺点是,新的 Ghostscript 驱动程序必须以补丁的形式添加到 Ghostscript 源代码中,并且必须重新编译 Ghostscript。如今,新的 Ghostscript 驱动程序应该作为单独的 IJS 模块准备,这些模块具有单独的源代码并且可以独立编译。Ghostscript 提供了为此目的所需的 IJS 接口;请参阅 http://www.cs.wisc.edu/~ghost/doc/cvs/Devices.htm#IJS 中的“IJS - 喷墨和其他光栅设备”和 http://www.linuxprinting.org/ijs/ 中的“IJS 网站”。HP 的 HPIJS 驱动程序是一个示例,说明打印机制造商如何将 Linux 驱动程序作为 IJS 模块准备。

出于以下原因,Ghostscript 驱动程序(实际上每个 Linux 打印机驱动程序)即使在没有与打印机的双向通信的情况下也必须工作

  • 打印机可能通过网络和打印服务器盒连接;通常打印服务器盒不启用双向通信。
  • 必须能够将特定于打印机的数据打印到文件,并在稍后随时将该文件直接发送到打印机。

实际上,Ghostscript 驱动程序只是一个简单的滤镜,用于将 Ghostscript 光栅图形数据转换为特定于打印机的光栅图形数据。Ghostscript 以两个独立的阶段处理数据

  1. PostScript 数据被光栅化,即,在 PostScript 语言中描述的图像(在此上下文中,即使文本也是图像)表示为单个像素的精细光栅。在这个阶段,Ghostscript 在没有相应的 Ghostscript 驱动程序的情况下运行。
  2. 然后使用相应的 Ghostscript 驱动程序将光栅化图像转换为所需的打印机语言,以打印机可以打印光栅图形数据的格式。

因此,Ghostscript 驱动程序的源代码可以在无需任何特殊技巧的情况下是平台无关的。

与开源 Ghostscript 驱动程序相关的许可问题

打印机制造商可能担心必须通过开源 Ghostscript 驱动程序泄露其型号的所有内部细节。然而,这种担忧是没有根据的,因为 Ghostscript 驱动程序仅仅用于将 Ghostscript 光栅图形数据转换为特定于打印机的光栅图形数据。因此,唯一需要在开源 Ghostscript 驱动程序中公开的细节是数据格式,以便能够将光栅图形数据传输到打印机。通常,这不会泄露打印机实际如何打印光栅图形数据。

对于基本的 Linux 支持,不需要公开抖动(数字半调)算法,因为基本的 Ghostscript 抖动可以在第一阶段进行。但是,为了获得最佳打印效果,可能需要在 Ghostscript 驱动程序中针对特定的打印机型号自定义抖动(例如在 Gutenprint Ghostscript 驱动程序中;请参阅 http://gimp-print.sourceforge.net/)。某些打印机型号具有内部抖动(例如,与 HP DeskJet 990C 兼容的型号),因此 Ghostscript 驱动程序需要做的就是激活打印机的内部抖动。


支持 CUPS "rasterto..." 的打印机

本节仅涵盖非 PostScript 打印机的 CUPS 直接支持。PostScript 打印机由 CUPS 以上述方式支持。

如果其打印机语言有可用的 "rasterto..." 打印机驱动程序,则打印机具有 CUPS "rasterto..." 支持。目前,最重要的 "rasterto..." 驱动程序是来自 Gutenprint (http://gimp-print.sourceforge.net/) 的 "rastertogutenprint"。

特定打印机型号的支持级别取决于相应的 "rasterto..." 驱动程序。对于 "rastertogutenprint",请参阅 http://gutenprint.sourceforge.net/p_Supported_Printers.php 上的“Gimp-Print Supported_Printers”列表

许多打印机型号对其所有选项都具有支持。

许多打印机型号只有基本支持,即正常打印效果良好,但高分辨率图形打印可能不可行,颜色色调可能无法正确打印,或者特殊功能(例如纸盘选择或特殊照片模式)可能不受支持。例如,所有 PCL 打印机至少具有基本的 "rastertogutenprint" 支持。

一些打印机型号仅得到初步支持,即正常打印有效,但效果不好或彩色打印不可接受或不可能。

处理阶段

  1. 将打印数据转换为 CUPS 光栅数据。如果需要,添加合适的参数以启用 "rasterto..." 打印机驱动程序以激活特殊的打印机功能。打印机功能存储在与 "rasterto..." 打印机驱动程序和相应的打印机关联的 PPD 文件中。
  2. CUPS "rasterto..." 打印机驱动程序将 CUPS 光栅数据和参数转换为特定于打印机的数据。
  3. 将特定于打印机的数据发送到打印机。

基本Linux支持

对于具有基本 CUPS "rasterto..." 支持的打印机,始终可以为 CUPS 打印系统提供基本的 Linux 支持。

对于没有基本 CUPS "rasterto..." 支持的打印机,必须开发合适的 "rasterto..." 驱动程序和合适的 PPD 文件,以便为 CUPS 打印系统实现 Linux 支持。

此外,具有平台无关源代码的 "rasterto..." 驱动程序也可以用于 Mac OS X 操作系统,因为 Mac OS X 使用 CUPS 打印系统。

最佳Linux支持

有关基本 Linux 支持的信息也适用于最佳 Linux 支持。支持级别详细信息取决于 "rasterto..." 驱动程序和相应的 PPD 文件是否支持所有打印机功能。

技术细节

在开发新的 CUPS "rasterto..." 驱动程序时,必须牢记什么?

有关 CUPS "rasterto..." 驱动程序和 PPD 文件的基本信息可在 CUPS 文档中找到:http://www.cups.org/documentation.php

“rasterto...”驱动程序即使在没有与打印机的双向通信的情况下也必须工作(请参阅上述关于 Ghostscript 驱动程序的部分)。

实际上,“rasterto...”驱动程序只是一个简单的滤镜,用于将 CUPS 光栅图形数据转换为特定于打印机的光栅图形数据。因此,在无需任何特殊技巧的情况下,“rasterto...”驱动程序的源代码可以是平台无关的。

与开源 "rasterto..." 驱动程序相关的许可问题

与开源 "rasterto..." 驱动程序相关的许可问题与上述描述的与开源 Ghostscript 驱动程序相关的许可问题相对应。

打印机制造商可能担心必须通过开源 "rasterto..." 驱动程序泄露其型号的所有内部细节。然而,这种担忧是没有根据的,因为开源 "rasterto..." 驱动程序仅仅包含有关数据格式的信息,以便能够将光栅图形数据传输到打印机。对于基本的 Linux 支持,不需要公开抖动算法。但是,为了获得最佳打印效果,可能需要在 "rasterto..." 驱动程序中针对特定的打印机型号自定义抖动(例如在 Gimp-Print "rastertoprinter" 驱动程序中)。


支持 "Postfilter" 的打印机

目前,一些打印机仅通过 "Postfilter" 提供 Linux 支持。

“Postfilter”是一个在现有 Ghostscript 驱动程序之后使用的程序。

Ghostscript(请参阅 http://www.cs.wisc.edu/~ghost/)是一个用于将 PostScript 数据转换为其他格式的综合程序包,尤其是各种光栅图形数据格式。Ghostscript 通过各种 Ghostscript 驱动程序来实现这一点,特别是用于“图像文件格式”(例如,请参阅 http://www.cs.wisc.edu/~ghost/doc/cvs/Devices.htm#File_formats)。

“Postfilter”将 Ghostscript 驱动程序生成的光栅数据转换为特定于打印机的数据,即打印机可以打印光栅图形数据的格式。

特别是那些不支持任何常规标准打印机语言(GDI 打印机)的打印机,有时通过 "Postfilter" 具有 Linux 支持。

只有少数这些打印机提供超过基本 Linux 支持。

基本处理阶段

处理阶段与具有 Ghostscript 支持的打印机的处理阶段相对应,再加上一个额外的处理阶段,在该阶段中运行 "Postfilter"。

  1. 如果打印数据不是PostScript,它们将被转换为PostScript。
  2. 使用适合相应 "Postfilter" 的 Ghostscript 驱动程序将 PostScript 数据转换为光栅数据。
  3. 适合相应打印机的 "Postfilter" 将这些光栅数据转换为特定于打印机的数据。
  4. 将特定于打印机的数据发送到打印机。

基本Linux支持

对于具有基本 "Postfilter" 支持的打印机,无论打印系统如何,都可以提供基本的 Linux 支持。

对于没有基本 "Postfilter" 支持的打印机,所有需要做的就是为现有的 Ghostscript 驱动程序开发合适的 "Postfilter"。

如今,Ghostscript 驱动程序应作为 IJS 模块开发。与 "Postfilter" 一样,IJS 模块具有单独的源代码并且可以独立编译。请参阅 "Printers with Ghostscript Support" 部分中的“技术细节”。

CUPS 的替代方案在 "Printers with CUPS 'rasterto...' Support" 部分中描述。

最佳Linux支持

要获得最佳的 Linux 支持,需要

  • 支持相应型号的所有打印机功能的 "Postfilter"。
  • 合适的PPD文件。
  • 一个合适的脚本或程序,它使用合适的参数运行 Ghostscript 驱动程序和 "Postfilter"。

为了获得最佳 Linux 支持,"Printers with Ghostscript Support" 部分中列出的“最佳 Linux 支持的 Processing Stages”必须通过一个额外的处理阶段扩展,在该阶段中运行 "Postfilter"。此外,必须将合适的伪控制命令传递给 Ghostscript 驱动程序和 "Postfilter"

  1. 如果打印数据不是PostScript,它们将被转换为PostScript。
  2. 如果需要,将伪控制命令添加到要转换为以下处理阶段中的实际 Ghostscript 参数和 "Postfilter" 参数的 PostScript 数据中。这尤其适用于相应的 Ghostscript 驱动程序和 "Postfilter" 需要激活特殊打印机功能的参数。打印机功能和所需的伪控制命令可以存储在特定于打印机的 PPD 文件中。
  3. PostScript数据加上伪控制命令必须在额外的处理阶段中进行转换,如下所示
    1. 伪控制命令用于生成包含合适的 Ghostscript 参数和合适的 "Postfilter" 参数的 Ghostscript 命令行和后续 "Postfilter" 命令行。
    2. 通过执行 Ghostscript 命令行和后续 "Postfilter" 命令行,将 PostScript 数据转换为相应的特定于打印机的数据。
  4. 将特定于打印机的数据发送到打印机。

在 LinuxPrinting.org 上提供了一组支持 "Postfilter" 的打印机的 Foomatic PPD 文件:http://www.linuxprinting.org/。上述额外的处理阶段由 Foomatic 版本 3.0.0 中的 Foomatic 滤镜脚本 "foomatic-rip" 执行。在理想情况下,Foomatic 可以提供接近最佳的 Linux 支持。可以通过简单地微调 Foomatic PPD 文件中的 Ghostscript 和 "Postfilter" 参数来实现这一点。

与其开发最佳 "Postfilter",不如将 Ghostscript 驱动程序开发为 IJS 模块(请参阅上述内容),以确保与 Ghostscript 的统一接口(IJS 接口)。


没有 Linux 支持的打印机(GDI 打印机)

这些是不能使用发布的标准打印机语言(如 PostScript 或 PCL)寻址的打印机,而只能使用特定于打印机的专有打印机语言。这些打印机通常被称为“GDI 打印机”,但由于没有通用的“GDI”打印机语言,因此“只能通过专有协议寻址的打印机”的称谓会更正确。请参阅文章 SDB:GDI Printers

为了获得基本的或最佳的 Linux 支持,打印机制造商必须提供以下内容

  • 一个免费的开源 Linux 驱动程序。
  • 合适的PPD文件。
  • 如果需要,一个合适的脚本或程序,它执行上述描述的额外处理阶段。

只有以下两种方法可行

实现一个 IJS 驱动程序模块,该模块为打印机提供与打印系统无关的 Ghostscript 支持;请参阅 "Printers with Ghostscript Support" 部分。

CUPS "rasterto..." 驱动程序为打印机提供直接 CUPS 支持;请参阅 "Printers with CUPS "rasterto..." Support" 部分。此外,平台无关的源代码 "rasterto..." 驱动程序也可以用于 Mac OS X 操作系统,因为 Mac OS X 使用 CUPS 打印系统。

更多信息

Portal:Printing