本章提供有关自定义 LP 打印服务和打印机的信息。
任务 |
说明 |
参考 |
---|---|---|
添加不支持打印机的 terminfo 项。 |
向 terminfo 数据库中添加项,以初始化不支持的打印机并建立必需的设置。 | |
设置自定义的打印机接口程序。 |
如果有标准打印机接口程序不支持的打印机,则可以提供自定义的打印机接口程序。 | |
调整打印机的端口特征。 |
使 LP 打印服务设置的打印机端口特征与打印机通信设置兼容。 |
虽然 LP 打印服务旨在提供充分的灵活性,以处理大多数打印机和打印需求,但是 LP 打印服务并不能处理每种可能的情况。您可能有 LP 打印服务的标准功能无法满足的打印请求。或者,您的打印机可能无法很好地适应 LP 打印服务处理打印机的方式。
您可以采用以下方式自定义 LP 打印服务:
调整打印机的端口特征。
调整 terminfo 数据库。
自定义打印机接口程序。
创建打印过滤器。
定义表单。
由 LP 打印服务设置的打印机端口特征必须与打印机通信设置兼容。如果 LP 打印服务提供的缺省打印机端口设置对打印机不起作用,请参阅生产商提供的打印机手册,以确定打印机要求 LP 打印服务进行哪些设置。使用 stty 命令可以设置和显示打印机通信设置。
表 7–1 LP 打印服务使用的缺省 stty 设置
选项 |
说明 |
---|---|
-9600 |
将波特率设置为 9600 |
-cs8 |
设置 8 位字节 |
-cstopb |
为每个字节发送一个停止位 |
-parity |
不生成奇偶校验 |
-ixon |
启用 XON/XOFF(也称为 START/STOP 或 DC1/DC3) |
-opost |
使用此表中后面的所有设置执行“输出后处理” |
-olcuc |
不将小写映射为大写 |
-onlcr |
将换行符更改为回车/换行符 |
-ocrnl |
不将回车更改为换行符 |
-onocr |
即使在 0 列也输出回车 |
-n10 |
在换行符之后不提供延迟 |
-cr0 |
在回车之后不提供延迟 |
-tab0 |
在制表符之后不提供延迟 |
-bs0 |
在退格符之后不提供延迟 |
-vt0 |
在垂直制表符之后不提供延迟 |
-ff0 |
在换页符之后不提供延迟 |
成为超级用户或同等角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。
# lpadmin -p printer-name -o "stty=options" |
验证是否已更改打印机的端口特征。
# lpstat -p printer-name -l |
此示例说明如何设置打印机 luna 的端口特征。parenb 选项启用奇偶校验/生成。parodd 选项设置奇数奇偶校验生成。cs7 选项将字符大小设置为 7 位。
# lpadmin -p luna -o "stty='parenb parodd cs7'" |
此示例说明如何将打印机 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(任务列表)”。
确定打印机 terminfo 项的名称。
/usr/share/lib/terminfo 目录中的目录包含所有有效 terminfo 项。将这些项作为选择打印机名称的指南。
为打印机创建 terminfo 项文件。
表 12–6 给出了必须在 terminfo 项中定义以将新打印机添加到 LP 打印服务的项。有关 terminfo 数据库结构的更多详细信息,请参见 terminfo(4) 手册页。
要开始编写新的 terminfo 项,请使用 infocmp 命令将现有的 terminfo 项保存到文件中。如果有一个 terminfo 项与要创建的项类似,则此命令将非常有用。例如,以下命令将 ps 项保存到 ps_cust 文件(它将成为新的 terminfo 项)。
infocmp ps > ps_cust
将 terminfo 项文件编译到 terminfo 数据库中。
# tic terminfo_entry |
其中 terminfo-entry 变量是您创建的 terminfo 项文件。
检查新的 terminfo 项文件是否在 /usr/share/lib/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–2 缺省的打印机端口特征
特征 |
缺省设置 |
---|---|
缺省过滤器 |
None |
字符间距 |
None |
行间距 |
None |
页宽 |
None |
页长 |
None |
字符集 |
None |
stty 选项 |
9600 cs8 -cstopb -parenb -parodd ixon -ixany opost -olcuc onlcr -ocrnl -onocr -onlret -ofill nl0 cr0 tab0 bs0 vt0 ff0 |
0 |
如果需要更改终端特征(如波特率或输出选项),请查找标准打印机接口程序中以下列注释开始的部分:
## Initialize the printer port
有关更多信息,请参见调整打印机的端口特征。
当打印完成时,接口程序应以显示打印作业状态的代码退出。退出代码是打印机接口程序中的最后一项。
表 7–3 打印机接口程序的退出代码
退出代码 |
LP 打印服务的解释 |
---|---|
0 |
打印请求已成功完成。如果打印机曾出现故障,则该故障已清除。 |
1 - 127 |
打印请求时遇到了问题。例如,有太多非打印字符,或者请求超出打印机功能。LP 打印服务通知提交请求的人员,在打印该请求时出现了错误。此错误不影响将来的打印请求。如果打印机曾出现故障,则该故障已清除。 |
128 |
此代码是保留的,供 LP 打印服务使用。接口程序不得以此代码退出。 |
129 |
在打印请求时打印机出现故障。此故障不影响将来的打印请求。如果打印机的故障恢复指示 LP 打印服务等待管理员更正问题,则 LP 打印服务禁用打印机。如果故障恢复是继续打印,则 LP 打印服务不禁用打印机。但是,打印服务将在几分钟后再次尝试打印。 |
>129 |
这些代码是保留的,供 LP 打印服务使用。接口程序不得以此范围内的代码退出。 |
如果程序以代码 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 打印服务注册该程序。
在打印服务器上以超级用户 lp 或同等角色的身份登录。
# cp /var/spool/lp/model/standard custom-interface |
(可选的)如果已具有自定义的打印机接口程序,请转到步骤 5。
更改标准打印机接口程序的副本以满足您的需要。
请参阅标准打印机接口程序中对程序的说明,以确定需要进行哪些更改。
为特定打印机设置自定义的打印机接口程序。
# lpadmin -p printer-name -i custom-interface |
指定使用自定义的打印机接口程序的打印机。
是自定义的打印机接口程序的名称。
已向 LP 打印服务注册自定义的打印机接口程序,该程序将在用户提交打印请求时由该打印机使用。
验证是否在 /etc/lp/printers/printer-name/configuration 文件中添加了自定义的打印机接口程序。
此示例说明如何为打印机 luna 设置名为 custom 的自定义打印机接口程序。
# lpadmin -p luna -i custom |
此示例说明如何将自定义的打印机接口程序从打印机 venus 复制到打印机 asteroid。
# lpadmin -p asteroid -e venus |