分享
 
 
 

FreeBSD连载(30):配置打印机

王朝system·作者佚名  2006-11-23
窄屏简体版  字體: |||超大  

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

$ dmesg | grep lpt

nlpt0: on ppbus 0

nlpt0: Interrupt-driven port

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

通常不需任何配置,并口就能正常工作。此时就可以通过设备文件/dev/lpt0来直接访问并口(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/lpt0。

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

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

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

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

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语言,它使用页面描述语言来描述要打印的内容,可以直接打印的文件就是一个符合一定语法规则的文本文件,因此对于一个PostScript打印机来讲,一个普通文本文件只是一个不合乎语法的PostScript语言文件,不能被直接打印。

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

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

$ 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下正确显示PostScript文件的内容,并能实现各种强大的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 reserved.

This software comes with NO WARRANTY: see the file PUBLIC for details.

GS quit

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

在非PostScript打印机上打印

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

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

因此在前面的操作中生成了Postscript文件之后,就可以使用Ghostscript在一台非PostScript打印机上打印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 ghost@aladdin.com, using the form in Bug-form.htm.

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

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

#! /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过程就需要从网络上[1] [url=http://www.chinamx.com.cn/Article/os/FreeBSD/200605/20060530181949_31981_2.html][2] 下一页

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有