目录
11 打印
11.1 概要
11.2 介绍
11.3 基本设置=============================================================
第11 章打印
=============================================================
(翻译中出现的任何问题或错误,请广大读者及时反馈给我:freebsdhandbook@163.com)
11.1 概要
FreeBSD 支持许多种类的打印机,从最老式的impact 打印机,到最新的激光打印机,
都可以让你通过相关的应用程序来提供高质量的打印效果。
FreeBSD 也可以通过网络来配置一个打印服务器。通过这种功能,FreeBSD 也可以从其
他的电脑上得到打印任务,包括其它的FreeBSD 电脑、windows 和MACos 主机。FreeBSD 能
够确保每个打印作业都能完成,并能够统计用户和机器的工作状况,以使它们能达到最佳的
打印效果。FreeBSD 也能生成“banner”页,来显示谁打了什么和打了多少。
阅读完这章,你将了解到:
如何配置FreeBSD 的打印机spooler。
如何安装打印机的过滤器,处理一些特殊的打印作业。包括转换打印文件的格式。
如何在打印输出文件中启用header 或banner 文件。
如何通过连接到其他电脑来打印到打印机。
如何直接连接到网络来打印到打印机。
如何管理打印机的限制,包括打印尺寸的大小,以及阻止某些用户的打印。
如何记录打印机的统计情况和用户使用打印机的情况。
如何处理打印机出现的问题。
在阅读这章之前,你应当先了解:
如何配置和安装一个新的内核(第9 章)。
11.2 介绍
第1 页FreeBSD 使用手册
要在FreeBSD 下使用打印机,你需要设置Berkeley line print spooling(打印池)
系统,也叫做LPD spooling 系统。这是FreeBSD 下控制打印机的标准。这一节将介绍LPD
spooling 系统,以下将简称为LPD。
如果你已经熟悉LPD 或是其它的打印机spooling 系统,你可以先跳到设置spooling 系
统那一节。LPD 控制任何有关连接在本机上的打印机的事情,包括:
1. 控制本地打印机及网络上其它打印机的访问权限。
2. 接收使用者传送的文件来打印;这些要打印的要求称为工作。
3. 利用队列来防止多个使用者同时访问同一台打印机。
4. 在输出时打出header pages(也称做banner 或burst)。这样,使用者可以在厚厚
一打纸张中找出他们自己所打印的东西。
5. 为连接在串口上的打印机设置适当的通讯参数。
6. 通过网络将工作送给另一台机器上的LPD spooler。
7. 执行特定的过滤程序,让你的工作可以兼容于使用不同打印机语言的打印机。
8. 统计打印机的使用情况。
11.2.1 为什么要使用spooler
通过适当的设置并提供特别的过滤程序,你可以使LPD 系统在不同的打印机上拥有上述
全部或部分的功能。
如果你的系统只有自己一个人在用,那么你可能会觉得既不需要权限控制、header
pages、或是统计打印机使用情况,为什么还要用spooler?如果可以直接访问打印机,那
么你仍然得使用spooler,因为:
. LPD 在执行脱机打印的工作时,你不需要花时间等待资料传送到打印机。
. LPD 可以通过过滤程序,在你的文件上加上日期/时间等信息,或是转换特别的文件
格式(如Tex、DVI 的文件)使打印机能处理。你不需要手动转换。
. 很多免费及商业软件所提供的打印功能通常会需要用到你系统上的spooler。你只
要设置好spooling 系统,将来可以很容易的让其它的程序使用打印机。
. 统计打印机的使用情况。
第2 页FreeBSD 使用手册
11.3 基本设置
让LPD 可以配合打印机工作,你需要同时设置好你的打印机以及LPD。设置分为两大部
分:
1. 简单的打印机设置这一节将告诉你如何连接打印机,并设置LPD 打印纯文本的文
件。
2. 高级打印机设置这一节将告诉你如何让打印机打出各种不同格式的文件、header
pages、通过网络打印、设置访问权限以及统计打印机的使用情况。
11.3.1 简单的打印机设置
这一节将说明如何连接打印机及设置LPD。包括:
硬件设置这一节说明如何将打印机接到计算机上的连接端口。
软件设置这一节说明如何撰写LPD spooler 的设置文件/etc/printcap 。
如果你要设置的是网络打印机,请参考使用网络数据传输接口的打印机这一节。
虽然这一节叫做“简单的打印机设置”,但其实是挺复杂的。让你的打印机可以配合
LPD spooler 是设置工作中最难的一部分。一旦你的打印机可以正常工作了,较高级的功能
如打印header pages 和打印机使用情况统计反而比较容易设置。
11.3.1.1 硬件设置
这一节说明有哪些方法可以将打印机连到我们的个人计算机上;有哪些通讯端口、连接
线以及kernel 的设置。如果你的打印机在你使用的计算机上可以通过其它操作系统来打印,
你也许可以跳过这一节直接到软件设置那一节。
11.3.1.1.1 端口和线缆
几乎所有可以和PC 连接的打印机都能支持下列两种或是其中一种接口:
第3 页FreeBSD 使用手册
1. 串行打印机通过串口和计算机传输资料。串行接口的配备及连接线可以容易的取得
及安装。但是串行接口有时需要较特别的连接线及较复杂的设置。
2. 并行打印机通过并口和计算机传输资料。并口在市场上很普遍,连接线也很容易找
得到,但是不容易自己制作。利用并口连接打印机十分的容易,通常不需要设置额
外的通讯参数。
并口有时也称做“Centronics”接口,这是根据打印机上面的接头来命名的。
通常,只有使用PostScript 的打印机才需要用到双向传输。PostScript 打印机可以说
是十分复杂。事实上,PostScript 的打印工作常常是由程序将工作送到打印机处理后,并
不打出来,而是将结果再传回计算机。PostScript 也使用双向传输将错误传回计算机。比
如说PostScript 程序有问题或是打印机卡纸。机器上的使用者可能会需要这些信息。更进
一步的,PostScript 打印机统计打印情况最好的方式就是使用双向传输。比如说:你可先
询问打印机启动以来一共打过几张,然后送出使用者要打的东西,打完后再询问一共打了几
张,由此就可得知得向使用者收多少纸张的钱。
那么,你该选择哪一种接口呢?
1. 如果你需要双向传输,那么就选择使用串口。FreeBSD 目前并不支持并口上的双向
传输。
2. 如果你不需要双向传输,那么,你只要选择你的打印机支持的接口即可,当然最好
是可以用并行端口,而将串行端口留作其它的用途—比如连接终端机或调制解调器
—通常并口传输比较快,设置起来也较容易。
3. 最后,如果还是不知道怎么选的话,就看哪个能用就接哪个吧。
11.3.1.1.2 并行口
用Centronics 连接线通过并口连接打印机和计算机。打印机的手册、计算机的手册这
两者都可以给你足够的安装说明。记住你所使用的并行口。在FreeBSD 里,第一个并行口是
/dev/lpt0;第二个则是/dev/lpt1,依此类推。
11.3.1.1.3 串行口
第4 页FreeBSD 使用手册
用适当的连接线通过串行口连接打印机和计算机。打印机的手册、计算机的手册这两者
都可以给你足够的安装说明。如果你不确定你的连线是否为“合适的串行口连接线”,你可
以试试下面几种不同用途的线:
1. 连接调制解调器的线。这种线是一个接脚对一个接脚直接对接的。这种线也叫做
“DTE-to-DCE”连接线。
2. Null-modem 连接线大部分是一个接脚对一个接脚直接对接,而有少部分接脚相互
交换(如send data 和receive data);有少部分接脚则是两端都是短路。这种线
也叫做“DTE-to-DTE”连接线。
3. 并行打印机连接线,某些不常见的打印机需要这种线。这种线类似null-modem 连
接线,但是有些信号是送到相对应的接脚而不是两端短路。
你应当为打印机设置通讯参数,通常可以利用打印机上的控制面板或是DIP 开关设置。
选择你的计算机和打印机同时支持的最高传输速率(单位为bps,bits per second,也称做
baud rate)。选择7 或8 的数据位;无、奇数或偶数的同位检查;1 或2 停止位。同时也选
择流量控制的方式:无、XON/XOFF (也称做“in-band”或“软件”)流量控制。记住你的软
件设置也要使用同样的值。
11.3.1.2 软件设置
这节说明如何设置FreeBSD 下的LPD spooling 系统,使其能打印。
下列是所需的步骤:
1. 如果需要的话,设置你的kernel,使该连接端口可被打印机使用。设置Kernel 这
一节将告诉你需要做些什么。
2. 如果你使用的是并行口,那么你得设置并口的通讯模式。设置并列端口的通讯模式
这一节有详细的说明。
3. 测试操作系统是否可以将资料送给打印机。检查打印机连接状况这节将给你一些关
于这一方面的建议。
4. 修改/etc/printcap 以正确设置LPD。/etc/printcap 设置文件将告诉你如何做。
第5 页FreeBSD 使用手册
11.3.1.2.1 内核配置
操作系统的kernel 为了能配合某些设备需要重新编译。而串口和并口就是这些设备之
一。如果你的kernel 目前并不支持你想用的串口或并口,那么你可能需要将它们加入你的
kernel 设置并重新编译。如果要检查你的kernel 目前是否支持串口,你可以用这个命令:
# dmesg | grep sioN
其中N 是串口的编号,从0 开始计算。如果你得到的结果类似下面这个样子:
sio2 at 0x3e8-0x3ef irq 5 on isa
sio2: type 16550A
表示你的kernel 支持这个通讯端口。
如果要检查你的kernel 目前是否支持并行口,你可以用这个命令:
# dmesg | grep lptN
其中N 是并行口的编号,从0 开始计算。如果你得到的结果类似
lpt0 at 0x378-0x37f on isa
表示你的kernel 支持这个通讯端口。
你可能会需要重新设置你的kernel 使得操作系统可以辨认并使用你连接打印机的并口
或串口。
如果要让你的kernel 支持串口,请参考关于重新编译kernel 的那一节。如果要让你的
kernel 支持并口,请参考关于重新编译kernel 的那一节以及下一节。
11.3.1.3 为端口新增/dev 下的设备文件
既然kernel 已经支持你所需的并口或串口,你仍然需要一个程序接口在系统里协助传
送和接收资料。这也是/dev 里设备文件存在的目的。
第6 页FreeBSD 使用手册
如果要在/dev 目录下为你的通讯端口建立相对应的设备文件:
1. 用su 命令切换成root。
2. 更改当前的目录到/dev 下:
# cd /dev
3. 输入:
# ./MAKEDEV port
其中port 是你想要建立的设备文件名称。如果是第一个并口,你可以用lpt0;如
果是第二个并口,你可以用lpt1,依此类推。如果是第一个串口,你可以用ttyd0
如果是第二的串口,而用ttyd1;依此类推。
4. 输入:
# ls -l port
以确定你刚刚是否建立成功。
11.3.1.3.1 为并口设置通讯模式
当你决定要用并口时,在FreeBSD 下你可以决定要用中断驱动(interrupt-driven)或是
轮询(polled)的方式与打印机沟通。
1. 中断驱动是GENERIC kernel 里默认的方式。如果选择这个方式,操作系统将利用
IRQ 来判断打印机是否已经准备好接收资料。
2. 而轮询的方式则是由操作系统一直重复地去询问打印机是否已经准备好可以接收
资料。如果打印机已经准备好了,那么kernel 再将要打印的资料送过去。
中断驱动的方式较快但是要占用一个IRQ。你可以从上述两者任选一个可以正常工作的
来使用。设置通讯模式有两种方式:设置kernel 或是使用lptcontrol 这个程序。
如果要从kernel 里设置:
第7 页FreeBSD 使用手册
1. 编辑你的kernel 设置文件。找出或是自行加入lpt0 这一项。如果你要设置使用第
二个并口,那就加入lpt1 这项。如果是第三个并口就用lpt2,依此类推。
如果你要设置使用中断驱动模式,那么要指定irq:
device lpt0 at isa? port? tty irq N vector lptintr
其中N 是你并口所使用的IRQ 编号。
如果你要用轮询模式,那么就不要指定irq:
device lpt0 at isa? port? tty vector lptintr
2. 将设置文件存储好后,重新编译、安装kernel 并重新启动。你可以参考内核配置那
一节里更详细的说明。
如果你想用lptcontrol 来设置通讯模式:
1. 输入:
# lptcontrol -i -u N
将lptN 设置为中断驱动模式。
2. 输入:
# lptcontrol -p -u N
将lptN 设置为轮询模式。
你可以把上述的命令加到你的/etc/rc.local 文件里使得每次启动时都可以自动设置。
你可以查看lptcontrol 以得到更多有关的信息。
11.3.1.3.2 检查打印机的通讯状况
在设置spooling 系统前,你应该先确定你的操作系统可以成功地将资料送到你的打印
机。将打印机的连接和spooling 系统分开来测试会较容易。
你可以送一些文字来测试你的打印机。打印机应该会马上将它们收到的资料打出来。
lptest 这个程序会送96 行每行96 个ASCII 文字的资料给你的打印机以协助测试。
第8 页FreeBSD 使用手册
使用PostScript(或是其它语言)的打印机测试起来较复杂。我们得先写一个较小的测
试程序,像下面这样:
%!PS
100 100 moveto 300 300 lineto stroke
310 310 moveto /Helvetica findfont 12 scalefont setfont
(Is this thing working?) show
showpage
注意:上面这个小程序是给使用PostScript 的打印机用的,不能给比如说Hewlett
Packard 公司的PCL 语言使用。PCL 语言可以让你打印纯文本,同时里面夹杂PCL 特别的命
令。PostScript 不能直接打印纯文本,因此对于这样的打印机,我们必需做一些特别的设
置。
11.3.1.3.2.1 检查一下并口打印机
这节将告诉你如何检查FreeBSD 是否可以使用接在并口的打印机。
测试并口上的打印机:
1. 用su 命令切换成root。
2. 将资料传送给打印机。
如果这个打印机可以直接打印纯文本,请使用lptest。输入:
# lptest > /dev/lptN
其中N 是你打印机所连接的并列端口。从0 开始计算。
如果这个打印机使用PostScript 或其它的打印机语言,那么送一个小小的测试程序给
打印机。输入:
# cat > /dev/lptN
然后,一行接着一行,小心的把你的命令打进去,因为你按下ENTER 后,就无法再修改
了。当你输入完毕后,按CONTROL+D 或是其它产生文件结尾字符的按键。或者是你可以将你
的测试程序放在一个文件里并输入:
# cat file > /dev/lptN
第9 页FreeBSD 使用手册
其中file 就是存储你测试程序的文件名。
你应该可以看到有一些东西打出来了。如果打出来的资料看起来不大正确,别担心,我
们等一会就修正它们。
11.3.1.3.2.2 检查一下串口打印机
这节将告诉你如何检查FreeBSD 是否可以使用接在串口的打印机。
测试串口上的打印机:
1. 用su 命令切换成root。
2. 编辑/etc/remote 这个文件,并加入下列几行:
printer:dv=/dev/port:br#bps-rate:pa=parity
其中port 指的是哪一个串口(ttyd0、ttyd1、等等),bps-rate 指的是该串口的传
输速度,而parity 是设置打印机是否需要同位检查(这个值可以是even、odd、none
或zero)。
下面这个例子是一台连接在串行端口上以19200 bps 传输的,同时不使用同位检查
的打印机设置方式:
printer:dv=/dev/ttyd2:br#19200:pa=none
3. 用tip 命令连上打印机。输入:
# tip printer
如果失败的话,再次编辑/etc/remote 这个文件同时以/dev/cuaaN 取代/dev/ttydN。
4. 将资料传送给打印机。
如果这个打印机可以直接打印纯文本,请使用lptest。输入:
~$lptest
如果这个打印机使用PostScript 或其它的打印机语言, 那么送一个小小的测试程序给
打印机。一行接着一行,非常小心地将程序输入,因为退格键或是其它编辑时常用的按键,
第10 页FreeBSD 使用手册
对打印机可能有特殊的意义。最后你可能要打一个给打印机的文件结尾的字符,让它知道程
序结束了。对PostScript 的打印机来说,是用CONTROL+D 键。
或者是你可以将你的测试程序放在一个文件里并输入:
~>file
其中file 就是存储你测试程序的文件名。用tip 将这个文件送给打印机后,而按文件
结尾字符。
你应该可以看到有一些东西打出来了。如果打出来的资料看起来不大正确,别担心,我
们稍待一会就修正它们。
11.3.1.4 启用spooler:编辑/etc/printcap 文件
到目前为止,你的打印机应该已经连接好了,你的kernel 应该也设置无误了,而且你
也可以传送资料给打印机了。现在,我们应该可以开始设置LPD 来控制打印机了。
LPD 的设置文件是/etc/printcap。每当spooler 被使用时,LPD spooling 系统就会来读这
个文件,所以只要这个文件一被修改,马上就会生效。
编辑printcap 这个设置文件是很简单的。用你喜欢的编辑器对/etc/printcap 这个设
置文件做修改就可以了。这个文件的格式写法和其它的设置文件如
/usr/share/misc/termcap 和/etc/remote 是相同的。关于这些设置文件的格式,请参考