7. 工作原理

为了使打印能够良好地工作,您需要了解您的假脱机软件是如何工作的。所有系统的工作方式本质上是相同的,尽管确切的顺序可能略有不同,并且某些系统会跳过一两个步骤

图 10. 假脱机图示

  1. 用户提交作业以及他选择的选项。作业数据通常(但不总是)是 Postscript。

  2. 假脱机系统通过网络将作业和选项复制到打印机的大致方向。

  3. 假脱机系统等待打印机可用。

  4. 假脱机系统将用户选择的选项应用于作业,并将作业数据转换为打印机的本机语言,通常不是 Postscript。此步骤称为过滤;设置工作的大部分在于使正确的过滤发生。

  5. 作业已完成。假脱机系统通常会在此时执行各种清理操作。如果在过程中出现错误,假脱机程序通常会以某种方式通知用户(例如,通过电子邮件)。

7.1. CUPS

要使用 CUPS 打印作业,您可以同时使用 BSD(参见第 5.3.1 节)和 System V 命令,这对于有这两种系统先前经验的人来说非常容易。

图 11. 简化的 CUPS 图示

最初,CUPS 缺少 LPD 后端。这当然很快就被添加了。目前,至少有 IPP、LPD、SMB、JetDirect、USB、Netatalk、并行和串行打印机的后端可用。您可能会在网上找到其他后端,或者编写自己的后端。

内置驱动程序很少,允许您使用大多数打印机进行打印,但可能无法达到最大分辨率。可以将 Postscript 驱动程序的 PPD 文件添加到 CUPS,但如果您想使用您新买的 HP Deskjet 以最佳质量打印,那您就没那么幸运了。Foomatic 在这里可以提供帮助。您可以将 Foomatic 与 CUPS 结合使用。Foomatic 使用名为 foomatic-rip 的 CUPS 过滤器来施展它的魔法。foomatic-rip 使用 PPD 文件来描述打印机的功能,即使对于非 Postscript 打印机也是如此。CUPS + Foomatic 是目前推荐的打印系统。一些 Linux 发行版已经在使用它,而且使用它的数量只会增长。

CUPS 调度程序不仅接受作业,它还是一个管理 Web 界面。目前,您可以添加/删除打印机、取消作业、启动/停止打印机。移动作业将在以后的版本中提供。

7.2. LPD

Lpd 代表 Line Printer Daemon(行式打印机守护程序),在不同的上下文中指的是守护程序以及运行打印假脱机的整个程序集合。这些是

lpd

假脱机守护程序。其中一个运行以控制机器上的所有内容,并且在打印机打印时每个打印机运行一个。

lpr

用户假脱机命令。Lpr 联系 lpd 并将新的打印作业注入到假脱机中。

lpq

列出打印队列中的作业。

lpc

Lpd 系统控制命令。使用 lpc,您可以停止、启动、重新排序等打印队列。

lprm

lprm 从打印假脱机中删除作业。

它是如何组合在一起的呢?以下事情会发生

  1. 在启动时,lpd 运行。它等待连接并管理打印机队列。

  2. 用户使用 lpr 命令或替代地使用像 GPR、PDQ 等 lpr 前端提交作业。Lpr 通过网络联系 lpd,并提交用户的数据文件(包含打印数据)和控制文件(包含用户选项)。

  3. 当打印机可用时,主 lpd 派生一个子 lpd 来处理打印作业。

  4. lpd 执行适当的过滤器(在if属性中指定/etc/printcap)用于此作业,并将结果数据发送到打印机。

当大多数打印机都是行式打印机时,最初设计了 lp 系统 - 也就是说,人们主要打印纯 ASCII。通过在if过滤器中放置各种魔法,现代打印需求可以通过 lpd 满足(或多或少;许多其他系统做得更好)。

有许多程序可用于编写 LPD 过滤器。其中包括

gs

Ghostscript 是一个基于主机的 Postscript 解释器(也称为光栅图像处理器或 RIP)。它接受 Postscript 并以各种打印机语言或多种图形格式生成输出。Ghostscript 在第 10 节中介绍。

ppdfilt

ppdfilt 是 CUPS 组件的独立版本。它过滤 Postscript,对其执行一些基本转换(n-up 打印、多份副本等),并根据通常包含在 Postscript 打印机中的 Postscript 打印机定义 (PPD) 文件添加用户选项语句。

ppdfilt 最适合与接受选项的 LPD 系统(如 GNUlpr 或 LPRng)和过滤器脚本一起使用,该过滤器脚本将用户提供的选项解析为等效的 ppdfilt 命令。VA Linux 和 HP 提供了一个修改过的 rhs-printfilters 包,它正是这样做的;如果您有 Postscript 打印机,它会产生很好的结果。有关此系统的信息,请参见第 8.2.2 节

ps2ps

ps2ps 是 Ghostscript 附带的实用程序脚本。它将 Postscript 过滤为更精简的 Postscript,可能具有较低的语言级别。如果您有较旧的 Postscript 打印机,这将非常有用;大多数现代软件都生成现代 Postscript。

mpage

mpage 是一个实用程序,它接受文本或 Postscript,并生成 n-up 输出 - 即,在每张纸上包含多个页面图像的输出。实际上有几个程序可以做到这一点,包括 enscriptnenscripta2ps

a2ps

a2ps,也称为 any-to-ps,是一个程序,它接受各种文件类型并将它们转换为 Postscript 以进行打印。