第6 章• 自定义LP 打印服务(任务) 143
terminfo 数据库中的终端或打印机项包含并定义了数百个项。但LP 打印服务只使用其中不
到50 个项。下表列出了打印机的必需terminfo 项。
表6–2 打印机的必需terminfo 项(布尔值)
项说明
布尔值:
cpix 更改字符间距会更改分辨率
daisy 打印机需要一个用于更改字符集的运算符
lpix 更改行间距会更改分辨率
表6–3 打印机的必需terminfo 项(数字)
项说明
数字:
bufsx 打印之前缓冲的字节数
cols 一行中的列数
cps 平均打印速度(字符/秒)
it 将制表符初始设置为n 个空格
lines 每页的行数
orc 水平分辨率,以字符为单位
orhi 水平分辨率,以英寸为单位
orl 垂直分辨率,以行为单位
orvi 垂直分辨率,以英寸为单位
表6–4 打印机的必需terminfo 项(字符串)
项说明
字符串:
chr 更改水平分辨率
cpi 更改每英寸字符数
cr 回车
csnm 字符集名称列表
cudl 回车下移一行
为不支持的打印机添加terminfo 项
144 系统管理指南:高级管理• 2006 年7 月
表6–4 打印机的必需terminfo 项(字符串) (续)
项说明
cud 回车下移n 行
cuf 回车右移n 列
cvr 更改垂直分辨率
ff 弹出页面
hpa 水平绝对位置
ht 按Tab 键跳至下一个8 空格制表位
if 初始化文件名
iprog 初始化程序的路径名
is1 打印机初始化字符串
is2 打印机初始化字符串
is3 打印机初始化字符串
lpi 更改每英寸行数
mgc 清除所有页边距(上、下和左右)
rep 将一个字符重复n 次
rwidm 禁用倍宽打印
scs 选择字符集
scsd 开始定义字符集
slines 将页长设置为每页n 行
smgl 设置当前列的左页边距
smglp 设置左页边距
smgr 设置当前列的右页边距
smgrp 设置右页边距
smglr 同时设置左页边距和右页边距
msgt 设置当前行的上页边距
smgtp 设置上页边距
smgb 设置当前行的下页边距
smgbp 设置下页边距
smgtb 同时设置上页边距和下页边距
为不支持的打印机添加terminfo 项
第6 章• 自定义LP 打印服务(任务) 145
表6–4 打印机的必需terminfo 项(字符串) (续)
项说明
swidm 启用倍宽打印
vpa 将垂直位置设置为绝对位置
如何为不支持的打印机添加terminfo 项
注– 在创建打印机的terminfo 项之前,请确保现有的terminfo 项都不支持该打印机。为
此,请尝试用类似打印机的项设置该打印机(如果存在类似打印机)。
以超级用户身份lp 登录,或承担打印服务器上的等效角色。
确定打印机terminfo 项的名称。
/usr/share/lib/terminfo 目录中的目录包含所有有效terminfo 项。将这些项作为选择打印
机名称的指南。
为打印机创建terminfo 项文件。
表6–2 列出了必须在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 命令初始化打印机端
口。
1
2
3
4
5
自定义的打印机接口程序
146 系统管理指南:高级管理• 2006 年7 月
初始化打印机硬件。标准打印机接口程序从terminfo 数据库和TERM shell 变量接收控制
序列。
打印标题页(如有必要)。
根据打印请求指定的份数进行打印。
注意– 如果打印机接口程序是早于发行版3.2 的UNIX SystemV发行版中的打印机接口程
序,则它可能适用于SunOS 5.10 或兼容的LP 打印服务。但是,在SunOS 5.10 或兼容的LP
打印服务中有几个-o 选项已标准化。这些选项将被传递到每个打印机接口程序。它们可能
会干扰旧接口使用的具有类似名称的选项。
LP 打印服务(而非打印机接口程序)负责打开打印机端口。打印机端口作为标准输出提供
给打印机接口程序。此外,对于打印机接口程序会将打印机标识为“控制终端”,以便在
端口“挂起”时将SIGHUP 信号发送到打印机接口程序。
标准打印机接口程序
标准(模型)打印机接口程序是/usr/lib/lp/model/standard。LP 打印服务使用该程序设
置下表所示的打印缺省值。
表6–5缺省的打印机端口特征
特征缺省设置
缺省过滤器无
字符间距无
行间距无
页宽无
页长无
字符集无
stty 选项9600 cs8 -cstopb -parenb -parodd ixon -ixany opost -olcuc onlcr
-ocrnl -onocr -onlret -ofill nl0 cr0 tab0 bs0 vt0 ff0
退出代码0
自定义stty 模式
如果需要更改终端特征(如波特率或输出选项),请查找标准打印机接口程序中以下列注
释开始的部分:
## Initialize the printer port
有关更多信息,请参见第142 页中的“调整打印机的端口特征”。
自定义的打印机接口程序
第6 章• 自定义LP 打印服务(任务) 147
退出代码
当打印完成时,接口程序应以显示打印作业状态的代码退出。退出代码是打印机接口程序
中的最后一项。
下表显示退出代码以及LP 打印服务如何解释它们。
表6–6打印机接口程序的退出代码
退出代码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 程序是其主要检测工具时,才发送警报。
自定义的打印机接口程序
148 系统管理指南:高级管理• 2006 年7 月
如果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
更改标准打印机接口程序的副本以满足您的需要。
请参阅第147 页中的“标准打印机接口程序”中对程序的描述,以确定需要进行哪些更
改。
为特定打印机设置自定义的打印机接口程序。
# lpadmin -p printer-name -i custom-interface
-p 指定使用自定义的打印机接口程序的打印机。
-i 是自定义的打印机接口程序的名称。
已向LP 打印服务注册自定义的打印机接口程序,该程序将在用户提交打印请求时由该打印
机使用。
验证是否在/etc/lp/printers/printer-name/configuration 文件中添加了自定义的打印机接
口程序。
1
2
3
4
5
6
自定义的打印机接口程序
第6 章• 自定义LP 打印服务(任务) 149
设置自定义的打印机接口程序
此示例说明如何为打印机luna 设置名为custom 的自定义打印机接口程序。
# lpadmin -p luna -i custom
复制自定义的打印机接口程序
此示例说明如何将自定义的打印机接口程序从打印机venus 复制到打印机asteroid。
# lpadmin -p asteroid -e venus
创建新的打印过滤器
LP 打印服务在必须打印一种打印机无法解释的类型的文件时,都会使用过滤器。创建新的
打印过滤器很困难,而且通常需要进行大量的试验。定义新打印过滤器的过程包括以下两
步:
编写打印过滤器程序
创建打印过滤器定义
根据需要,打印过滤器可以很简单或很复杂。过滤器包含输入类型、输出类型和提供用于
处理过滤器内命令行参数语言的复杂选项。
如果具有非PostScript 打印机,则必须根据需要创建和添加打印过滤器。首先,需要了解打
印过滤器的内容,以及过滤器程序必须满足的要求。
编写打印过滤器程序
LP 打印服务在/usr/lib/lp/postscript 目录中提供过滤器程序。这些过滤器涵盖了大多数
PostScript 打印情况(目标打印机要求数据为PostScript 格式)。打印过滤器程序必须是二进
制可执行文件。
过滤器的类型
有以下两种类型的打印过滤器:快速过滤器和慢速过滤器。
快速过滤器不需要大量的处理时间来准备要打印的文件。它们在运行时必须可以访问打印
机。为了能够检测到打印机故障,打印过滤器必须是快速过滤器。将PRINTER 关键字用作过
滤器选项的任何过滤器都必须作为快速过滤器进行安装。
慢速过滤器需要大量的处理时间来准备要打印的文件。它们在运行时不需要访问打印机。
慢速过滤器在后台运行,因此它们不会停止打印机,从而允许打印不需要慢速过滤的其他
文件。
示例6–3
示例6–4
创建新的打印过滤器
150 系统管理指南:高级管理• 2006 年7 月
转换文件
LP 打印服务使用打印过滤器将文件从一种内容类型转换为其他内容类型。可以为每个打印
机指定接受的文件内容类型。用户在提交打印请求时指定文件内容类型。然后,LP 打印服
务查找可以打印该内容类型文件的打印机。因为许多应用程序可以生成用于各种打印机的
文件,所以此方法通常已经可以满足需要。但是,一些应用程序可能会生成无法在任何可
用打印机上打印的文件。
LP 打印服务每次收到打印机无法直接接受其格式的文件类型的打印请求时,都会尝试将打
印请求的内容类型与可用的(或指定的)打印机的内容类型进行匹配。如果存在匹配项,
则可以直接将文件发送到打印机,而不进行过滤。如果找不到匹配项,或者内容类型指定
需要使用过滤器,则LP 打印服务尝试将文件的内容类型与可用过滤器的输入内容类型进行
匹配。此外,LP 打印服务尝试将过滤器的输出类型与打印机的内容类型进行匹配。当找到
合适的过滤器时,将通过过滤器传递打印请求。
处理特殊打印模式
打印过滤器处理特殊打印模式并请求打印特定页。打印要求自定义过滤器的打印请求的任
何特征时,需要特殊的打印模式。过滤器处理以下特征:
打印机类型
字符间距
行间距
页长
页宽
要打印的页数
字符集
表单名称
份数
LP 打印服务提供这些特征的缺省设置。但是,打印过滤器可以更有效地处理某些特征。例
如,一些打印机可以比LP 打印服务更有效地处理多个副本。因此,在这种情况下,可以为
多副本页面控制提供过滤器。
检测打印机故障
每个打印机都有自己的方法来检测打印机故障和将故障信号传输到LP 打印服务。LP 打印服
务仅检查在打印时是否存在挂起(载体丢失)和过长的延迟。
一些打印机可以检测很多故障,并可以发送描述故障原因的消息。其他打印机通过使用除
载体丢失信号或关闭数据流信号之外的信号来指示故障。解释此附加的打印机故障信息需
要过滤器。
过滤器还可以挂起打印请求,等待清除打印机故障,然后恢复打印。借助此功能,不需要
全部重新打印已中断的打印请求。只有知道打印机所用控制序列的过滤器才能确定文件中
的分页位置。因此,只有这样的过滤器才可以在清除故障之后找到文件中应开始打印的位
置。
创建新的打印过滤器
第6 章• 自定义LP 打印服务(任务) 151
当打印过滤器生成消息时,那些消息由LP 打印服务处理。如果启用了警报,则LP 打印服
务将警报发送给系统管理员。有关详细信息,请参见第95 页中的“设置打印机故障警报
”。
打印过滤器程序的要求
无论打印过滤器简单或复杂,都必须满足以下要求:
过滤器应从其标准输入获取文件内容,并将转换后的文件发送到标准输出。
如果程序引用外部文件,则不能将它用作过滤器。可能很想将诸如troff、nroff 之类的
程序或类似的字处理程序用作过滤器。LP 打印服务无法从过滤器程序识别对其他文件的
引用(称为包含文件)。由于troff 和nroff 程序允许包含文件,因此它们在用作过滤
器时可能会失败。如果程序需要其他文件才能完成其处理,则不应将该程序用作过滤
器。
过滤器不应依赖于用户通常无法访问的文件。如果过滤器在由用户直接运行时失败,则
它在由LP 打印服务运行时也将失败。
慢速过滤器可以将有关文件中错误的消息发送到标准错误。快速过滤器则不会发送。收
集慢速过滤器中的错误消息,并将其发送给提交打印请求的用户。
如果慢速过滤器由于收到信号而停止,则停止打印请求,并通知提交请求的用户。同
样,如果慢速过滤器以非零退出代码退出,则停止打印请求并通知用户。快速过滤器的
退出代码的处理方式不同。
如果希望过滤器检测打印机故障,则还应该满足以下要求:
如果可能,过滤器应先等待清除故障再退出。清除故障后,过滤器还应在打印停止时所
在页的顶部继续打印。如果不希望使用延续功能,则LP 打印服务将在向管理员报警之
前停止过滤器。
识别出故障后,过滤器立即应将打印机故障消息发送到其标准错误。过滤器不必退出,
但是可以等待清除故障。
过滤器不该将有关文件中错误的消息发送到标准错误。这些消息应包括在用户可从中进
行读取的标准输出中。
如果文件已完成打印(即使文件中的错误阻止它正确打印),则过滤器应以零退出代码
退出。
仅当打印机故障阻止了过滤器完成打印请求时,过滤器才应以非零退出代码退出。
在添加到过滤器表时,必须将过滤器作为快速过滤器添加。
创建打印过滤器定义
打印过滤器定义通知LP 打印服务有关过滤器、要运行的打印过滤器程序、打印过滤器执行
的转换种类等的信息。在/etc/lp/fd 目录中提供了一组过滤器描述符文件。这些文件描述
过滤器的特征(例如,快速过滤器或慢速过滤器),并指向过滤器程序(例如
/usr/lib/lp/postscript/postdaisy)。
创建新的打印过滤器
152 系统管理指南:高级管理• 2006 年7 月
定义新的打印过滤器时,必须创建打印过滤器定义。打印过滤器定义包含LP 打印服务所用
的以下信息:
要运行的过滤器程序的名称
过滤器程序接受的输入类型
过滤器程序生成的输出类型
过滤器程序可以向其发送作业的打印机类型
过滤器程序可以向其发送作业的特定打印机的名称
过滤器类型(快速或慢速)
选项
可以将特征作为直接输入键入lpfilter 命令中。还可以创建一个指定过滤器特征的文件,
并将该文件的名称作为lpfilter 命令参数的输入。这样的文件称为过滤器描述符文件,应
位于/etc/lp/fd 目录中。这些文件本身不是过滤器。但它们指向过滤器。
不管是在文件中存储信息,还是直接在命令行上键入信息,请使用以下格式:
Command: command-pathname [options]
Input types: input-type-list
Output types: output-type-list
Printer types: printer-type-list
Printers: printer-list
Filter type: fast or slow
Options: template-list
注– 如果为除Options 之外的任何过滤器特征提供多个定义(即多行),则打印服务仅使用
第二个定义。
信息可以按任何顺序进行排列,并不是所有信息都是必需的。如果不指定值,则缺省情况
下赋予下表所示的值。这些值不是非常有用,这就是应指定值的原因。
表6–7 lpfilter 命令的缺省值
项缺省值
Input types(输入类型) any
Output type(输出类型) any
Printer types(打印机类型) any
Printers(打印机) any
创建新的打印过滤器
第6 章• 自定义LP 打印服务(任务) 153
表6–7 lpfilter 命令的缺省值(续)
项缺省值
Filter type(过滤器类型) slow
lpfilter 命令
使用过滤器程序的全路径。如果存在程序始终需要的任何固定选项,则此处包括所有选
项。
lpfilter 输入类型参数
输入类型是打印过滤器可以处理的文件内容类型的列表。LP 打印服务确实限制输入类型的
数目,但是大多数过滤器只能接受一种输入类型。有几种文件类型非常类似,因此过滤器
可以处理它们。可以使用喜欢的任何名称,但名称最多只能包含14 个字母数字字符和短划
线。不要将下划线用作输入类型名称的一部分。
LP 打印服务使用这些名称将过滤器与文件类型进行匹配,因此请遵循一致的命名约定。例
如,如果多个过滤器可以接受相同的输入类型,则在为每个过滤器指定该输入类型时,请
使用相同名称。将这些名称通知用户,以便他们在提交文件进行打印时知道如何标识文件
类型。
lpfilter 输出类型参数
输出类型是过滤器可以作为输出生成的文件类型的列表。对于每种输入类型,过滤器将生
成一种输出类型。但是,输出类型可能随作业的不同而不同。输出类型的名称不能超过14
个字母数字字符和短划线。
输出类型的名称应与可用(本地或远程)打印机的类型匹配,或者与其他过滤器处理的输
入类型匹配。如果LP 打印服务发现转换文件需要用不同的过滤器过滤若干遍,则它将这些
过滤器组合在一个shell 流水线中。您可能不需要此复杂级别,但LP 打印服务具有此复杂处
理功能。请尝试找出这样一组过滤器:它们将用户可能希望打印的所有不同文件作为输入
类型,并将那些文件直接转换为打印机可以处理的文件类型。
lpfilter 打印机类型参数
打印机类型是打印过滤器可以将文件转换成的打印机类型的列表。对于大多数打印机和过
滤器,可以将过滤器定义的此部分留空,因为此列表与输出类型的列表完全相同。但是,
此列表可能是不同的。例如,为达到初始化目的,可能具有仅包含一种打印机类型的打印
机。但是,该打印机可以识别几种不同的文件内容类型。在本质上,此打印机具有将各种
文件类型转换为它可以处理的过滤器类型的内部过滤器。因此,过滤器可能生成与打印机
可以处理的文件类型匹配的几种输出类型之一。应将打印过滤器标记为使用该打印机类
型。
作为另一个示例,您可能具有列为接受相同文件类型的两种不同型号的打印机。但是,由
于产品制造中的细微差异,一个打印机会偏离它所产生的结果。将打印机标记为不同的打
印机类型,比如说A和B,其中B 是偏离的打印机。创建一个调整文件的过滤器,以说明B
类型打印机产生的偏差。由于B 打印机类型才需要此过滤器,因此将此过滤器列为仅在B
类型打印机上起作用。
创建新的打印过滤器
154 系统管理指南:高级管理• 2006 年7 月
lpfilter 打印机参数
打印过滤器通常可以处理接受其输出的所有打印机,因此通常可以跳过过滤器定义的此部
分。
但是,可能具有一些不适合于过滤器生成的输出的打印机。例如,可能希望将一台打印机
专用于快速周转,仅将不需要过滤的文件发送到该打印机。对于需要先进行广泛过滤才能
打印的文件,可以使用类型相同的其他打印机。
lpfilter 过滤器类型参数
LP 打印服务可识别快速过滤器和慢速过滤器,如第150 页中的“过滤器的类型”中所述。
打印模式通过使用lp -y 命令调用的慢速过滤器必须运行在从其发出打印请求的系统上。LP
打印服务无法将模式值传递到打印服务器。但是,它可以将文件内容类型(在lp 命令的-T
选项之后指定)与打印服务器上的内容类型进行匹配。因此,如果要在打印服务器上激活
特殊模式,则必须指定允许LP 打印服务将输入类型和输出类型进行匹配的内容类型。
lpfilter 选项参数
选项指定如何将不同类型的信息转换为过滤器命令的命令行参数。此信息可以包括来自用
户的规范(通过打印请求)、打印机定义和用于处理请求的任何过滤器实现的规范。
使用模板定义打印过滤器选项
定义打印过滤器选项的信息源有13 个,其中每个信息源都由一个关键字表示。每个选项都
是在模板中定义的。模板是过滤器定义中的一条语句,定义要基于过滤器特征之一的值传
递到过滤器命令的选项。
在过滤器定义中指定的选项可以不包括任何关键字,包括全部13 个关键字或其任何子集。
此外,如果完整的过滤器定义需要多个定义,则可以多次定义单个关键字。下表包含可用
于在打印过滤器定义中定义选项的13 个关键字的描述。
表6–8打印过滤器选项的关键字
选项特征关键字模式示例
内容类型(输入) INPUT content-type troff
内容类型(输出) OUTPUT content-type postscript, impress
打印机类型TERM printer-type att495
打印机名称PRINTER printer-name lp1
字符间距CPI scaled-decimal 10
行间距LPI scaled-decimal 6
创建新的打印过滤器
第6 章• 自定义LP 打印服务(任务) 155
表6–8 打印过滤器选项的关键字(续)
选项特征关键字模式示例
页长LENGTH scaled-decimal 66
页宽WIDTH scaled-decimal 80
要打印的页数PAGES page-list 1-5,13-20
字符集CHARSET character-set finnish
表单名称FORM form-name invoice2
份数COPIES integer 3
特殊模式MODES mode landscape
打印过滤器定义可以包括多个模板。多个模板可在同一行上输入,由逗号分隔;也可在不
同的行上输入,在前面加Options:前缀。
模板的格式如下:keywordpattern = replacement
keyword 标识为过滤器的特定特征注册的选项类型。
pattern 是关键字的特定选项。
replacement 是关键字具有指定值时发生的情况。
作为如何为特定过滤器定义选项的示例,假定希望打印服务调度程序按照以下条件将打印
请求指定给过滤器:
如果要由过滤器生成的OUTPUT 类型为impress,则将-I 选项传递到过滤器。
如果要由过滤器生成的OUTPUT 类型为postscript,则将-P 选项传递到过滤器。
要指定这些条件,请将以下模板作为lpfilter 命令的选项提供:
Options: OUTPUT impress=-I, OUTPUT postscript=-P
如果Options 行变得太长,则将每个模板放置在单独的行上,如下所示:
Options: OUTPUT impress=-I
Options: OUTPUT postscript=-P
在这两个模板中,keyword 被定义为OUTPUT。在第一个模板中,模式为impress,
replacement 的值为--I。在第二个模板中,模式的值为postscript,替换的值为-P。
要确定为每种类型的模板(即,对于每个关键字的pattern 和replacement 参数)提供哪些
值,请考虑以下事项:
INPUT 模板的值来自需要由过滤器转换的文件内容类型。
OUTPUT 模板的值来自必须由过滤器生成的输出类型。
创建新的打印过滤器
156 系统管理指南:高级管理• 2006 年7 月
TERM 模板的值是打印机类型。
PRINTER 模板的值是将打印最终输出的打印机的名称。
CPI、LPI、LENGTH 和WIDTH 模板的值来自用户的打印请求、所用表单或打印机的缺省
值。
PAGES 模板的值是应打印的页的列表。通常,该值由用逗号分隔的页范围的列表组成。
每个页范围由用短划线分隔的数字对或单个数字组成。(例如,1–5,6,8,10 指示第1 页到
第5 页,以及第6、8 和10 页)。但是,在-P 选项中为打印请求提供的任何值在传递时
都保持不变。
CHARSET 模板的值是要使用的字符集的名称。
FORM 模板的值是由lp -f 命令(用于提交打印请求的命令)请求的表单的名称。
COPIES 模板的值是要打印的文件的份数。如果过滤器使用此模板,则LP 打印服务将它
打印的已过滤文件份数减少到一份。此“单个副本”包括由过滤器生成的多个副本。
MODES 模板的值来自lp -y 命令。由于用户可以指定几个-y 选项,因此MODES 模板可能具
有几个值。这些值按用户指定的从左到右的顺序进行应用。
replacement 选项显示应如何将模板的值提供给过滤器程序。此部分通常为文字选项,有时
包含占位符星号(*) 以显示将值传递到的位置。pattern 和replacement 选项还可以使用ed 命
令的正则表达式语法,进行从用户输入选项到过滤器选项的更复杂转换。支持ed 的所有正
则表达式语法,其中包括\( ... \) 和\n 结构。这些结构可以用于提取pattern 选项的部分
以复制到replacement 选项和& 选项(它可以用于将整个pattern 选项复制到replacement 选项
中)。有关更多信息,请参见ed(1) 手册页。
注– 如果在pattern 或replacement 选项中包括了逗号或等号(=),则在该字符前面添加反斜杠
(\)。在使用pattern 或replacement 选项时,将删除其中任何字符前面的反斜杠。
如何创建新的打印过滤器
以超级用户lp 身份登录,或承担打印服务器上的等效角色。
创建打印过滤器程序。
有关打印过滤器程序的信息,请参见第150 页中的“编写打印过滤器程序”。按照惯例,
PostScript 打印机的过滤器程序位于/usr/lib/lp/postscript 目录中。应将您创建的程序放
置在所选目录中的/usr/lib/lp 目录下。
创建打印过滤器定义。
有关打印过滤器定义的信息,请参见第152 页中的“创建打印过滤器定义”。应将打印过
滤器定义保存在文本文件中。按照惯例,过滤器定义位于/etc/lp/fd 目录中,并使用.fd
后缀进行标识。
将打印过滤器添加到打印服务器。
有关说明,请参见第123 页中的“如何添加打印过滤器”。
1
2
3
4
创建新的打印过滤器
第6 章• 自定义LP 打印服务(任务) 157
创建新的打印过滤器
此示例说明用于将N37 或Nlp 转换为simple 的打印过滤器定义。
Input types: N37, Nlp, simple
Output types: simple
Command: /usr/bin/col
Options: MODES expand = -x
Options: INPUT simple = -p -f
在此示例中,打印过滤器程序被命名为col。在将新的打印过滤器添加到打印服务器后,将
对用户的打印请求进行如下处理:
当用户键入以下命令时:
$ lp -y expand report.doc
使用以下参数运行打印过滤器程序以转换文件:
/usr/bin/col -x -p -f
当用户键入以下命令时:
$ lp -T N37 -y expand report.doc
使用以下参数运行打印过滤器程序以转换文件:
/usr/bin/col -x
通过将一种输入类型转换为其他输出类型来创建新的打印过滤器
此示例说明用于从troff 转换为PostScript 文件的打印过滤器定义。
Input types: troff
Output types: postscript
Printer types: PS
Filter type: slow
Command: /usr/lib/lp/postscript/dpost
Options: LENGTH * = -l*
示例6–5
示例6–6
创建新的打印过滤器
158 系统管理指南:高级管理• 2006 年7 月
Options: MODES port = -pp, MODES land = -pl
Options: MODES group \=\([1-9]\) = -n\l
在此示例中,过滤器程序被命名为dpost。过滤器程序采用一种输入类型troff,生成
postscript 输出,并适用于PS (PostScript) 类型的任何打印机。用户在要求页面方向为纵向
模式或横向模式时,只需要提供缩写port 或land。由于这些选项不是LP 打印服务所固有
的,因此用户必须通过使用lp -y 命令指定它们。
在将新的打印过滤器添加到打印服务器后,将对打印请求进行如下处理:
当用户键入以下命令来提交troff,以在类型为PS 的PostScript 打印机上打印(要求横
向且页长为60 行)时:
$ lp -T troff -o length=60 -y land -d luna ch1.doc
使用以下参数运行打印过滤器程序dpost 以转换文件:
/usr/lib/lp/postscript/dpost -l60 -pl
当用户输入以下命令时:
$ lp -T troff -y group=4 -d luna ch1.doc
使用以下参数运行打印过滤器程序dpost 以转换文件:
/usr/lib/lp/postscript/dpost -n4
创建新的打印机表单
要提供新表单时,必须定义其特征,方法是将有关九个必需的打印机特征(如页长和页
宽)的信息指定为lpforms 命令的输入。LP 打印服务使用此信息执行以下任务:
初始化打印机以便在表单上正确地完成打印
向系统管理员发送有关如何处理表单的提醒
可以任意选择表单名称,只要其包含的字母数字字符或任何下划线不超过14 个。该信息必
须使用以下格式:
Page length: scaled-number
Page width: scaled-number
Number of pages: integer
Line pitch: scaled-number
创建新的打印机表单
第6 章• 自定义LP 打印服务(任务) 159
Character pitch: scaled-number
Character set choice: character-set-name [,mandatory]
Ribbon color: ribbon-color
Comment:
informal notes about the form
Alignment pattern: [content-type] alignment pattern
可选字[,mandatory] 表示用户不能覆盖表单中的字符集选择。可以通过对齐模式提供
content-type(尽管此信息是可选的)。如果提供此值,则打印服务将根据需要使用它来确
定过滤和打印文件的方式。
除以下两个特例外,该信息可以按任何顺序出现:
Alignment pattern(它必须始终是最后一个)。
comment(它必须始终跟随带有Comment: 提示符的行)。
如果注释包含以关键短语(如Page length、Page width 等)开头的行,请在该行前面添
加> 字符,以便关键短语不位于该行的开头。将从注释中去除开头的> 字符,而且不显
示这些字符。
并不是所有的信息都必须提供。如果不指定值,则赋予下表中的缺省值。在运行lpforms 命
令之前,请收集有关此表中所述的新表单的以下信息。
表6–9打印机表单的缺省值
值缺省值说明
页长66 行表单的长度,或者多页表单中每页的长度。此
信息可以是行数或者以英寸或厘米为单位的大
小。
页宽80 列表单的宽度,以字符、英寸或厘米为单位。
页数1 多页表单中的页数。LP 打印服务将此数字与打
印过滤器(如果可用)一起使用,将对齐模式
限制为一个表单的长度。请参见下文中对对齐
模式的描述。如果任何过滤器都不可用,则LP
打印服务不截断输出。
行间距每英寸6 行对表单行间距的度量。行间距也称为行间空
行。字符间距是指两行之间的距离(从基线到
基线),由每英寸行数或每厘米行数度量。
字符间距每英寸10 个字符对表单字符间距的度量。这是字符之间的距
离,由英寸字符数或每厘米字符数度量。
创建新的打印机表单
160 系统管理指南:高级管理• 2006 年7 月
表6–9 打印机表单的缺省值(续)
值缺省值说明
字符集选择任何在使用此表单时应使用的字符集、打印轮或字
体盒。在使用此表单时,用户可以为自己的打
印请求选择其他字符集。或者,可以要求只使
用一个字符集。
色带颜色任何如果始终使用某一色带打印表单,则LP 打印服
务可以提供装载警报消息,以指示要使用的颜
色。
注释(无缺省值) 可能帮助用户了解表单的任何注释。例如,注
释可能指示表单的名称、修订版、用途或使用
限制。
对齐模式(无缺省值) LP 打印服务用来填充一个空白表单的样例文
件。当挂载表单时,可以在表单上打印此模式
以正确对齐。还可以定义此模式的内容类型,
以便打印服务知道如何打印它。
注– LP打印服务不会尝试屏蔽对齐模式中的敏感信息。如果不希望在样例表单上打印敏感
信息(例如在对齐支票时),则应屏蔽相应的数据。LP 打印服务将对齐模式保存在一个安
全的位置,只有以超级用户或lp 用户身份登录的用户才可以在该位置中阅读它。
收集有关表单的信息后,将它指定为lpforms 命令的输入。应首先将此信息记录在单独的文
件中,以便进行编辑,再使用lpforms 命令将其指定。然后,可以将此文件用作输入,而不
是在提示符之后单独键入每段信息。
如何创建新的打印机表单定义
以超级用户lp 身份登录,或承担打印服务器上的等效角色。
创建表单定义文件。
有关创建打印机表单的描述,请参见第159 页中的“创建新的打印机表单”。应将打印机
定义保存在文本文件中。
将表单添加到LP 打印服务。
# lpadmin -p printer-name -M -f form-name
将表单添加到打印服务器。
有关说明,请参见第127 页中的“如何添加表单”。
1
2
3
4
创建新的打印机表单
第6 章• 自定义LP 打印服务(任务) 161
162
LP 打印服务(参考)
本章提供有关LP 打印服务的以下参考信息。
第164 页中的“LP 打印服务的结构”
第172 页中的“LP 打印服务命令”
第173 页中的“LP 打印服务的功能”
第173 页中的“LP 如何管理文件和调度本地打印请求”
第174 页中的“调度网络打印请求”
第175 页中的“过滤打印文件”
第175 页中的“打印机接口程序的作用”
第175 页中的“lpsched 守护进程如何跟踪打印请求的状态”
第176 页中的“清除日志文件”
打印机任务
打印机任务更多信息
使用Solaris Print Manager 和lp 命令设置打印机第3 章
在设置打印机后使用lp 命令管理打印机第4 章
管理字符集、过滤器、表单和字体第5 章
自定义LP 打印服务第6 章
7第7 章
163
LP 打印服务的定义
LP 打印服务是一组软件实用程序,允许用户在继续工作的同时打印文件。打印服务最初称
为LP 假脱机程序。LP 表示行式打印机,但是现在包括许多其他类型的打印机,如激光打印
机。Spool 是system peripheral operation off-line(系统外围设备脱机操作)的缩写。
打印服务包括LP 打印服务软件、可能提供的任何打印过滤器以及硬件(如打印机)、系统
和网络连接。
LP 打印服务的结构
本节介绍LP 打印服务的目录结构、文件和日志。
LP 打印服务目录
LP 打印服务的文件分布在下表所示的目录中。
表7–1 LP打印服务的目录
目录内容
/usr/bin LP 打印服务的用户命令。
/etc/lp LP 服务器配置文件的分层结构。
/usr/share/lib terminfo 数据库目录。
/usr/lib/print lp 转换脚本、in.lpd 守护进程和printd 守护进程。printd 守护进程
每分钟传输一次/var/spool/print 目录中的所有暂挂作业。当没有要
传输的剩余作业时,printd 守护进程将退出。
/usr/sbin LP 打印服务管理命令
/usr/lib/lp lpsched 程序、二进制文件、PostScript 过滤器以及包含标准打印机接
口程序的model 目录。
/var/lp/logs LP 日志文件,如lpsched.n(它包括来自lpsched 的消息)和
requests.n(它包括有关已完成的打印请求的信息)。
/var/spool/lp 其中的文件排队等待打印的假脱机目录。
/var/spool/print LP 打印服务客户端请求的临时区域。
LP 打印服务配置文件
lpsched 守护进程在/etc/lp 目录中存储配置信息,如下表所述。
LP 打印服务的定义
164 系统管理指南:高级管理• 2006 年7 月
注意– 该表中列出的配置文件是专用接口。这些文件在将来的发行版中可能会更改。您不应
生成依赖于当前位置的这些文件或依赖于当前所用格式的数据的软件。
表7–2 /etc/lp 目录的内容
文件类型说明
classes 目录标识lpadmin -c 命令提供的类的文件。
fd 目录现有过滤器的说明。
filter.table 文件打印过滤器查找表。
forms 目录用于放置每个表单的文件的位置。此目录最
初为空。
interfaces 目录打印机接口程序文件。
logs 链接到/var/lp/logs 打印活动的日志文件。
model 链接到/usr/lib/lp/model 标准打印机接口程序。
printers 目录每台本地打印机的目录。每个目录都包含单
台打印机的配置信息和警报文件。
pwheels 目录打印轮文件或盒文件。
ppd 目录使用PPD 文件配置的每个本地队列都在此处
放置了PPD 文件的一个副本。
这些配置文件的作用与基于lpd 的打印服务器上的/etc/printcap 文件的作用类似。
注– 您可以检查配置文件的内容,但是不应直接编辑这些文件,而应改用lpadmin 命令进行
配置更改。更改将写入/etc/lp 目录中的配置文件。lpsched 守护进程可管理和更新配置文
件。
对于系统可识别的每台本地打印机,/etc/lp/printers 目录都包含一个对应的子目录。以
下示例显示了打印机sparc1 和luna 的/etc/lp/printers 子目录。
$ ls -l /etc/lp/printers
drwxrwxr-x 2 lp lp 512 Jan 23 23:53 luna
drwxrwxr-x 2 lp lp 512 Jan 11 17:50 sparc1
下表介绍了每个打印机特定的目录内的文件。