精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>电脑技术>>● FreeBSD>>网络书籍>>《FreeBSD使用大全》>>FreeBSD连载(30):配置打印机

主题:FreeBSD连载(30):配置打印机
发信人: Hopper()
整理人: hahalee(2000-02-28 20:02:04), 站内信件
http://www.sina.com.cn 1999年12月2日 23:09 王波

配置打印机
  本地打印机通常连接到计算机的并口上,因此在安装打印机之前,首先要查
看并口的状态是否正常。正常情况下,缺省的硬件配置将能够自动侦测到计算机
的并口,那么在启动时,系统将在控制台上显示下面的信息,如果由于滚屏太快
而没有看到这一行的话,可以使用dmesg命令进行查看:

$ dmesg | grep lpt
nlpt0:  on ppbus 0
nlpt0: Interrupt-driven port
 
 

  在FreeBSD 3.0之前使用lpt作为打印机的驱动程序,这个老驱动程序对于现
有具备多个模式的并口硬件支持能力不足。3.1之后系统的并口驱动程序更新了,
使用了nlpt作为新的驱动程序名字,但设备文件的名字仍然为 /dev/lpt0。以后
当老版本的驱动程序彻底从FreeBSD中消失之后,驱动程序名字会恢复为lpt。

  通常不需任何配置,并口就能正常工作。此时就可以通过设备文件/dev/lpt
0来直接访问并口(0表示第一个并口,依次类推),如果并口和打印机的电缆连
接也正常,就能测试打印机是否正常,此时需要root权限。

# lptest > /dev/lpt0
 
 

  如果对于普通行式打印机,这将打印出一页测试信息,但如果打印机是使用
PostScript或其他页面描述语言,打印机并不一定进行打印,但打印机的状态指
示灯将闪烁。如果打印机是PostScript打印机,可以使用下面命令来测试:

# lptest | a2ps -q -o - > /dev/lpt0
 
 

  这需要预先通过Packages Collection安装好a2ps软件,其中使用的-q参数表
示不输出a2ps 的状态信息,-o -参数表示向标准输出输出转化后的PS数据,如果
没有使用这个参数,则a2ps直接将PS数据发送给lpr命令,由于此时打印系统还未
设置完毕,因此需要直接输出到打印机端口上以进行测试。

  当这个测试正常之后,就可以尝试使用lpr命令来打印文档了。当然此时打印
系统的设置还没有完成,缺省的设置并不一定适合每个计算机。应该调整打印设
置,使得打印系统适合本系统。


打印机配置文件printcap

  当并口和打印机连接正确之后,可以进行下一步配置/etc/printcap文件了。
在BSD打印系统中,使用这个printcap文件来定义打印机,包括命名打印机、将打
印缓冲区和具体的打印机相联系等。下面的例子中配置了两个打印机,一个为本
地的LaserJet 6P型打印机,另一个为远程FreeBSD计算机printersvr上的打印机


lp|lj|ps|HP LaserJet 6P:\
     :lp=/dev/lpt0:sd=/var/spool/lpd/lp:lf=/var/log/lpd-errs:sh:mx#0:\

     :if=/usr/local/libexec/lpfilter:

rlp|remote printer:\
     :rm=printersvr:rp=lp:sd=/var/spool/output/lpd/printersvr:lf=/var/
log/lpd-errs:
 
 

  从上面的例子可以看出printcap文件的格式:

  printcap中的每行描述由多个部分组成,每个部分用 “:” 分隔;由于对打
印机的描述一行写不下,必须使用反斜杠 “\” 分隔,这是Unix和C语言的标准
做法。为了避免出现配置错误等问题,不要在同一个描述部分的中间续行;

  每行中的第一个描述部分定义打印机的名字,通常可以用多个名字来称呼一
个打印机,例如本例中第一个HP LaserJet 6P又有另外的名字lp、lj和ps,这些
名字方便用户和不同的程序使用打印机。这些名字之间使用竖线 “|” 分隔,习
惯上使用最后一个名字作为打印机的全名;

  每个打印机的各个定义部分定义了打印机的不同属性,定义方式就是上例中
使用的方式,定义字符串使用 “=“ ,定义数值使用 “#” 。一个打印机应该
具备下面的不同属性:

  lp(local printer)定义本地打印机使用的设备,通常为并口设备/dev/lp
t0。

  rm(remote machine)定义远程计算机的名字,这在使用远程打印机时有用


  rp(remote printer)的值应该为rm定义的远程计算机上的一个打印机名。
远程打印机不需要l p来定义打印机端口,但需要使用rm和rp定义,以将打印文件
发送到远程计算机上的正确打印机中。这个打印机名应该在远程计算机中/etc/p
rintcap中进行了定义。如果没有使用rp定义而只使用了rm定义,则使用该计算机
上的缺省打印机。

  sd(spool directory)定义这个打印机使用的缓冲区目录,这个目录一般放
在/var/spo ol的下面,并拥有合适的权限设置,以使得打印系统能正确处理缓冲
区。系统缺省使用/var/spool/lpd目录来放置要打印的文件,不同的打印机应使
用这个目录下的不同子目录,习惯上这个目录名与前面定义的打印机名字相一致


  lf(log file)定义与这个打印机相联系的日志文件,记录出现的错误信息
,习惯上放在/var/lo g目录下。

  mx(maximum size)定义缓冲区中打印文件的最大尺寸,单位为千字节,缺
省值为0,表示不限制打印文件的大小。

  if(input filter)定义一个输入打印过滤器,过滤器程序用于将用户打印
作业的格式转变为打印机能够识别的格式。

  of(output filter)定义输出过滤器,这也是一个打印过滤器,习惯上使用
if的多些,使用of 的少些。如果if和of都没有定义,打印系统则使用缺省的过滤
器/usr/libexec/lpr/lpf。

  sh(suppress header),不打印标题页。

  mc(maximum coyies)定义最大的打印份数,缺省为0不限制打印份数。

  br(baud rate)定义串口波特率,只有在使用串口打印机时才有用。

  当将prinrcap文件设置正确之后,就能够使用打印命令lpr来打印文本文件了
,由于没有设置打印中文或图形的过滤器,打印系统只能打印英文文件,它将处
理过的文件直接发送到打印机上进行打印。


在PostScript打印机上打印

  大多数打印机不但能打印字符,也能够打印图形,应用软件通过输出控制字
符对打印机进行控制。这些控制字符就被称为打印机控制语言。为了将字符和图
形文件输出到打印机上,就需要过滤器将打印文件转化为打印机识别的打印语言


  打印过滤器是打印程序的一个重要部分,使Unix的打印系统更为灵活,从而
能适合各种不同的打印机。除了将文档转换为打印机识别的语言之外,还可以对
要打印的文件做其他处理,例如某些行式打印机需要文档同时使用回车和换行,
而 Unix的文本文件只使用换行,此时直接打印文档就会造成行列不齐,这些情况
下就需要一个过滤器进行转换。

  打印机控制语言可以分为两类,一种将操纵打印机进行绘图的命令及其他控
制命令通过特殊字符(或特殊字符引导的命令)来表示,对普通字符文件不作处
理,直接发送到打印机。此时普通英文字符文件可以直接发送到打印机上打印,
但要打印包括图形在内的文件就是包括特殊控制字符的二进制文件,不能用文本
方式进行查看。另一种为Postscript语言,它使用页面描述语言来描述要打印的
内容,可以直接打印的文件就是一个符合一定语法规则的文本文件,因此对于一
个Po stScript打印机来讲,一个普通文本文件只是一个不合乎语法的PostScrip
t语言文件,不能被直接打印。 

  因此如果要在仅支持PostScript的打印机上打印普通文档,也必须使用识别
PostScript的过滤器进行转换,首先将普通文本文件转换为PostScript语言,再
发送给PostScript打印机进行打印。Fr eeBSD的Packages Collection中专门有一
个类别print,提供了很多打印相关的软件包,其中包括很多种将文本文件转换为
PostScript文件的过滤器程序,如a2ps等。其中gb2ps能将GB编码的文本转换未内
嵌中文的PostScript文件,从而能在PostScript打印机上将中文文件打印出来。


  因此首先应该安装这些转换软件包,当安装了这些转换程序之后,最简单的
使用方式是先使用他们将文档转换为Po stscript文件,再发送给打印命令lpr,
这可以通过管道来实现。一些打印工具内部就包括了使用管道,自动将生成的Po
stscript数据发送给lpr命令的指令,下面的a2ps指令就直接将PostScript文件发
送给l pr命令。

  $ a2ps file 

  或者可以在printcap文件中设置if参数,以自动使用这些过滤器,此时要设
置过滤程序从标准输入上读入数据,将PostScript数据从标准输出上输出。

   :if=/usr/local/bin/a2ps -q -o -:

  对于要使用gb2ps来打印中文文件的情况,由于gb2ps使用参数读入源文件、
并输出PostScript 中文文件,不使用标准输入输出,因此不能直接使用gb2ps作
过滤器程序,而需要自己使用临时文件保存中间结果,生成 PostSript文件之后
再打印。此外,gb2ps输出的PostScript文件都包括一页gb2ps的版权信息,对于
打印来讲没有必要每次都打印这个版权页,可以使用psutils中包括的psselect程
序,从原有文件中去除第一页,再进行打印。

  高级的过滤器程序应该能够识别各种不同格式的文档文件,并依据文档的格
式,使用不同的过滤器功能来进行处理,最后生成符合打印机描述语言的打印文
件。 


PostScript与Ghostscript

  PostScript使用命令来描述页面,虽然也是文本文件,但这里都是绘图指令
,需要一个PostScript 语言解释器对文件中描述的指令进行解释操作,才能得到
正确的结果。因此PostScript文件在普通打印机上只能打印出源文件,同样普通
文档在PostScript打印机上也不能正确解释、打印出来。下面是一个PostScript
 文件的开始部分:

%!PS-Adobe-3.0
%%Creator: gb2ps
%%CreationDate: Fri Oct 31 18:36:45 1998
%%DocumentNeededResources: font Symbol
%%+ font Courier
%%+ font Times-Roman
%%DocumentSuppliedResources: file images/file.ps
%%Pages: 32
%%PageOrder: Ascend
%%Orientation: Portrait
%%EndComments
%%BeginProlog
 
 

  如果要查看PostScript的内容,则需要一个页面语言解释器。虽然存在不少
商业PostScript解释器,但大部分并不见得比Ghostscript好,虽然GhostScript
只是一个免费的PostScript 解释器。GhostScript能在X Window下正确显示Post
Script文件的内容,并能实现各种强大的 PostScript处理能力。Ghostscript是
一个相当复杂的程序,如果仅仅是要查看Postscript 文件的内容,可以使用命令
 “gs psfile.ps” ,退出时在Ghostscript提示下输入 “quit ” 即可。

$ gs psfile.ps
Aladdin Ghostscript 5.50 (1998-9-16)
Copyright (C) 1998 Aladdin Enterprises, Menlo Park, CA.  All rights re
served.
This software comes with NO WARRANTY: see the file PUBLIC for details.

GS> quit
 
 

  另外,Ghostscript有一个前端程序Ghostview,能使用Ghostscript来浏览P
ostScript 文件,但使用了比较简单的图形操作方式。Ghostscirpt和Ghostview
都可以通过Packages Collection 安装。


在非PostScript打印机上打印

  通常非PostScript打印机使用特殊的ESC序列来表示命令,而对普通文本不做
特殊处理,因此文本文件仍然被看作文本文件,能够直接打印文本文件,因此这
些非PostScript的打印机能够直接设置为普通的文本打印机来使用。

  然而要想充分发挥打印机的能力,打印包括图形在内的文档,就必须有能理
解这台非PostScirpt打印机使用的控制语言的过滤器。这些过滤器就相当于Wind
ows下的打印机驱动,应该由生产这台打印机的厂商提供。但是很多低档打印机是
专门为使用DOS或Windows的计算机生产的,没有为Unix配置过滤器,因此在这些
打印机上打印图形就遇到了困难。幸运的是,Ghostscript能够识别很多种打印机
,并能将PostScript文件在指定的设备上打印出来。

  因此在前面的操作中生成了Postscript文件之后,就可以使用Ghostscript在
一台非Post Script打印机上打印PostScript文件,下面文件将在一台Laserjet4
打印机上打印test.ps 文件。

# gs -sDEVICE=ljet4 -sOutput=/dev/lpt0  test.ps
使用gs -help能列出一系列Ghostscrit支持的设备文件,有些是打印机设备,有
些是代表不同的图形格式的伪设备。
$ gs -help
Aladdin Ghostscript 5.50 (1998-9-16)
Copyright (C) 1998 Aladdin Enterprises, Menlo Park, CA.  All rights re
served.
Usage: gs [switches] [file1.ps file2.ps ...]
Most frequently used switches: (you can use # in place of =)
 -dNOPAUSE           no pause after page   | -q       `quiet', fewer m
essages
 -gx  page size in pixels   | -r  pixels/inch resolution
 -sDEVICE=  select device         | -dBATCH  exit after last file
 -sOutputFile= select output file: - for stdout, |command for pipe,
                                         embed %d or %ld for page #
Input formats: PostScript PostScriptLevel1 PostScriptLevel2 PDF
Available devices:
   appledmp iwhi iwlo iwlq hl7x0 bj10e bj200 bjc600 bjc800 lbp8 lips3 
m8510
   uniprint la50 la70 la75 la75plus lj250 declj250 ln03 ap3250 epson e
ps9mid
   eps9high lp8000 lq850 epsonc st800 stcolor lp2563 dnj650c deskjet d
jet500
   cdeskjet djet500c cdjcolor cdjmono cdj500 cdj550 cdj670 cdj850 cdj8
90
   cdj1600 laserjet ljetplus ljet2p ljet3 ljet3d ljet4 lj4dith cljet5

   lj5mono lj5gray pj pjetxl pjxl paintjet pjxl300 pxlmono bbox pxlcol
or
   ibmpro jetp3852 imagen cp50 necp6 oce9050 oki182 okiibm r4081 sj48 
xes
   bmpmono bmp16 bmp256 bmp16m ccr cgmmono cgm8 cgm24 sxlcrt dfaxhigh

   dfaxlow faxg3 faxg32d faxg4 bit bitrgb bitcmyk cif miff24 inferno j
peg
   jpeggray mgrmono mgrgray2 mgrgray4 mgrgray8 mgr4 mgr8 pcxmono pcxgr
ay
   pcx16 pcx256 pcx24b pcxcmyk pdfwrite plan9bm pbm pbmraw pgm pgmraw 
pgnm
   pgnmraw pnm pnmraw ppm ppmraw pkm pkmraw pngmono pnggray png16 png2
56
   png16m psmono psgray psrgb pswrite epswrite sgirgb t4693d2 t4693d4

   t4693d8 tek4696 tiffcrle tiffg3 tiffg32d tiffg4 tiff12nc tiff24nc t
ifflzw
   tiffpack x11 x11alpha x11cmyk x11cmyk2 x11cmyk4 x11cmyk8 x11gray2
   x11gray4 x11mono nullpage
Search path:
   . : /usr/local/share/ghostscript/5.50 :
   /usr/local/share/ghostscript/fonts
For more information, see /usr/local/share/ghostscript/5.50/doc/Use.ht
m.
Report bugs to [email protected], using the form in Bug-form.htm.
 
 

  从这些简单的名字中很难判断那个设备对应于自己的打印机型号,为了找出
正确的设备文件名,需要阅读Ghost script的文档device.txt,或者选择相近的
设备名并反复尝试。如果万一找不到自己的文件名,也许要升级 Ghostscript的
版本,或者更新自己Ghostscript的设备驱动之后再重新安装Ghostscript 。

  当能够使用Ghostscript打印文档之后,就需要将它和FreeBSD的打印过滤器
集成在一起了,因此首先要将打印的文档转换为PS文档,然后将PS文档转换为打
印机支持的格式,因此就需要更改过滤程序。例如在一个EP SON行式打印机上输
出文档,使用的标准过滤应该是,最后两个短横线表示标准输出和标准输入:

#! /bin/sh
a2ps -q -o - | \
gs -sDevice=epson -sOutfile=- - 
 
 


使用apsfilter配置打印机

设置打印机要手工编辑/etc/printcap文件,安装并配置各种过滤器,安装Ghost
script等。这些操作都非常烦琐,幸好FreeBSD通过Ports Collection提供了一种
自动配置打印机的apsfilter程序。

Ports Collection的机制、用法将在后面讨论。

为了使用apsfilter设置打印机并配置过滤器,就需要执行下列命令:

# cd /usr/ports/print/apsfilter/
# make install
 
 

  然后,系统将自动下载、编译安装必要的过滤器软件,此后将自动启动一个
设置程序,通过菜单提示让用户选择打印机的各种属性,包括打印机的类型、端
口、分辨率、纸张大小等等。最后将自动生成合适的printcap文件和各种过滤器
。这些过滤器能分辨要打印文件的类型,进行正确的处理。

  apsfilter生成的过滤器是调用包括ghostscript在内的大量其他软件,因此
上面的make过程就需要从网络上下载必要软件包,可以通过预先安装相应的Pack
ages以减少下载任务。如果网络太慢,下载过程可能会出现问题导致软件安装问
题,后面会讲到如何为Ports Collection手工下载必要的软件包。


使用和控制打印机

  当一切都配置正确之后,使用打印机就非常简单了。为了自动启动lpd守护进
程,需要将/etc/rc.con f文件中的lpd_enable项设置为lpd_enable=”Yes”,F
reeBSD在下次系统启动时会自动启动lpd。当lpd没有启动时,也不需要重起计算
机,简单使用root身份执行lpd就可以启动这个守护进程。有了l pd守护进程,打
印系统就能正常进行打印工作,并能针对整个网络上的用户,提供打印服务了。


  使用者可以直接使用lpr命令打印文件,或者通过管道来使用lpr命令。

$ lpr hello.c
$ ls | lpr
 
 

  如果系统中某个打印机没有配置打印过滤器,用户可以直接使用自己的打印
过滤器,通过管道将输出送到lpr中。这提供了一种较灵活的配置方式,使得用户
不需要root权限,也能使用合适的打印机过滤器。下面是一个使用gs打印文件的
例子:

$ gs -dNOPAUSE -q -sljet4 -sOutputFile=\|lpr -- tt.ps
 
 

  注意这个例子中使用反斜线取消竖线的特殊含义,将其和紧随其后的lpr一起
作为参数发送给gs,gs再将其解释为管道操作。可以将上面的文件编制成shell程
序,这样每次就能更方便的使用。

  当使用lpr将打印作业放入打印缓冲区之后,就能使用lpq命令来查看打印队
列的内容:

$ lpq
waiting for lp to become ready (offline ?)
Rank   Owner   Job  Files                 Total Size
1st    user    1    hello.c                151 bytes
2nd    user    2    (standard input)      3359 bytes
3nd    user    3    (standard input)     43765 bytes
 
 

  在这个例子中,由于打印机lp没有被正常连接到系统上,因此lpq在第一行提
醒使用者当前打印机不正常。由于这台打印机工作不正常,因此用户可能不想使
用这个打印机进行打印了,而想通过其他打印机进行打印。为了避免在这台打印
机正常之后,仍然打印这个作业,需要将这个打印作业删去。这可以通过命令lp
rm加上作业序号(显示在lpq中第三列)来完成:

$ lprm 1
dfA001freebsd.domain dequeued
cfA001freebsd.domain dequeued
 
 

  或者使用all作参数,这将删除该用户的所有打印作业。用户只能删除自己的
打印作业,只有root才能删除其他用户的作业。如果root使用all参数,那么将会
将这个打印机缓冲区中的所有打印作业全部清空。

  作为系统管理员,需要进一步的能力来管理打印守护程序。BSD风格的打印系
统使用lpc来执行这个功能,以 root身份启动lpc,则进入lpc的交互模式,然后
使用help命令可以得到管理命令的列表。一般可以使用start all 命令来启动所
有的打印机,或者使用stop lp命令来停止一台名为lp的打印机。

# lpc
lpc > start all
 
 

  也可以用命令行的方式使用lpc,例如重新启动所有的打印机,使用带参数的
lpc发出以下命令:

# lpc restart all
 
 

未完,待续。。。  



--
小多子:你知道我们佟家百年不衰的道理么?
        那就是,不要一条路走到黑!

※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.96.190.123]

[关闭][返回]