本节介绍 LP 打印服务的目录结构、文件和日志。
LP 打印服务客户机命令已经过修改,可以使用 FSG OpenPrinting 开放标准打印 API (Print API, PAPI)。这些打印命令位于 PAPI 的上面一层。有关更多信息,请参见PAPI 在 Oracle Solaris OS 中的实现方式。
下表列出经常使用的 LP 打印服务命令。
表 12–2 LP 打印服务命令
命令 |
任务 |
手册页 |
---|---|---|
enable |
激活打印机 | |
cancel |
取消打印请求 | |
lp |
将一个或多个文件发送到打印机 | |
lpstat |
报告 LP 打印服务的状态 | |
disable |
取消激活一台或多台打印机 | |
accept |
允许打印请求为特定目标进行排队 | |
reject |
阻止打印请求为特定目标进行排队 | |
lpadmin |
设置或更改打印机配置 | |
lpfilter |
设置或更改过滤器定义 | |
lpforms |
设置或更改预先打印的表单 | |
lpadmin |
挂载表单 | |
lpmove |
将输出请求从一个目标移动到另一个目标 | |
lpsched |
启动 LP 打印服务调度程序 | |
lpshut |
停止 LP 打印服务调度程序 | |
lpusers |
设置或更改用户可以请求的 LP 打印服务的缺省优先级和优先级限制 |
有关已经过修改可用于 PAPI 的打印命令的信息,请参见PAPI 在 Oracle Solaris OS 中的实现方式。
LP 打印服务可执行以下功能:
管理文件和调度本地打印请求
接收和调度网络请求
如有必要,过滤文件,以便正确打印它们
启动作为打印机接口的程序
跟踪打印作业的状态
跟踪打印机上挂载的表单
跟踪当前挂载的打印轮
传送要求挂载新表单或其他打印轮的警报
传送有关打印问题的警报
/usr/lib/lp 目录包含由 LP 打印服务使用的守护进程和文件,如下表所述。
表 12–3 /usr/lib/lp 目录的内容
文件 |
类型 |
说明 |
---|---|---|
bin |
目录 |
包含用于生成打印警报、慢速过滤器和队列管理程序的文件。 |
model |
目录 |
包含标准打印机接口程序。 |
postscript |
目录 |
包含 LP 打印服务提供的所有 PostScript 过滤器程序。这些过滤器随 /etc/lp/fd 目录中的描述符文件一起提供。这些文件会通知 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 打印服务客户端请求的临时区域。 |
/etc/lp/model/uri |
用于处理 device-uri 信息的接口脚本的位置。 |
lpsched 守护进程在 /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 |
下表介绍了每个打印机特定的目录内的文件。
文件名 |
说明 |
---|---|
alert.sh |
在响应警报时要执行的 Shell |
alert.vars |
警报变量 |
configuration |
配置文件 |
users.deny |
拒绝其访问打印机的用户的列表 |
comment |
打印机描述 |
打印机 luna 的配置文件 /etc/lp/printers/luna/configuration 通常如下所示:
Banner: on: Always Content types: PS Device: /dev/term/b Interface: /usr/lib/lp/model/standard Printer type: PS Modules: default |
/usr/share/lib 目录包含 terminfo 数据库目录。此目录包含许多类型的终端和打印机的定义。LP 打印服务使用 terminfo 数据库中的信息执行以下任务:
初始化打印机
建立选定的页面大小、字符间距、行间距和字符集
将代码序列传送到打印机
每台打印机在 terminfo 数据库中使用短名称标识。如有必要,可以向 terminfo 数据库中添加一些项,但是这样做很单调乏味且很耗时。有关更多信息,请参见为不支持的打印机添加 terminfo 项。
有关每种打印机类型的信息存储在 terminfo 数据库 (/usr/share/lib/terminfo) 中。此信息包括打印机功能和初始化控制数据。您安装的打印机必须对应于 terminfo 数据库中的项。
$ pwd /usr/share/lib/terminfo $ ls 1 3 5 7 9 B H P a c e g i k m o q s u w y 2 4 6 8 A G M S b d f h j l n p r t v x z $ |
每个子目录都包含终端或打印机的已编译数据库项。这些项按打印机或终端类型的第一个字母进行组织。例如,如果具有 Epson 打印机,则在 /usr/share/lib/terminfo/e 目录中查找,以找出特定型号的 Epson 打印机。
$ cd /usr/share/lib/terminfo/e $ ls emots ep2500+high ep48 ergo4000 exidy2500 env230 ep2500+low epson2500 esprit envision230 ep40 epson2500-80 ethernet ep2500+basic ep4000 epson2500-hi ex3000 ep2500+color ep4080 epson2500-hi80 exidy $ |
Epson 打印机的项以 epson 开头。
如果具有 NEC 打印机,则在 /usr/share/lib/terminfo/n 目录中查找 NEC 打印机型号。
$ cd /usr/share/lib/terminfo/n $ ls ncr7900 ncr7900iv netronics network nuc ncr7900-na ncr7901 netty netx nucterm ncr7900i nec netty-Tabs newhp ncr7900i-na net netty-vi newhpkeyboard $ |
此目录中的 nec 项用于 NEC 打印机。
以下三个表列出打印机必需的 terminfo 项。
表 12–6 打印机的必需 terminfo 项(布尔值)
项 |
|
说明 |
---|---|---|
布尔值: |
|
|
|
cpix |
更改字符间距会更改分辨率 |
|
daisy |
打印机需要一个用于更改字符集的运算符 |
|
lpix |
更改行间距会更改分辨率 |
表 12–7 打印机的必需 terminfo 项(数字)
项 |
|
说明 |
---|---|---|
数字: |
|
|
|
bufsx |
打印之前缓冲的字节数 |
|
cols |
一行中的列数 |
|
cps |
平均打印速度(字符/秒) |
|
it |
将制表符初始设置为 n 个空格 |
|
lines |
每页的行数 |
|
orc |
水平分辨率,以字符为单位 |
|
orhi |
水平分辨率,以英寸为单位 |
|
orl |
垂直分辨率,以行为单位 |
|
orvi |
垂直分辨率,以英寸为单位 |
表 12–8 打印机的必需 terminfo 项(字符串)
项 |
|
说明 |
---|---|---|
字符串: |
|
|
|
chr |
更改水平分辨率 |
|
cpi |
更改每英寸字符数 |
|
cr |
回车 |
|
csnm |
字符集名称列表 |
|
cudl |
回车下移一行 |
|
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 |
同时设置上页边距和下页边距 |
|
swidm |
启用倍宽打印 |
|
vpa |
将垂直位置设置为绝对位置 |
日志文件名称 |
说明 |
---|---|
syslogd |
将 /etc/syslog.conf 中的 lpr.debug 设置为启用 LP 打印服务日志记录 |
/var/spool/lp |
排在打印队列中的当前请求的列表 |
/var/lp/logs/requests |
打印请求的进展历史记录 |
每个系统的调度程序都将打印请求日志保留在 /var/spool/lp/tmp/system 和 /var/spool/lp/requests/system 目录中。每个打印请求都有两个文件,用于包含有关请求的信息,每个目录中各有一个文件。只有超级用户或 lp 才能访问 /var/spool/lp/requests/system 目录中的信息。只有已提交请求的用户、超级用户或 lp 才能访问 /var/spool/lp/tmp/system 目录中的信息。
以下示例显示了 /var/spool/lp/tmp/starbug 目录的内容:
$ ls /var/spool/lp/tmp/starbug 5 5-0 # cat 5-0 C 1 D print1 F /etc/profile P 20 T /etc/profile t simple U root s 0000 v 2 |
只要打印请求排在队列中,这些文件就仅保留在其目录中。完成打印请求后,将对文件中的信息进行合并,并附加到 /var/lp/logs/requests 文件。此文件将在下一节中介绍。
如果需要跟踪当前队列中打印请求的状态,请使用 /var/spool/lp/logs 目录中的信息。
LP 打印服务在以下两个日志文件中记录打印服务的历史记录:lpsched 和 requests。这些日志文件位于 /var/lp/logs 目录中。您可以使用这些日志文件中的信息诊断和排除打印故障。以下是 /var/lp/logs 目录内容的一个示例:
# cd /var/lp/logs # ls lpsched.1 requests requests.2 lpsched lpsched.2 requests.1 # |
以下是用于排除故障的两个最重要的日志文件:
lpsched 日志文件-包含有关本地打印请求的信息。
requests 日志文件-包含有关已完成且已不在打印队列中的打印请求的信息。
requests 日志文件具有简单的结构,以便您可以使用常见的 UNIX shell 命令提取数据。请求将按其打印的顺序列出。另外,请求由显示其请求 ID 的行分隔。分隔行(以 = 开头的行)下方的每行标记有单个字母,以标识该行中所包含信息的种类。每个字母由单个空格与数据分隔开。
以下示例显示了 requests 日志文件的内容:
# pwd /var/lp/logs # tail requests.2 = print1-3, uid 0, gid 1, size 206662, Wed Mar 14 08:56:30 MST 2003 z print1 C 1 D print1 F /usr/dict/words P 20 T /usr/dict/words t simple U root s 0x0014 v 2 # |
下表显示了 requests 日志文件中的字母代码及其对应行的内容。
表 12–9 requests 日志文件中的代码
下表显示了 LP requests 日志文件中的结果代码及其说明。
表 12–10 requests 日志文件中的结果代码
结果代码 |
说明 |
---|---|
0x0001 |
请求处于暂挂状态,直到进行恢复。 |
0x0002 |
慢速过滤正在运行。 |
0x0004 |
慢速过滤已成功完成。 |
0x0008 |
请求位于打印机上。 |
0x0010 |
已成功完成打印。 |
0x0020 |
请求处于暂挂状态,直到用户进行更改。 |
0x0040 |
请求已取消。 |
0x0080 |
接下来将打印请求。 |
0x0100 |
请求无法过滤或打印。 |
0x0200 |
请求正在传输到远程打印机(过时)。 |
0x0400 |
用户将接到通知。 |
0x0800 |
通知正在运行。 |
0x1000 |
远程系统已接受请求(过时) |
0x2000 |
管理员暂挂了请求。 |
0x4000 |
打印机必须更改过滤器。 |
0x8000 |
请求暂时停止。 |
排队打印的文件在打印之前存储在 /var/spool/lp 目录中,这可能仅需几秒。下表显示了 /var/spool/lp 目录的内容。
表 12–11 /var/spool/lp 目录的内容
文件 |
类型 |
说明 |
---|---|---|
SCHEDLOCK |
文件 |
调度程序的锁定文件。如果调度程序终止且不会重新启动,请检查此文件。 |
admins |
目录 |
到 /etc/lp 的链接。 |
bin |
目录 |
到 /usr/lib/lp/bin 的链接。 |
logs |
链接 |
到 ../lp/logs(在其中记录已完成的打印请求)的链接。 |
model |
链接 |
到 /usr/lib/lp/model 的链接。 |
requests |
目录 |
包含每台已配置打印机的子目录的目录,其中记录了尚未打印的打印请求。用户无法访问此日志。 |
system |
目录 |
系统的打印状态文件。 |
temp |
链接 |
到 /var/spool/lp/tmp/hostname(包含已假脱机的请求)的链接。 |
tmp |
目录 |
每台已配置打印机的目录,其中记录了尚未打印的打印请求。对现有打印请求进行的更改也记录在此目录中。 |
打印过滤器是打印服务器上的程序,用于将已排队文件的内容从一种格式转换为另一种格式。
打印过滤器可以很简单,也可以很复杂,具体视需要而定。Oracle Solaris OS 在 /usr/lib/lp/postscript 目录中提供了打印过滤器,这些过滤器涵盖了目标打印机要求数据为 PostScript 格式的大多数情况。如果您需要用于非 PostScript 打印机的过滤器,则必须创建这些过滤器并将其添加到需要过滤器的系统。
/etc/lp/fd 目录中提供了一组打印过滤器描述符文件。这些描述符文件描述了过滤器的特征(例如,快速过滤器或慢速过滤器)。这些描述文件指向过滤器程序(例如,指向 /usr/lib/lp/postscript/postdaisy)。
LP 打印服务与 Oracle Solaris OS 的其他部件进行交互。打印服务使用标准打印机接口程序执行以下操作:
初始化打印机端口(如有必要)。标准打印机接口程序使用 stty 命令初始化打印机端口。
初始化打印机。标准打印机接口程序使用 terminfo 数据库和 TERM shell 变量查找相应的控制序列。
打印标题页(如有必要)。
按打印请求指定的份数正确地打印。
LP 打印服务使用在 /usr/lib/lp/model 目录中找到的标准接口程序,除非您指定了其他程序。您可以创建自定义接口程序。但是,必须确保自定义程序不会终止与打印机的连接或干扰正常的打印机初始化。