10.5. 使用打印机

这节将讲述如何使用在 FreeBSD 下设置好的打印机。 下面是一个用户级命令的总览:

lpr(1)

打印任务

lpq(1)

检查打印队列

lprm(1)

从打印机的队列中移除任务

还有一个管理命令, lpc(8), 在 管理打印机 一节中有所介绍, 它可以用于控制打印机及其队列。

lpr(1), lprm(1), and lpq(1) 这三个命令都接受 -P printer-name 选项来指定对哪个打印机 / 队列进行操作, 在 /etc/printcap 文件中列出的打印机。 这允许您提交, 删除, 并检查任务在多个打印机上。 如果您不使用 -P 选项, 那么这些命令会使用在 环境变量 PRINTER 中指定的打印机。 最终, 如果您也没有 PRINTER 这个环境变量, 这些命令的默认值是叫做 lp 的这台打印机。

从此以后, 术语 默认打印机 就是指 PRINTER 环境变量中指定的这台, 或者叫做 lp 的这一台当没有环境变量 PRINTER 的时候。

10.5.1. 打印任务

要打印文件, 输入:

% lpr filename ...

这个命令会打印所有列出的文件到默认打印机。 如果没有列出文件, lpr(1) 会从标准输入读取打印数据。 比如, 这个命令打印一些重要的系统文件:

% lpr /etc/host.conf /etc/hosts.equiv

要选择一个指定的打印机, 输入:

% lpr -P printer-name filename ...

这个例子打印一个当前目录的长长的列表到叫做 rattan 的这台打印机:

% ls -l | lpr -P rattan

因为没有为 lpr(1) 命令列出文件, lpr 从标准输入读入数据, 在这里是 ls -l 命令的输出。

lpr(1) 命令同样可以接受多种控制格式的选项, 应用文件转换, 生成多份副本, 等等。 要得到更多信息, 参考 打印选项 这节。

10.5.2. 检查任务

当使用 lpr(1) 进行打印时, 您希望打印的所有数据被放在一起打包成了一个 打印任务, 它被发送到 LPD 后台打印系统。 每台打印机都有一个任务队列, 并且您的任务在队列中等待其他用户的其他任务打印。 打印机按照先来先印的规则打印这些任务。

要显示默认打印机的队列, 输入 lpq(1)。 要指定打印机, 使用 -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(1) 命令行中指定的多个文件被看作是一个单个的任务。 它是当前激活的任务 (注意这个词 激活Rank 这列下面), 意思是打印机当前正在打印那个任务。 第二个任务包含了标准输入传给 lpr(1) 命令的数据。 第三个任务来自用户 mary; , 它是一个比较大的任务。 她要打印的文件的路径名太长了, 所以 lpq(1) 命令只显示了三个点。

lpq(1) 输出的头一行也很有用: 它告诉我们打印机正在做什么 (或者至少是 LPD 认为打印机应该正在做的)。

lpq(1) 命令同样支持 -l 选项来生成一个详细的长列表。 下面是一个 lpq -l 命令的例子:

waiting for bamboo to become ready (offline ?)
kelly: 1st				 [job 009rose]
       /etc/host.conf                    73 bytes
       /etc/hosts.equiv                  15 bytes

kelly: 2nd				 [job 010rose]
       (standard input)                  1635 bytes

mary: 3rd                                [job 011rose]
      /home/orchid/mary/research/venus/alpha-regio/mapping 78519 bytes

10.5.3. 移除任务

如果您对一个打印任务改变了主意, 可以用 lprm(1) 将任务从队列中删除。 通常, 您甚至可以用 lprm(1) 命令来移除一个当前激活的任务, 但是任务的一部分或者所有还是可能打印出来。

要从默认打印机中移除一个任务, 首先使用 lpq(1) 找到任务编号。 然后输入:

% lprm job-number

要从指定打印机中删除任务, 增加 -P 选项。 下面的命令会删除编号为 10 的任务从 bamboo 这台打印机:

% lprm -P bamboo 10

lprm(1) 命令有一些快捷方式:

lprm -

删除所有属于您的任务 (默认打印机的)。

lprm user

删除所有属于用户 user 的任务 (默认打印机的)。 超级用户可以删除用户的任务; 您只可以删除自己的任务。

lprm

命令行中不带任务编号, 任务名, 或者 - 选项, lprm(1) 会删除默认打印机上当前激活的任务, 如果它属于你。 超级用户可以删除任务激活的任务。

使用参数 -P 和上面的快捷方式来用指定打印机替代默认打印机。 例如, 下面的命令会删除当前用户在打印机 rattan 队列中的所有任务:

% lprm -P rattan -

注意:

如果您正工作在一个网络环境中, lprm(1) 将只允许在提交任务的主机上删除任务, 甚至是同一台打印机也可以在其他主机上使用时。 下面的命令证明了这个:

% 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
	

10.5.4. 超越纯文本:打印选项

lpr(1) 支持许多控制文本格式的参数, 转换图形和其他格式文件, 生成多份副本, 处理任务, 等等。 这一节将描述这些选项。

10.5.4.1. 格式与转换选项

下面的 lpr(1) 参数控制任务中文件的格式。 使用这些参数, 如果任务不含纯文本, 或者您想让纯文本通过 pr(1) 格式化。

例如, 下面的命令打印一个 DVI 文件 (来自 TeX 排版系统) 文件名为 fish-report.dvi 到打印 bamboo

% lpr -P bamboo -d fish-report.dvi

这些选项应用到任务中的每个文件, 所以您不能混合 (说) DVI 和 ditroff 文件在同一个任务中。 替代的方法是, 用独立的任务提交这些文件, 使用不同的转换选项给不同的任务。

注意:

所有这些选项除了 -p-T 都需要转换过滤器安装给目标打印机。 例如, -d 选项需要 DVI 转换过滤器。 参考 转换过滤器 这节得到更多细节。

-c

打印 cifplot 文件。

-d

打印 DVI 文件。

-f

打印 FORTRAN 文本文件。

-g

打印 plot 数据。

-i number

缩进 number 列; 如果没有指定 number, 则缩进 8 列。 这个选项仅可以工作在某些过滤器上。

注意:

不要在选项 -i 和数字之间加入空格。

-l

打印文字数据, 包括控制字符。

-n

打印 ditroff (无设备依赖 troff) 数据。

-p

打印之前用 pr(1) 格式化纯文本。 参考 pr(1) 得到更多信息。

-T title

使用 titlepr(1) 上来替代文件名。 这个选项仅在使用 -p 选项时起作用。

-t

打印 troff 数据。

-v

打印 raster 数据。

下面是一个例子: 这个命令打印了一个很好的 ls(1) 联机手册到默认打印机:

% zcat /usr/share/man/man1/ls.1.gz | troff -t -man | lpr -t

zcat(1) 命令解压缩 ls(1) 的手册并且将内容传给 troff(1) 命令, 它将格式化这些内容并且生成 GNU troff 输出给 lpr(1) , 它提交任务到 LPD 后台打印。 因为使用了 -t 选项为 lpr(1) , 后台打印将会转换 GNU troff 输出到默认打印机可以理解的格式当任务被打印时。

10.5.4.2. 任务处理选项

下面的 lpr(1) 选项告诉 LPD 对任务特殊处理:

-# copies

生成 copies 个副本给任务中的每个文件, 替代每个文件一份副本。 管理员可以禁止这个选项来减少打印机的浪费和鼓励复印机的使用。 参考 限制多份副本

这个例子打印三份副本的文件 parser.c 跟着三份副本的文件 parser.h 到默认打印机:

% lpr -#3 parser.c parser.h
-m

打印完成后发信。 使用这个选项, LPD 系统将会发送邮件到您的帐户, 当它完成了处理您的任务后。 在信中, 它将会告诉您任务是否成功完成或者出现了错误, 并且 (通常) 指明是什么错误。

-s

不要复制文件到后台打印队列目录, 要使用符号连接。

如果您正在打印一个很大的任务, 您可能需要这个选项。 它节省后台打印队列目录的空间 (您的任务可能使后台打印队列目录所在的文件系统剩余空间超出)。 它同样也节省了时间, 因为 LPD 将不会副本任务的每个字节到后台打印队列目录。

这也有一个缺点: 因为 LPD 将直接指向源文件, 您不能修改或者删除它们直到它们被打印出来。

注意:

如果您打印到一台远程打印机, LPD 将最终将文件从本地主机副本到远程主机上, 所以选项 -s 只能节省本地后台打印队列目录的空间, 而不是远程的。 虽然如此, 但它还是很有用。

-r

移除任务中的文件在它们被复制到后台打印队列目录之后, 或者在用 -s 选项打印它们之后。 谨慎使用这个选项!

10.5.4.3. 报头页选项

这些 lpr(1) 的选项调整了通常出现在任务报头页上的文本。 如果报头页被跳过了在目标打印机上, 这些选项将不会起作用。 参考 报头页 得到更多关于设置报头页的信息。

-C text

替换报头页上的主机名为 text。 主机名通常都是提交任务的主机名称。

-J text

替换报头页上的任务名为 text。 任务名通常是任务中头一个文件的名字, 或者 stdin 如果您正在打印标准输入。

-h

不打印任何报头页。

注意:

在某些地点, 这个选项可能无效, 与报头页的产生方法有关。 参考 报头页 得到详细信息。

10.5.5. 管理打印机

作为一个打印机的管理者, 您必须要安装, 设置, 并且测试它们。 使用 lpc(8) 命令, 您可以与打印机以更多的方式交流。 用 lpc(8) , 您可以

  • 启动或停止打印机

  • 启用或禁止它们的队列

  • 重新安排每个队列中的任务。

首先, 一个关于术语的解释: 如果一个打印机被 停止 了, 它将不会打印它队列中的任何东西。 但用户还是可以提交任务, 它们会在队列中等待直到打印机被 启动 或者队列被清空。

如果一个队列被 禁止, 没有用户 (除了 root) 可以提交任务到打印机。 一个 启用 的队列允许任务被提交。 一个打印机可以被 启动 但它的队列被禁止, 在这种情况下打印机将打印队列中的任务, 直到队列为空。

通常, 您必须有 root 权限来使用 lpc(8) 命令。 普通用户可以使用 lpc(8) 命令来获得打印机状态并且重启一台挂了的打印机。

这里是一个关于 lpc(8) 命令的摘要。 大部分命令带着一个 printer-name 参数来知道要对哪台打印机操作。 您可以用 all 填在 printer-name 的位置来代表所有在 /etc/printcap 文件中列出的打印机。

abort printer-name

取消当前任务并停止打印机。 用户仍然可以提交任务, 如果队列还是启用的。

clean printer-name

从打印机的后台打印队列目录移除旧的文件。 有时, 组成任务的文件没有被 LPD 正确的删除, 特别是在打印中出现错误或者管理活动比较多的时候。 这个命令查找不属于后台打印队列目录的文件并删除它们。

disable printer-name

禁止新任务入队。 如果打印机正在工作, 它将会继续打印队列中剩余的任务。 超级用户 (root) 总是可以提交任务, 甚至提交到一个禁止的队列。

这个命令在测试一台新打印机或者安装过滤器时非常有用: 禁止队列并提交以 root 提交任务。 其他用户将不能提交任务直到您完成了测试并用命令 enable 重新启用了队列的时候。

down printer-name message

打印机下线。 等于 disable 命令后跟一个 stop 命令。 message 将作为打印机状态, 当用户使用 lpq(1) 或者 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

重新以 printer-name 安排队列, 通过将列出的 job 编号或者指定的所属 username 的任务放在队列的最前面。 对于这个命令, 您不可以使用 all 当作 printer-name

up printer-name

打印机上线; 相对于 down 命令。 等同于 start 后跟着一个 enable 命令。

lpc(8) 的命令行接受上面的命令。 如果您不输入任何命令, lpc(8) 则进入一个交互模式, 在这里您可以输入命令直到输入 exitquit, 或者文件结束符。

本文档和其它文档可从这里下载: ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

如果对于FreeBSD有问题,请先阅读 文档,如不能解决再联系 <questions@FreeBSD.org>.

关于本文档的问题请发信联系 <doc@FreeBSD.org>.