系统管理指南:打印

LP 打印服务

本节介绍 LP 打印服务的目录结构、文件和日志。

LP 打印服务命令


注 –

LP 打印服务客户机命令已经过修改,可以使用 FSG OpenPrinting 开放标准打印 API (Print API, PAPI)。这些打印命令位于 PAPI 的上面一层。有关更多信息,请参见PAPI 在 Oracle Solaris OS 中的实现方式


下表列出经常使用的 LP 打印服务命令。

表 12–2 LP 打印服务命令

命令 

任务 

手册页 

enable

激活打印机 

enable(1)

cancel

取消打印请求 

cancel(1)

lp

将一个或多个文件发送到打印机 

lp(1)

lpstat

报告 LP 打印服务的状态 

lpstat(1)

disable

取消激活一台或多台打印机 

enable(1)

accept

允许打印请求为特定目标进行排队 

accept(1M)

reject

阻止打印请求为特定目标进行排队 

accept(1M)

lpadmin

设置或更改打印机配置 

lpadmin(1M)

lpfilter

设置或更改过滤器定义 

lpfilter(1M)

lpforms

设置或更改预先打印的表单 

lpforms(1M)

lpadmin

挂载表单 

lpadmin(1M)

lpmove

将输出请求从一个目标移动到另一个目标 

lpmove(1M)

lpsched

启动 LP 打印服务调度程序 

lpsched(1M)

lpshut

停止 LP 打印服务调度程序 

lpshut(1M)

lpusers

设置或更改用户可以请求的 LP 打印服务的缺省优先级和优先级限制  

lpusers(1M)

有关已经过修改可用于 PAPI 的打印命令的信息,请参见PAPI 在 Oracle Solaris OS 中的实现方式

LP 打印服务的功能

LP 打印服务可执行以下功能:

守护进程和 LP 内部文件

/usr/lib/lp 目录包含由 LP 打印服务使用的守护进程和文件,如下表所述。

表 12–3 /usr/lib/lp 目录的内容

文件 

类型 

说明 

bin

目录 

包含用于生成打印警报、慢速过滤器和队列管理程序的文件。 

model

目录 

包含标准打印机接口程序。 

postscript

目录 

包含 LP 打印服务提供的所有 PostScript 过滤器程序。这些过滤器随 /etc/lp/fd 目录中的描述符文件一起提供。这些文件会通知 LP 打印服务过滤器的特征以及它们的位置。

LP 打印服务目录

LP 打印服务的文件分布在下表中显示的目录中。

表 12–4 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 信息的接口脚本的位置。

LP 打印服务配置文件

lpsched 守护进程在 /etc/lp 目录中存储配置信息,如下表所述。


注意 – 注意 –

此表中列出的配置文件是专用接口。这些文件在将来的发行版中可能会更改。您不应生成依赖于当前位置的这些文件或依赖于当前所用格式的数据的软件。


表 12–5 /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 目录包含系统可识别的每个本地打印机的子目录。以下示例显示了打印机 sparc1luna/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

terminfo 数据库

/usr/share/lib 目录包含 terminfo 数据库目录。此目录包含许多类型的终端和打印机的定义。LP 打印服务使用 terminfo 数据库中的信息执行以下任务:

每台打印机在 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

以下三个表列出打印机必需的 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

将垂直位置设置为绝对位置 

LP 打印服务日志文件

LP 打印服务维护下表中介绍的两组日志文件。

日志文件名称 

说明 

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 打印服务在以下两个日志文件中记录打印服务的历史记录:lpschedrequests。这些日志文件位于 /var/lp/logs 目录中。您可以使用这些日志文件中的信息诊断和排除打印故障。以下是 /var/lp/logs 目录内容的一个示例:


# cd /var/lp/logs
# ls
lpsched.1    requests    requests.2
lpsched      lpsched.2   requests.1
# 

以下是用于排除故障的两个最重要的日志文件:

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 日志文件中的代码

字母 

行的内容 

=

分隔行,该行包含以下各项: 请求 ID、用户 ID (user ID, UID) 和用户组 ID (group ID, GID)、原始(未过滤的)文件大小的总字节数以及将请求排队的时间。 

z

打印机的名称。 

C

打印的份数。 

D

打印机或类的目标,或者 any 一词。

F

已打印文件的名称。对每个已打印的文件,重复该行。文件按所显示的顺序打印。 

f

(可选)所用表单的名称。 

H

(可选)以下三种特殊处理类型之一: 恢复、暂挂和立即。  

N

(可选)在成功完成打印请求时使用的警报类型。如果通过电子邮件通知用户,则类型用字母 M 表示;如果通过将消息发送到终端来通知用户,则类型用字母 W 表示。

O

(可选)与打印机有关的 -o 选项。例如 nobanner

P

打印请求的优先级。 

p

已打印页的列表。 

r

(可选)当用户使用 lp -r 命令请求对文件进行“原始”处理时包括的单个字母行。

S

(可选)所用的字符集、打印轮或打印盒。 

T

放置在标题页上的标题。 

t

在文件中找到的内容类型。 

U

提交打印请求的用户的名称。 

s

请求的结果,显示为以十六进制格式表示的单个位的组合。多个位由打印服务在内部使用。下表介绍了各个位及其含义。 

v

  • 0-标识打印作业源自 in.1pd 打印守护进程或网络上的其他系统。

  • 2-标识打印作业源自 /usr/bin/lp/usr/ucb/lpr 命令。

  • 1-标识打印作业源自打印软件的较旧版本。

x

(可选)用于打印请求的慢速过滤器。 

Y

(可选)用于打印请求的打印过滤器的特殊模式列表。 

z

(可选)用于请求的打印机。如果已为任何打印机或打印机类请求排队,或者请求已移动到其他目标,则该打印机与目标(D 行)不同。

下表显示了 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 的其他部件进行交互。打印服务使用标准打印机接口程序执行以下操作:

LP 打印服务使用在 /usr/lib/lp/model 目录中找到的标准接口程序,除非您指定了其他程序。您可以创建自定义接口程序。但是,必须确保自定义程序不会终止与打印机的连接或干扰正常的打印机初始化。