1. 关于在 Oracle Solaris 操作系统中进行打印的简介
4. 使用 Oracle Solaris Print Manager 设置和管理打印机(任务)
12. 在 Oracle Solaris 操作系统中打印(参考)
表 7-1 定制 LP 打印服务(任务列表)
|
虽然 LP 打印服务旨在提供充分的灵活性,以处理大多数打印机和打印需求,但是 LP 打印服务并不能处理每种可能的情况。您可能有 LP 打印服务的标准功能无法满足的打印请求。或者,您的打印机可能无法很好地适应 LP 打印服务处理打印机的方式。
您可以采用以下方式定制 LP 打印服务:
调整打印机的端口特征。
调整 terminfo 数据库。
定制打印机接口程序。
创建打印过滤器。
定义表单。
由 LP 打印服务设置的打印机端口特征必须与打印机通信设置兼容。如果 LP 打印服务提供的缺省打印机端口设置对打印机不起作用,请参阅生产商提供的打印机手册,以确定打印机要求 LP 打印服务进行哪些设置。使用 stty 命令可以设置和显示打印机通信设置。
表 7-2 LP 打印服务使用的缺省 stty 设置
|
角色包含授权和具有特权的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的"配置 RBAC(任务列表)"。
# lpadmin -p printer-name -o "stty=options"
# lpstat -p printer-name -l
示例 7-1 调整打印机的端口特征
此示例说明如何设置打印机 luna 的端口特征。parenb 选项启用奇偶校验/生成。parodd 选项设置奇数奇偶校验生成。cs7 选项将字符大小设置为 7 位。
# lpadmin -p luna -o "stty='parenb parodd cs7'"
示例 7-2 设置终端波特率
此示例说明如何将打印机 venus 的终端波特率设置为 19200。
# lpadmin -p venus -o "stty=19200"
LP 打印服务使用接口程序和 terminfo 数据库,初始化每台打印机并建立以下设置:
选定的页面大小
字符间距
行间距
字符集
每台打印机在 terminfo 数据库中使用短名称标识。terminfo 数据库要求的短名称与用于设置 TERM shell 变量的名称完全相同。此名称也是在设置打印机时指定的打印机类型。例如,不同类型 PostScript 打印机的项位于 /usr/share/lib/terminfo/P 目录中。SunOS 软件发行版提供的缺省项是 PS(用于 PostScript)和 PSR(用于 PostScript Reverse)。
如果找不到打印机的 terminfo 项,仍可以通过 LP 打印服务使用打印机,但不会自动选择页面大小、间距和字符集。但是,可能无法使每个打印请求的打印机设置保持为正确的模式。
如果不存在与您的打印机类型对应的 terminfo 项,并且您希望以正确模式设置该打印机,则可以执行以下操作之一:
定制用于打印机的接口程序。
向 terminfo 数据库中添加项。
terminfo 数据库中的终端或打印机项包含并定义了数百个项。但 LP 打印服务只使用其中不到 50 个项。有关打印机所需的 terminfo 项目的更多信息,请参见打印机必需的 terminfo 项。
注 - 在创建打印机的 terminfo 项之前,请确保现有的 terminfo 项都不支持该打印机。为此,请尝试用类似打印机的项设置该打印机(如果存在类似打印机)。
角色包含授权和具有特权的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的"配置 RBAC(任务列表)"。
/usr/share/lib/terminfo 目录中的目录包含所有有效 terminfo 项。将这些项作为选择打印机名称的指南。
表 12-6 给出了必须在 terminfo 项中定义以将新打印机添加到 LP 打印服务的项。有关 terminfo 数据库结构的更多详细信息,请参见 terminfo(4) 手册页。
要开始编写新的 terminfo 项,请使用 infocmp 命令将现有的 terminfo 项保存到文件中。如果有一个 terminfo 项与要创建的项类似,则此命令将非常有用。例如,以下命令将 ps 项保存到 ps_cust 文件(它将成为新的 terminfo 项)。
infocmp ps > ps_cust
# tic terminfo_entry
其中 terminfo-entry 变量是您创建的 terminfo 项文件。
如果标准打印机接口程序不支持您的打印机,则可以提供您自己的打印机接口程序。可以复制标准程序,然后指示 LP 打印服务将它用于指定的打印机。首先,需要了解标准程序中的内容。下一节将介绍标准程序。
打印机接口程序应执行以下任务:
初始化打印机端口(如有必要)。标准打印机接口程序使用 stty 命令初始化打印机端口。
初始化打印机硬件。标准打印机接口程序从 terminfo 数据库和 TERM shell 变量接收控制序列。
打印标题页(如有必要)。
根据打印请求指定的份数进行打印。
注意 - 如果打印机接口程序是早于发行版 3.2 的 UNIX System V 发行版中的打印机接口程序,则它可能适用于 SunOS 5.10 或兼容的 LP 打印服务。但是,在 SunOS 5.10 或兼容的 LP 打印服务中有几个 -o 选项已标准化。这些选项会传递到每个打印机接口程序。它们可能会干扰旧接口使用的具有类似名称的选项。 |
LP 打印服务(而非打印机接口程序)负责打开打印机端口。打印机端口作为标准输出提供给打印机接口程序。此外,对于打印机接口程序,打印机会标识为“控制终端”,以便在端口“挂起”时将 SIGHUP 信号发送到打印机接口程序。
标准(模型)打印机接口程序是 /usr/lib/lp/model/standard。LP 打印服务使用该程序设置下表所示的打印缺省值。
表 7-3 缺省的打印机端口特征
|
如果需要更改终端特征(如波特率或输出选项),请查找标准打印机接口程序中以下列注释开始的部分:
## Initialize the printer port
有关更多信息,请参见调整打印机的端口特征。
当打印完成时,接口程序应以显示打印作业状态的代码退出。退出代码是打印机接口程序中的最后一项。
表 7-4 打印机接口程序的退出代码
|
如果程序以代码 129 退出,则提醒 root 打印机出现了故障。在清除故障之后,LP 打印服务也必须从头开始重新打印请求。如果不希望重新打印整个请求,则可以使接口程序将故障消息发送到 LP 打印服务。(首先等待清除故障。)在清除故障后,接口程序可以恢复打印文件。完成打印时,打印机接口程序可以提供退出代码 0,就好像从未出现故障。此方法的其他优点: 接口程序可以检测到自动清除故障的时间。这样,管理员就不需要重新启用打印机。
可以使用 lp.tell 程序将故障消息发送到 LP 打印服务。此程序由标准打印机接口代码中的 LPTELL shell 变量引用。此程序接收标准输入并将它发送到 LP 打印服务。LP 打印服务将标准输入置于警告管理员打印机出现故障的消息中。如果 lp.tell 程序的标准输入为空,则它不启动警报。有关如何使用 lp.tell 程序的示例,请查看紧跟以下注释的标准打印机接口代码:
# Set up the $LPTELL program to capture fault messages here
如果使用特殊的退出代码 129 或 lp.tell 程序,则打印机接口程序无需禁用打印机本身。接口程序可以直接禁用打印机。但是,这样做将覆盖故障报警机制。仅当 LP 打印服务检测到打印机出现故障,而且特殊的退出代码和 lp.tell 程序是其主要检测工具时,才发送警报。
如果 LP 打印服务必须随时中断文件的打印,则它将使用信号 TERM(陷阱号 15)中止接口程序。有关更多信息,请参见 kill(1) 和 signal(3C) 手册页。如果打印机接口程序由于接收到任何其他信号而中止,则 LP 打印服务会假定以后的打印请求不受影响。因此,LP 打印服务继续使用打印机。LP 打印服务将通知提交请求的用户,说明请求尚未成功完成。
首次调用接口时,将忽略信号 HUP、INT、QUIT 和 PIPE(陷阱号分别为 1、2、3 和 13)。标准接口更改此缺省行为,以便在适当的时间捕获信号。标准接口将接收到这些信号解释为打印机出现问题的警告。当标准接口收到信号时,它将发出故障警报。
可以创建定制的打印机接口程序,并在打印服务器上使用它来代替标准打印机接口程序。为此,请使用 lpadmin 命令为特定打印机向 LP 打印服务注册该程序。
# cp /var/spool/lp/model/standard custom-interface
请参阅标准打印机接口程序中对程序的说明,以确定需要进行哪些更改。
# lpadmin -p printer-name -i custom-interface
指定使用定制的打印机接口程序的打印机。
是定制的打印机接口程序的名称。
已向 LP 打印服务注册定制的打印机接口程序,该程序将在用户提交打印请求时由该打印机使用。
示例 7-3 设置定制的打印机接口程序
此示例说明如何为打印机 luna 设置名为 custom 的定制打印机接口程序。
# lpadmin -p luna -i custom
示例 7-4 复制定制的打印机接口程序
此示例说明如何将定制的打印机接口程序从打印机 venus 复制到打印机 asteroid。
# lpadmin -p asteroid -e venus