目录
11.5 使用打印机
11.6 标准spooler 之外的选择
=============================================================
11.5 使用打印机
这一节将告诉你如何在FreeBSD 下使用打印机。这里有份使用者等级命令的概述。
lpr
打印工作
lpq
检查打印机队列
将工作从打印机队列中删除
lprm
也有系统维护使用的命令,lpc,用来控制打印机及其队列。在管理打印机这一节里有
更详细的说明。
lpr,lprm 和lpq 这三个命令都接收-P printer-name 这个指定在/etc/printcap 文件里设定
的打印机/队列的参数。允许你对不同的打印机做要求、删除,以及检查工作。如果你没有
使用-P 参数,那么这些命令将使用PRINTER 环境变量所指定的打印机。若你也没有
PRINTER 环境变量,那么这些命令则会对别名为lp 的打印机指定动作。
此后,默认打印机指的就是以PRINTER 环境变量设定的打印机或是当lp 环境变量不存
在时,别名为lp 的打印机。
11.5.1 打印工作
要打印文件,输入:
% lpr filename ...
这将把所有列出的文件以默认打印机打印。如果你没有指定任何文件,那么lpr 将会从
标准输入读入资料。下面这个例子将会打出一些重要的系统文件:
% lpr /etc/host.conf /etc/hosts.equiv
若要指定以特定的打印机输出,输入:
% lpr -P printer-name filename ...
下面这个例子会将当前目录下的文件列表从名为rattan 打印机输出:
% ls -l | lpr -P rattan
因为lpr 命令之后没有指定任何一个文件,lpr 将会从标准输入读入资料以打印出来,即
由ls -l 命令所产生的输出。
第61 页FreeBSD 使用手册
lpr 命令有许多参数如控制输出格式、套用文件转换、一次打印出多份,等等。请参看
打印参数这一节里有更详细的说明。
11.5.2 检查打印工作
当你使用lpr 打印时,一起送到LPD spooling 系统的资料称为一个“打印工作”。每一
台打印机都有一个打印工作队列,而你的打印工作和其它的打印工作一样在队列里等待打
印。打印机会将先打印先送达的工作。
要显示默认打印机的队列,输入lpq 即可。若要指定打印机,请指定-P 参数。例如
% lpq -P bamboo
这个命令会显示叫做bamboo 的打印机队列。这里有一份lpq 命令的输出例子:
bamboo is ready and printing
Rank Owner Job Files Total Size
active kelly 9 /etc/host.conf, /etc/hosts.equiv 88 bytes
2nd kelly 10 (standard input) 1635 bytes
3rd mary 11 ... 78519 bytes
上面显示一共有三个工作在bamboo 的队列里。第一个工作由使用者kelly 送出,“工作
代码”为9。每一个工作都会有个唯一的工作代码。通常你可以忽略工作代码,但是如果你
要取消某个工作时,你就会需用知道工作号码。详情请参看删除队列这一节。
工作号码9 里包含了两个文件。用lpr 送多个文件将会被视为同一个工作。这是目前正
在处理的工作(注意“Rank”栏标示的active),即打印机现在应该就在打印这个工作。第二
个工作的资料是用lpr 从标准输入接收资料的。而第三个工作是由使用者mary 送出的。这
是一个较大的工作。而她要打印的文件因为太长而放不下,所以lpq 命令只显示三个点。
lpq 最前面的输出通常可以看出打印机现在在做什么(至少是LPD 觉得打印机现在应该是在
做什么)。
lpq 命令可以使用-l 参数以得到更详细的列表。这里有一个lpq -l 的输出范例:
waiting for bamboo to become ready (offline ?)
kelly: 1st [job 009rose]
/etc/host.conf 73 bytes
/etc/hosts.equiv 15 bytes
第62 页FreeBSD 使用手册
kelly: 2nd [job 010rose]
(standard input) 1635 bytes
mary: 3rd [job 011rose]
/home/orchid/mary/research/venus/alpha-regio/mapping 78519 bytes
11.5.3 删除打印工作
如果你改变主意不想打印你的工作了,你可以用lprm 命令把他们从打印队列中删除。
通常你也可以用lprm 把一个正在处理的工作删除,不过可能还是会打印出部分或是全部的
文件。
要从默认打印机里删除工作,首先,用lpq 找出工作代码,然后输入:
% lprm job-number
如果要从指定的打印机删除工作,那么用-P 参数。下列的命令从打印机bamboo 的队
列中删除工作号码为10 的工作:
% lprm -P bamboo 10
lprm 命令有一些常用的用法:
lprm -
将(默认打印机)里所有属于你的工作都删除。
% lprm -P rattan -
lprm user
将(默认打印机)里所有属于使用者user 的工作皆删除。只有超级使用者可以删除其
它人的工作,你只能删除你自己的工作。
lprm
若不指定工作号码、使用者名称或是- ,lprm 将删除目前默认打印机正在处理的工
作,但前提是这个工作必需是属于你的。超级使用者可以删除任何目前正在处理的
工作。
若使用-P 参数配合上述的常用用法,则上述的动作将对指定的打印机动作而不是对默
认打印机。下列的命令将会删除目前使用者在打印机rattan 队列中的所有工作:
注意: 如果你使用的是网络打印机,lprm 将只允许你从输出工作的机器删除该工作。
第63 页FreeBSD 使用手册
下面这些命令可以说明这个概念:
% lpr -P rattan myfile
% rlogin orchid
% lpq -P rattan
Rank Owner Job Files Total Size
active seeyan 12 ... 49123 bytes
2nd kelly 13 myfile 12 bytes
% lprm -P rattan 13
rose: Permission denied
% logout
% lprm -P rattan 13
dfA013rose dequeued
cfA013rose dequeued
11.5.4 在纯文字之外:打印参数
lpr 命令提供控制格式输出、转换图形及其它文件格式、一次打出多份、工作处理方式
等参数。这一节将一一介绍。
11.5.4.1 格式输出与转换参数
下列的lpr 命令控制文件输出的格式。如果你的打印工作里没有纯文字或是你希望纯文
字通过lpr 处理后以特定的格式输出时,你可以使用这些参数。
举例来说,下面的命令从叫做bamboo 的打印机将DVI 文件(由TeX 排版系统产生)
fish-report.dvi 打出:
% lpr -P bamboo -d fish-report.dvi
这些参数将套用这个工作里的每个文件,所以你不能把DVI 和ditroff 文件在同一个工
作里一起处理,而要分两次工作用不同的转换参数。
注意: 这些参数除了-p 和-T 需要为指定的打印机安装转换的过滤程序外,其它的都不
用。举例来说,参数-d 需要安装DVI 转换过滤程序。转换用的过滤程序这一节有较详细的
说明。
c
第64 页d
f
g
i number
l
n
p
T title
t
v
下面是一个以默认打印机打印格式化过的ls manual page 的例子:
zcat 命令将ls 原始数据解压缩并传送给troff 命令,将该数据格式化后以GNU troff 格式
输出给lpr 送给LPD spooler 处理。因为我们在使用lpr 命令时使用了-t 参数,所以spooler
在打印时会把GNU troff 转换成默认打印机所能了解的格式。
将输出缩进number 个字符。如果你省略number,则缩进8 个字符。这个
参数只有在某些转换用的过滤程序上有效。
原封不动的打出文字数据,包括控制字符。
打印ditroff (device independent troff) 数据。
在打印之前以pr 格式化输出。请参见pr 以取得更多的信息。
以title 取代pr header 中的文件名。这个参数只有在配合-p 参数使用时才有
效。
打印troff 数据。
打印raster 数据。
% zcat /usr/share/man/man1/ls.1.gz | troff -t -man | lpr -t
打印cifplot 文件。
打印DVI 文件。
打印FORTRAN 文本文件
打印plot 数据。
注释: 请不要在-i 和数字之间加上空白
FreeBSD 使用手册
第65 页11.5.4.2 工作处理方式参数
# copies
m
s
r
11.5.4.3 Header Page 参数
这些参数就没有作用了。请参见Header Pages 这一节以了解如何设定header pages。
1. C text
将同一工作里的每个文件都打出copies 份。系统管理员可以将这个参数关闭,以减
低打印机的障碍并鼓励使用复印机。请参见限制打印多份这一节的说明。
这个例子将会从默认的打印机打出三份parser.c,然后打出三份parser.h:
% lpr -#3 parser.c parser.h
完成打印工作后,便通知使用者。若使用这个参数,当打印工作完成后,LPD 系统
将会写信给你。在这封信中将会告诉你你的工作是否成功地打出或是有错误以及
(通常会)告诉你错误的原因。
不要将要打印的文件拷贝到spooling 目录,而只要以symbolic links 的方式取代。
如果你要打印大的文件,你可考虑用这个参数。这可以节省你spooling 目录的空间(否
则spooling 目录所在的文件系统可能会空间不足)。同时他也可以省下LPD 将文件
拷贝到spooling 目录所需的时间。
这么做有一个缺点就是当打印还没结束时,你不能修改或删除打印中的文件,因为
LPD 在打印时还会用到原始的文件。
Note: 如果你是用网络打印机打印,那么LPD 还是会把你的文件拷贝到远程的机器,
所以参数-s 只有在本机上打印时才有用。
当你的文件已经拷贝到spooling 目录时,或是用-s 参数且打印完成时,就将原本的
文件删除。请小心使用这个参数!
有一些参数是设定lpr 打印在header pages 上的文字。如果打印header pages 的话,那么
将header page 上的机器名称以text 取代。机器名称通常是打印送出工作的机器名称。
2. J text
FreeBSD 使用手册
下列的参数将会让lpr 告诉LPD 以特别的方式处理工作:
第66 页FreeBSD 使用手册
将header 上的工作名称以text 取代。工作名称通常是一份打印工作里的第一个文件名
称,如果你是从标准输入打印数据的话,那么将会是stdin。
3. h
不要打印header page。
注释: 在某些机器上,由于header pages 产生的方式不同, 这个选项可能会无效。请参
见Header Pages 这一节里更详细的说明。
11.5.5 管理打印机
作为打印机管理员,你必需安装、设定以及测试它们。你可以用lpc 这个命令:
1. 让打印机开始工作或停止工作。
2. 开启或关闭他们的队列。
3. 重新安排队列里工作的顺序。
我们得先知道的一个概念是:如果一个打印机已经停止工作了,他将不会将队列里的任
何东西打出。使用者仍然可以将工作送过来,但是这些工作将会在队列里等待直到打印机开
始工作或是队列被清空了。
如果队列被关闭了,那么没有使用者(除了root 之外)可以将工作送给打印机。只有已
经开启队列的打印机可以接收其它人将工作送过来。一个打印机可以为一个已经关闭的队列
开始工作。在这个情况下,原本存在队列中的工作将会一一的被打印直到没有工作为止。
通常,拥有root 权限的使用者才可以用lpc 下命令。一般的使用者只能用lpc 命令来
查询打印机工作以及重新启动当掉的打印机。
以下是一份lpc 的命令列表。大部份的命令都需要指定printer-name 以指定要对哪一
台打印机下命令。printer-name 也可以用all 表示所有排在/etc/printcap 里的打印机。
abort printer-name
取消目前的工作,同时也停止打印机工作。如果队列被关闭,使用者仍然可以送工作给
打印机。
clean printer-name
将打印机spooling 目录中的旧文件删除。有时候LPD 可能没有把打印完的工作从
spooling 目录中删除,尤其是当打印的工作发生错误时或是有其它命令将其中止时。
第67 页FreeBSD 使用手册
这个命令将会找出这些不该存在于spooling 目录中的文件并将他们删除。
disable printer-name
关闭队列以停止接收新工作。如果打印机并未停止工作,那么队列中剩余的工作将会继
续打印直到队列中没有工作为止。关闭队列后,root 仍然可以继续送工作给打印机。
这个命令在你测试一台新打印机或是新的过滤程序时特别有用:你可以将队列关起来然
后以root 测试打印的工作。其它使用者则无法将工作送过来,除非你测试完毕后将队
列以enable 命令打开。
down printer-name message
这个命令等于是disable 后再接着stop 命令。其中message 是当有使用者以lpq 检查
打印机队列或是以lpc status 命令检查打印机状态时所显示的信息。
enable printer-name
将打印机队列打开。这样使用者就可以将工作送给打印机,但是只有在打印机已经开始
工作后,队列里的工作才会被打出来。
help command-name
将command-name 命令的说明打出。如果没有指定command-name,那么将会打出所有可
用的命令。
restart printer-name
重新启动打印机。如果因为某些情况使得LPD 当掉了,一般的使用者可以用这个命令让
打印机重新开始工作。但是他们无法用这个命令让由stop 或down 命令停止的打印机开
始工作。restart 命令等于abort 再接着start 命令。
start printer-name
让打印机开始工作。打印机会将队列里的工作打出。
stop printer-name
停止打印机工作。打印机将会先完成目前的工作然后停止打印队列中的任何工作。打印
机停止工作后,使用者仍然可以把工作送给一个未关闭的队列中。
topq printer-name job-or-username
第68 页FreeBSD 使用手册
将打印机printer-name 队列中工作代号为job 或是属于使用者username 的工作移到队
列的最前面。在这个命令里,你不可以将all 填在printer-name 上指定所有的打印机。
up printer-name
这是和down 命令相对的指令。等于是start 后再接着enable 命令。
lpc 能以参数的方式接收上述的命令。如果你不输入任何命令,lpc 将会进入交谈模式,
在这里你可以一直输入命令直到你以exit 命令、quit 命令或是输入文件结尾字符为止。
11.6 标准spooler 之外的选择
如果你读完了这份文件,现在你应该已经彻底了解FreeBSD 提供的LPD spooling 系统。
不过你可能觉得这个系统有些缺点,因此你可能会想到:“除此之外还有哪些spooling 系统(可
以配合FreeBSD 使用)?”
不幸的是,只有两种选择。它们分别是:
LPRng
LPRng 指的是“下一代的LPR” 。LPRng 是将PLP 完全重写。Patrick Powell 和Justin Mason
(PLP 的主要负责人)一起合作LPRng。LPRng 的网站是ftp://dickory.sdsu.edu/pub/LPRng/。
PLP, the Portable Line Printer Spooler System
PLP 是以由Patrick Powell 所发展的软件为基础,现在由网络上的一群人共同维护发展。你
可以在(ftp://ftp.iona.ie/pub/plp/) 这个网站取得这个软件。它和BSD LPD 很相似,不过加
强了一些功能,包括:
1. 更好的网络支持,包括内建一网络打印机支持、以NIS管理的printcaps以及用NFS mount
的spooling 目录。
2. 成熟的队列管理。允许多台打印机使用同一个队列、在队列之间传送工作或是将队列
重新传给其它打印机。
3. 远程控制打印机
4. 工作优先权设置
5. 较复杂的保密及访问设置