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