当前所在位置:FreeBSD使用大全>>
FreeBSD连载(30):配置打印机(2)
 
作者:王波
 

在非PostScript打印机上打印

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

  然而要想充分发挥打印机的能力,打印包括图形在内的文档,就必须有能理解这台非PostScirpt打印机使用的控制语言的过滤器。这些过滤器就相当于Windows下的打印机驱动,应该由生产这台打印机的厂商提供。但是很多低档打印机是专门为使用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 reserved.
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 messages
 -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 eps9mid
   eps9high lp8000 lq850 epsonc st800 stcolor lp2563 dnj650c deskjet djet500
   cdeskjet djet500c cdjcolor cdjmono cdj500 cdj550 cdj670 cdj850 cdj890
   cdj1600 laserjet ljetplus ljet2p ljet3 ljet3d ljet4 lj4dith cljet5
   lj5mono lj5gray pj pjetxl pjxl paintjet pjxl300 pxlmono bbox pxlcolor
   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 jpeg
   jpeggray mgrmono mgrgray2 mgrgray4 mgrgray8 mgr4 mgr8 pcxmono pcxgray
   pcx16 pcx256 pcx24b pcxcmyk pdfwrite plan9bm pbm pbmraw pgm pgmraw pgnm
   pgnmraw pnm pnmraw ppm ppmraw pkm pkmraw pngmono pnggray png16 png256
   png16m psmono psgray psrgb pswrite epswrite sgirgb t4693d2 t4693d4
   t4693d8 tek4696 tiffcrle tiffg3 tiffg32d tiffg4 tiff12nc tiff24nc tifflzw
   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.htm.
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文件,安装并配置各种过滤器,安装Ghostscript等。这些操作都非常烦琐,幸好FreeBSD通过Ports Collection提供了一种自动配置打印机的apsfilter程序。

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

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

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

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

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


使用和控制打印机

  当一切都配置正确之后,使用打印机就非常简单了。为了自动启动lpd守护进程,需要将/etc/rc.con f文件中的lpd_enable项设置为lpd_enable=”Yes”,FreeBSD在下次系统启动时会自动启动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在第一行提醒使用者当前打印机不正常。由于这台打印机工作不正常,因此用户可能不想使用这个打印机进行打印了,而想通过其他打印机进行打印。为了避免在这台打印机正常之后,仍然打印这个作业,需要将这个打印作业删去。这可以通过命令lprm加上作业序号(显示在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://freebsd.online.ha.cn/

声明:本站的文章和软件是本人从网上收集整理的(除本人的作品之外),所有版权属于作者,
如有侵犯您的权益,请指出,本站将立即改正,谢谢.

Copyright 2000 www.newok.com