系统管理指南:打印

第 1 章 关于在 Oracle Solaris 操作系统中进行打印的简介

本章介绍如何在 Oracle Solaris 操作系统 (Operating System, OS) 中进行打印。还提供了有关打印服务、工具和协议的概念性信息。本书中随后的每一章将分别介绍如何使用这些工具、协议和技术来管理打印服务和打印机。

本章介绍了在本书中经常用到的多个术语和概念。要完全领会打印概念,对上述概念和术语有个基本的了解是必不可少的。有关所有打印概念和术语的完整列表,请参见词汇表

下面列出了本章中的信息。

打印方面的新增功能

本节介绍此 Oracle Solaris 发行版中新增的打印功能和更改的打印功能。有关新增功能的完整列表以及 Oracle Solaris 发行版的说明,请参见《Oracle Solaris 10 9/10 新增功能》

使用打印命令的权限要求

由于在 Oracle Solaris 发行版中设计了开放标准打印 API (Print API, PAPI) 实现,因此要与打印服务交互,不再需要提升的权限来运行应用程序、工具包和打印命令。

因此,以下打印命令不再是安装的 SUID 根:

以前,上述命令是安装的 SUID root,因为这些命令需要提升的权限才能实现以下目的:

此功能现在已在小型帮助应用程序 /usr/lib/print/lpd-port 中进行了本地化。因此,任何使用 RFC-1179 PAPI 支持的应用程序不再需要提升的权限。lpd-port 帮助应用程序包含在保留端口上传递 RFC-1179 协议请求以及分配连续的作业 ID 号所需的最低支持。尽管帮助应用程序是安装的 SUID 根,但除非需要提升的权限,否则所有提升的权限都会被放弃。如有必要,会为必需的操作提升权限,然后再永久放弃提升的权限(如果不再需要提升的权限)。在 Oracle Solaris 发行版中,此过程是通过使用权限来完成的。在其他平台上,此过程是通过使用 setuidseteuidsetreuid 函数来完成的。

如果您不希望在网络上共享本地打印机,则可以安全地禁用打印网络侦听程序。如果您运行的是 Oracle Solaris 发行版或 CUPS 服务器,则在使用 IPP 与这些服务器通信时,lpstat 命令可提供有关远程打印队列和打印作业及其功能的更多信息。

如果 IPP 正在使用中而且具有正确的授权,则可以对远程打印队列和打印作业执行以下操作:

此外,如果 IPP 正在使用中,您现在还可以在打印服务器上的队列之间移动打印请求,并远程修改打印请求。

有关更多信息,请参见 privileges(5) 手册页。有关逐步操作过程,请参见使用 Internet 打印协议时管理网络上的打印机(任务图)

PPD 文件管理实用程序

Solaris 10 5/08:PPD 文件管理器 /usr/sbin/ppdmgr 是一个实用程序,可管理在打印子系统中使用的 PostScript 打印机描述 (PostScript Printer Description, PPD) 文件。如果使用 ppdmgr 实用程序或带有 -n 选项的 lpadmin 命令将 PPD 文件添加到系统,则会自动更新 PPD 文件信息的高速缓存。此高速缓存由 Solaris Print Manager 使用。

有关更多信息,请参见使用 PPD 文件管理实用程序管理 PPD 文件(任务图)ppdmgr(1M) 手册页。

Oracle Solaris 打印体系结构概述

打印系统的核心是基于 UNIX System V (R4) 的假脱机程序。除了假脱机程序以外,还有用于发出假脱机程序请求并管理假脱机程序的客户机应用程序、执行文档转换的过滤器、执行最终文档转换和设备(打印机)通信的后端处理软件。要利用打印系统的完整功能,需要具备上述所有资源。

在 Oracle Solaris OS 中打印需要支持以下各项的软件:

下图是一个表示打印系统组件的高级图。

显示 LP 客户机-服务器的图,其中包含使用打印服务的应用程序。周围的文字提供了详细信息。

Oracle Solaris 打印的最新更改包括集成 IPP 客户端支持(通过 PAPI 实现)。Berkeley 软件分发 (Berkeley Software Distribution, BSD) 和 System V (SysV) 命令以及一些应用程序位于 PAPI 接口的上面一层。请参见实现开放标准打印 API

可用的打印工具和服务

以下工具可用于设置和管理 Oracle Solaris 10 OS 中的打印机:

Oracle Solaris 发行版支持以下接口、协议和技术:

实现开放标准打印 API

由于 Oracle Solaris 实现了开放标准打印 API(也称为 PAPI),因此可以使应用程序、工具包和打印命令位于打印服务、协议中立的接口的上面一层。此实现可以与 RFC-1179 打印服务、基于 IPP 的打印服务和基于 LP 的打印服务一同使用。打印机、服务器和作业属性以及发送给打印机的作业提交和查询都属于受支持的 PAPI 功能。通过此支持,打印客户机(无论是应用程序,还是打印命令本身)可以向打印系统查询打印机特征并请求信息。

有关更多信息,请参见下列参考:

打印客户机命令

历史上,打印命令一直受特定打印系统束缚,因为这些命令是在打印系统特定的协议和接口之上实现的。IPP、BSD、LPR、SysV LP 和 LPRng 打印协议就属于这种情况。引入 PAPI 后,就可以使这些打印命令位于打印服务、协议中立的接口的上面一层

PAPI 为应用程序提供了单一的打印服务交互接口。这意味着,可以将应用程序编写为使用此接口以及各种打印服务,而不需要更改应用程序。应用程序不再与特定打印服务(如 LP 打印服务或 CUPS)相关联。相反,可以在系统上轻松地替换打印服务,而不会影响上面的协议或应用程序层。最后,可以根据特定需要开发并选择打印服务。

Oracle Solaris OS 中的 PAPI 实现还提供对 IPP 的服务器端和客户端支持(位于 PAPI 的上面一层)。IPP 作为一组协议特定的库和一个 Apache 模块来实现。与命令实现类似,IPP 侦听服务可以与支持 PAPI 的任何打印服务结合使用。此外,还提供了 RFC-1179 协议的服务器端支持。

打印服务器和打印客户机的定义

打印服务器是一种系统,可在其中配置打印队列并使打印机可用于网络上的其他系统。打印客户机是利用已配置的打印队列的系统。

也可以将打印机分为两种类别:本地和远程。本地打印机是指已在您的本地系统上定义的打印队列。远程打印机是指在本地系统以外的任何位置定义的打印队列。这些术语与打印机以物理方式连接到系统还是网络没有任何关系,但与打印队列的配置位置有关。打印队列的配置位置确定了该打印机所对应的服务器。通常,支持建立所有打印机的过程的打印服务器是同一系统。

另一种查看打印机及打印机设置的方式就是它们实际的连接方式。某些打印机通过电缆直接连接到打印服务器。这些打印机被称为连接的打印机。如果将打印机连接到网络(而不是连接到桌面或服务器),则该打印机被称为网络连接的打印机。术语本地远程是指打印队列配置。术语直接连接的网络连接的是指打印机硬件的物理连接。将打印机称为连接的打印机或网络连接的打印机,即定义了打印机的物理连接方式。提到本地打印机或远程打印机时,是指定义该打印机的打印队列的方式。有时,这些术语的使用可能会导致混乱,因为以物理方式连接到系统的打印机也很有可能具有已在本地系统上定义的打印队列。同样,网络打印机的打印队列很有可能已在本地系统的远程系统上进行了定义。这就是连接的打印机和网络打印机常被称为本地打印机和远程打印机的原因。

Internet 打印协议说明

IPP 是最新的行业标准网络打印协议,可用于客户机到服务器的通信以及服务器到打印机的通信。此协议提供了一个基本模型,其中包括打印机和作业、这些打印机和作业的标准属性,以及一组可针对这些打印机和作业执行的标准操作。由于对象、属性和操作已被标准化,因此 IPP 是用于在客户机与服务器系统之间进行通信的方法。在 Oracle Solaris OS 中,对此协议的服务器端支持由 IPP 侦听服务提供。Oracle Solaris OS 中的 IPP 客户端支持是通过 PAPI 实现的。IPP 打印机支持可通过 URI 接口脚本获取。

有关本文档中的逐步操作过程和其他背景信息,请参见配置 Internet 打印协议附录 A

RFC-1179 打印协议说明

也称为 BSD 协议,RFC-1179 协议是现有的线上协议,它广泛用于使打印客户机和打印服务器与网络连接的特定打印机(使用 LP 打印服务或 Solaris Print Manager 进行配置)进行通信。互联网信息文档和标准 (Request for Comments, RFC) 1179 描述了行式打印机守护进程客户机用于控制打印的协议。RFC-1179 打印协议最初是为 BSD UNIX 开发的,长期以来一直作为跨平台打印标准。您可以使用此协议执行基本的打印任务,如提交和取消打印作业以及获取打印作业状态。RFC-1179 协议可以与基于 LPD 的打印服务器以及任何其他接受 BSD 打印协议的打印服务器进行通信。许多网络连接的打印机都提供此协议作为传输作业数据的选项。

IPP 与 RFC-1179 协议的比较

RFC-1179 协议几十年来一直作为标准的网络打印协议。该协议最初是为执行一组非常有限的操作而设计的。RFC-1179 协议缺少状态信息的通用表示形式。而且,此协议仅提供基本的打印作业选项。相反,IPP 设计包括 RFC-1179 和 BSD 协议所缺少的功能。通过 IPP,可以执行一组广泛的操作。这些操作通过使用通用的表示形式和编码方法来利用一组核心通用属性。此外,通过 IPP 还可以在打印客户机和打印服务器之间使用加密和验证。最后,IPP 提供了一种方法来扩展操作和属性,同时保持向后兼容性和互操作性。RFC-1179 协议的演化结果之一就是,有多个冲突的供应商扩展亟待克服,从而使 IPP 成为打印协议的首选。

有关使用 IPP 设置和管理打印机的更多信息,请参见配置 Internet 打印协议附录 A

SMB 协议说明

SMB 协议是应用程序级别的网络协议,主要用于共享打印机、文件访问、串行端口以及网络上的节点之间的其他通信。SMB 主要由 Windows 系统使用,是一种经过验证的进程间通信机制。在 Oracle Solaris OS 中,SMB 协议主要用于共享打印机。所有这些进程都在网络上执行。SMB 可以在多个协议上运行。

SMB 通过对等方法发挥作用。客户机将特定请求发送到服务器,服务器相应地做出响应。SMB 服务器使其文件系统和其他资源可供网络上的客户机使用。在 Oracle Solaris OS 中,SMB 包括 Samba 服务器端支持(由服务管理工具 (Service Management Facility, SMF) 进行管理)和 Samba smbclient 客户端支持。要访问 Windows 托管的打印机,需要设置本地打印队列。由于 UNIX 打印模型和 Windows 打印模型存在差异,因此需要满足此要求。

什么是 Samba?

Samba 是一个开放源代码 SMB 服务器免费软件应用程序,它使用 SMB 协议。Samba 提供了 Windows 客户机对 UNIX 服务器的访问,以及 UNIX 客户机对 Windows 服务器的访问。所提供的访问面向文件和其他服务,包括打印机共享。Samba 的设计以及约束在现有的各种 UNIX 系统之上运行。Samba 作为一组守护进程和服务运行,不需要修改现有内核。可在 http://www.samba.org 上找到有关 Samba 的更多信息。

使用 Oracle Solaris 发行版中的打印协议

Oracle Solaris OS 中的打印体系结构使用网络打印协议,按如下方式与打印服务进行通信:

Oracle Solaris 软件提供了应用程序、工具包、打印命令以及可与打印服务交互的应用程序编程接口。此 API 被称为 PAPI。PAPI 包含前端 API 实现,可动态装入后端打印服务或与打印服务直接通信的协议模块。这些打印服务包含正在处理的打印作业或打印队列。客户机到服务器的通信包括 RFC-1179 和 IPP 协议,以及对与本地 LP 打印服务进行通信的支持。对于服务器到打印机的通信,网络打印协议支持使打印服务可以将打印作业直接传输到网络连接的打印机。

LP 打印服务和 Solaris Print Manager 之间的服务器到打印机的通信包括对以下网络协议的支持:

确定要使用哪个打印协议

打印系统使用两个线上协议将打印请求从打印客户机发送到打印服务器。下表介绍了可用于在 Solaris OS 中打印的打印协议。

表 1–1 支持的打印协议

网络打印协议 

是否提供服务器端支持? 

是否提供客户端支持? 

更多信息 

Internet 打印协议 (Internet Printing Protocol, IPP) 

从 Oracle Solaris 10 发行版开始,提供对 IPP 侦听服务的服务器端支持。 

在某些 Oracle Solaris 发行版中受支持。 

配置 Internet 打印协议

RFC-1179 协议 

在所有 Oracle Solaris 发行版中均受支持。 

在所有 Oracle Solaris 发行版中均受支持。 

RFC-1179 打印协议说明

SMB 协议(通过 Samba) 


注 –

SMB 协议(通过 Samba)可实现 Linux 和 UNIX 服务器以及基于 Windows 的客户机之间的互操作性。


从 Solaris 9 OS 开始受支持。 

从 Solaris 9 OS 开始受支持。 

SMB 协议说明

选择客户机到服务器网络打印协议

应用程序、工具包和打印命令根据在指定打印队列所对应的 printers.conf 数据库项中找到的 printer-uri-supported 属性的值,来选择要用于客户机到服务器通信的协议。如果对远程打印队列的访问是使用 lpadmin 命令配置的,或应用程序使用为执行一个或多个操作而引用的接口,则会自动生成和填充此属性值。

例如,如果在使用 Mozilla 的同时打印文档,则为获取打印机访问权限而遵循的路径为:

Mozilla -> lp -> PAPI

有关更多信息,请参见 printers.conf(4)

lpadmin 命令使用以下格式生成 printer-uri-supported 值:

{ipp|lpd}://server/printers/ queue

为确定将在 printers.conf 数据库中使用哪个 URI,lpadmin 命令将探测远程打印服务。如果远程打印服务支持 IPP,则此协议优先于 BSD 协议。但是,通过在 lpadmin 命令中指定 -s 选项,然后提供不同的 URI,可以覆盖自动协议选择。有关更多信息,请参见支持的打印机 URI 格式

LP 打印子系统使用 BSD 打印协议(也称为 RFC-1179 协议)和原始传输控制协议 (Transmission Control Protocol, TCP)(Internet 的基本通信语言或协议),来与打印机通信。如果您设置的打印机包括打印机供应商文档,则会提供有关使用哪个协议的信息。要在网络上打印,TCP 协议是最常用的协议。

支持的打印机 URI 格式

下表说明受支持的打印机 URI 格式:

表 1–2 支持的 URI 格式

命令 

URI 格式 

lpsched

lpsched://localhost/printers/queue

此打印机 URI 方案只能用于联系本地 LP 服务,以访问在 URI 中指定的打印队列。 

lpd

lpd://localhost/printers/queue[#extensions]

使用此 URI 格式联系本地打印服务或远程打印服务,以便访问 URI 中指定主机上的打印队列。可指定可选的 #extensions,例如 #solaris。指定 #solaris 时,主机会在提交打印作业的过程中按照 RFC-1179 协议来处理 Solaris 扩展。

选择服务器到打印机网络打印协议

网络连接的打印机通常支持多种与打印服务进行通信的方法。与打印服务进行通信的最常用方法是,通过到设备上的已知端口的原始 TCP 连接。其他通信方法包括 RFC-1179 和 IPP 网络协议。采用以下方式之一添加新打印队列时,可以选择服务器到打印机通信协议。

在确定要使用哪个协议执行服务器到打印机的通信时,请参阅供应商打印机文档以了解更具体的信息。文档中包括如 TCP 端口号、RFC-1179 打印机名称和设备支持的 IPP 打印机 URI 等信息。在大多数情况下,原始 TCP 套接字通信可能会提供最可靠的结果。

此外,请注意,由于 UNIX 平台和 Windows 平台上的打印服务之间存在差异,因此 Windows 托管的打印机应该配置为网络连接的打印机并以此方式进行管理。如果您在 Oracle Solaris 系统上使用这些类型的打印机,则这些打印机要求创建打印队列。此外,这些打印机还可以使用 SMB 协议来进行服务器到打印机的通信。有关 SMB 协议的更多信息,请参见SMB 协议说明

有关设置打印机和配置打印队列的更多信息,请参见使用 Solaris Print Manager 设置打印机(任务图)使用 LP 打印命令设置打印机(任务图)

Solaris Print Manager 说明

Solaris Print Manager 是基于 Java 技术的 GUI,使用它可以管理本地和远程打印配置。可以在 files、LDAP、NIS 和 NIS+ 命名服务环境中使用此工具。

要使用该工具,必须满足以下要求:

Solaris Print Manager 在打印机信息与命名服务结合使用时会集中这些打印机信息。使用命名服务来存储打印机配置信息是一种首选方法,因为命名服务可使打印机信息供网络上的所有系统使用。此方法使打印机管理变得更简单。Solaris Print Manager 可识别打印服务器、打印客户机和命名服务数据库中的现有打印机信息。如果打印客户机运行的是 Solaris 2.6 发行版或更高版本,则无需执行转换任务即可使用 Solaris Print Manager。

Solaris Print Manager 软件包是 SUNWppm

LP 打印服务说明

LP 打印服务是一组软件实用程序,允许用户在继续工作的同时打印文件。打印服务最初称为 LP 假脱机程序LP 表示行式打印机,但是现在包括许多其他类型的打印机,如激光打印机。Spool 是 Simultaneous Peripheral Operations Online(外围设备联机并发操作)的首字母缩写词。

LP 打印服务包括 LP 打印服务软件、您可能提供的任何打印过滤器、硬件(如打印机)、系统和网络连接。

Solaris 10 5/08:LP 打印客户机命令使用 PAPI 与 Solaris LP (lpsched)、RFC-1179(BSD/LPD 协议)以及基于 IPP 的服务器进行交互。IPP 支持可以使用其固有的 IPP 服务与 CUPS 服务器进行交互。由于引入了此 API 支持,多个常用的 BSD 和 SysV 打印命令可以使用 PAPI 接口。因此,新的命令实现适用于大量现有的打印服务。此开发的一部分包括对 IPP 的服务器端支持(也位于 API 的上面一层)。此支持作为一组协议特定的库和一个 Apache 模块(版本 1 和 2)实现。与打印命令实现类似,IPP 侦听服务可以与具有 PAPI 支持的任何打印服务一同使用。RFC-1179 服务器端支持也位于 PAPI 的上面一层。

有关 LP 打印服务的附加信息,请参见LP 打印服务

LP 打印客户机/服务器过程

本节简要介绍 LP 打印服务使用的打印客户机/服务器过程。

使用打印服务器

打印服务器是一个连接了本地打印机并使该打印机可供网络上的其他系统使用的系统。下图突出显示了打印过程中,打印服务器将打印请求发送到打印机的这部分过程。

图 1–1 打印服务器将打印请求发送到打印机

显示打印服务器分 5 个步骤发送打印请求的图。请参见这 5 个步骤的以下说明。

  1. 打印客户机提交打印请求。

  2. 在打印客户机上处理打印请求。

  3. 打印请求转到打印服务器。

  4. 打印请求转到打印机。

  5. 在打印机上生成打印输出。

使用打印客户机

打印客户机是可将打印请求发送到打印服务器的系统。

下图突出显示了打印过程中,用户从打印客户机提交打印请求的这部分过程。

图 1–2 用户从打印客户机提交打印请求

显示用户提交打印请求时所发生情况的图。请参见下节有关此 5 步的说明。

LP 打印服务使用的打印客户机过程

下图说明从用户启动请求开始直到完成打印请求打印的打印请求过程。

图 1–3 打印客户机过程的概述

显示分 5 个步骤的打印客户机过程的图。请参见这 5 个步骤的以下说明。

  1. 用户从打印客户机提交打印请求。

  2. 打印命令检查打印配置资源的分层结构,以确定将打印请求发送到的位置。

  3. 打印命令将打印请求直接发送到适当的打印服务器。打印服务器可以是接受 Berkley 软件分发 (Berkley Software Distribution, BSD) 打印协议的任何服务器,其中包括 System V 发行版 4 (System V Release 4, SVR4) 或 LP 打印服务器和基于 BSD LPD 的打印服务器,以及接受 IPP 的服务器。

  4. 打印服务器将打印请求发送到适当的打印机。

  5. 完成对打印请求的打印。

本地打印的工作原理

打印请求会沿用客户机和服务器是单独系统时的路径。请求始终沿用相同的路径从客户机流向服务器。

下图说明了用户提交请求以在本地打印机(它是连接到用户系统的打印机)上打印 PostScript 文件时所发生的情况。本地系统上的 lpsched 守护进程会进行所有的处理。

此处理可能包括以下内容:

打印机接口程序可执行以下操作:

图 1–4 本地打印过程

周围的文字对图进行了描述。

LP 打印服务如何管理文件和调度本地打印请求

LP 打印服务有一个名为 lpsched 的调度程序守护进程。该调度程序守护进程使用有关打印机设置和配置的信息更新 LP 系统文件。

lpsched 守护进程调度打印服务器上的所有本地打印请求,如下图所示。用户可以从应用程序或从命令行发出请求。此外,调度程序还会跟踪打印服务器上打印机和过滤器的状态。打印机完成请求后,调度程序会调度打印服务器上排在队列中的下一个请求(如果存在下一个请求)。

图 1–5 LP 打印服务打印调度过程

周围的文字对图进行了描述。

在不重新引导系统的情况下,您就可以使用 svcadm disable application/print/server 命令停止调度程序。然后,使用 svcadm enable application/print/server 命令重新启动调度程序。每个系统的调度程序会管理通过 lp 命令向系统发出的请求。

远程打印的工作原理

下图说明了打印客户机上的用户将打印请求提交到基于 LPD 的打印服务器时发生的情况。该命令会打开一个连接,并直接处理它自己与打印服务器的通信。

显示打印客户机将打印请求发送到基于 LPD 的打印服务器(在此接受打印请求、对打印请求进行假脱机处理,并安排打印)的图。

下图显示了基于 LPD 的打印客户机如何将打印请求提交到打印服务器。lpd 守护进程可处理打印请求的本地部分和与打印服务器的连接。在打印服务器上,inetd 进程会等待网络打印请求,并启动协议适配器为该请求提供服务。协议适配器与 lpsched 守护进程(处理打印服务器上的请求)进行通信。

图 1–6 远程打印过程

周围的文字对图进行了描述。

下图说明了打印客户机上的用户将打印请求提交到 Solaris 打印服务器时发生的情况。打印客户机上的打印命令通过直接与打印服务器进行通信来处理每个打印请求的本地部分。

图 1–7 如何处理打印请求

周围的文字对图进行了描述。

打印服务器上的 inetd 进程可以监视网络打印请求,并启动协议适配器,以便与打印服务器上处理打印请求的 lpsched 守护进程进行通信。

有关打印任务的参考信息

表 1–3 打印任务

打印任务 

涉及的主题 

更多信息 

设置并管理网络打印协议。 

设置 IPP、RFC-1179 和 SMB 网络打印协议。 

第 3 章

使用 Solaris Print Manager 设置并管理打印机。 

设置打印服务器、添加直接连接的打印机和网络连接的打印机,以及添加打印客户机。 

第 4 章

使用 LP 打印命令设置并管理打印机。 

设置打印服务器、添加直接连接的打印机和网络连接的打印机,以及添加打印客户机。 

第 5 章

管理打印机。 

管理打印机和打印请求。 

第 6 章

自定义打印服务和打印机。 

自定义打印服务。管理字符集、打印表单、打印过滤器和打印字体。 

第 7 章

网络上的管理打印机。 

管理使用 IPP、RFC-1179 和 SMB 网络协议的打印机和打印作业。 

第 9 章

使用 PPD 文件管理器 (ppdmgr) 管理 PPD 文件。

使用 ppdmgr 实用程序管理系统上的 PPD 文件。

第 11 章