在Unix世界里,PostScript语言是主要用于打印的接口。所有主要的应用程序都会输出通用的PostScript页面,而这些PostScript经过打印系统处理后再被打印出来。打印在Unix世界的演化中总是围绕着PostScript页面描述语言展开的。该语言是由Adobe公司开发的,它是一个成熟的、用于描述一个文档每一页面内容的程序语言。如今很多打印机中都有一个嵌入式的PostScript解释器,它负责使用PostScript将页面在打印纸上再现出来。现在,所有桌面Linux应用程序都有一个打印选项,可以生成PostScript数据来打印整页的文档。这种方法和其它面向桌面的操作系统有很大的不同,大部分Unix系统是提交任务至队列中,并且希望它能够正确地打印出来。但是并没有一种统一的收集打印机信息或工作状态的方法,这严重影响了那些需要提供打印能力的Linux应用程序。在Linux中,虽然PostScript是产生打印文档的事实上的标准,但打印机本身却并不需要知道PostScript,因为这需要使用到相对比较昂贵的技术。
在一般情况下,尤其是在低端打印机中,PostScript数据要被翻译成打印机本地的页面描述语言。这是通过使用一个特殊的转换过滤器来完成的。一般而言,一个过滤器实际上就是一个特殊的程序,它可以处理输入的数据,并且输出经过加工的数据。现在,Linux打印系统中使用着各种不同的过滤器:转换过滤器、I/O过程器(负责将数据传送至设备)、处理过滤器(转换文档数据)。打印系统的基础是一个假脱机程序(Spooler)。它可以管理打印任务队列,而一个队列通常和一个打印机相关联,并且用户提交的任务都是按照先进先出的原则来处理的。当一个打印任务被处理时,任务中的数据在送达打印机前一般都要通过一定数量的过滤器。
使用PostScript页面描述语言进行打印的优点是极大的简化的设计,不用像Windows系统一样安装各种打印机驱动程序。但是它的缺点是许多打印机(特别是低端打印机)不能解析PostScript输出,Linux系统对此的解决方法是从打印机队列调用Ghostscript( )软件包支持你的打印机。要查看Ghostscript在你的Linux发行版本上支持什么打印机列表,可以在命令行下键入:
$gs --help |
gs命令会列出一份它支持的打印机和输出设备的名单。gs命令使用-r选项设置打印分辨率。调整ghostscript的输出结果,假如gs 的输出不能让人满意,还有一些办法::输出的位置及大小。位置,大小,还有图像在页面上的视觉比例是由ghostscript中的打印机驱动程序所控制的. 如果你发现打印出来太短, 太长或是大了两倍, 你可能会想要看一下驱动程序的原始模组并且调整任何所能想到的参数。
一代的BSD LPD打印系统,这个打印系统源自于伯克利的Unix发行版,BSD LPD是用于Linux发行版(比如Slackware)的第一个打印系统。现在仍然有发行版(Debian、Slackware)还会带有这种假脱机打印程序。BSD打印系统核心的功能仅限于队列任务。它由一个后台程序(lpd)及一些位于/etc目录下的配置文件组成,在这些配置文件中有着队列和属性的一些定义。在相应的目录下,还有一系列基本的用于提交、删除和处理任务使用的命令(lpd、lprm、lpc)。BSD LPR是BSD打印系统重要一个部分,因为它定义了LPD网络协议,而该协议是用于提交任务至远程LPD后台程序的,并且它允许Unix工作站实现一个打印服务器的功能。现在,所有的网络打印机都支持这个协议。由于它使用范围非常广泛,所有其它打印系统都要求至少可以和其它的LPD后台程序进行会话。 下面是如何在printcap文件中定义一个远程队列的例子。在这个例子中,任务将会被即时传送至远程监控程序的队列之中,并且不会在本地机进行处理。
remote: :sd=/var/spool/lpd/remote: :rm=printserver.domain.tld: :rp=queue: :mx#0: |
LPD协议传送数据被分成两个部分。首先会生成一个描述任务的控制文件,并且传送该文件。该控制文件包含有源用户、文件名和所有与工作相关的信息。接着就会传送数据文件,它的格式完全取决于目前正在使用的打印语言。
第二个使用较广、较有影响力的基于BSD的打印系统是LPRng(LPR Next Generation),该系统实际上重写了原来的BSD LPR系统,但原有概念都保留了下来。保留了printcap文件的格式,但是它还引入了一些新的属性以使配置过程更加灵活。过滤器定义可以被独立出来,并且还可以定义真正的I/O过滤器。用户也可以通过在本地机主目录下编写printcap文件来定义自己的队列。LPRng打印系统的优点:1、不需数据库环境就可以执行lpr lpc lprm命令。2、打印队列可以自动转向。3、打印工作可以自动保留。4、多重打印机可以使用同一打印队列。5、客户端不需这些SUID root。6、可以大幅度提高安全性检查。7、可以使用Printconf工具维护配置文件(/etc/printcap)。LPRng还提供了模拟Unix System V风格的打印命令(lp、lpstat等)。随LPRng发行的还有IFHP过滤器,它可以用在队列中,用于自动转换一些数据格式(比如打印ASCⅡ文本或图像)。
通用Unix打印系统(CUPS) 是比较新的打印系统。CUPS 软件为 Unix/Linux 用户提供了以有效而可靠的方式来管理打印的方法。它生来就支持 IPP(因特网打印协议),IPP协议的四个主要目的是:1、帮助用户寻找为了上可用的打印机。2、 传送打印作业。3、传送打印机状态信息。4、取消打印作业。并有 LPD、SMB(服务器消息块,例如与 Microsoft Windows 连接的打印机)和 JetDirect 接口。CUPS采用的另外一个标准是PPD(PostScript Printer Definition)文件格式,这是Adobe另外一个用于PostScript打印机的标准。从以上可以看出CUPS打印系统是目前Linux打印系统中最好的选择,从Red hat Linux 9.0开始它取代了LPRng成为Linux缺省安装的Linux打印系统。Linux支持许多种类的打印机,从老式的针式打印机,到最新的激光打印机,都可以使用。了解目前Linux 支持什么打印系统非常重要,下面我们看看几个主流Linux发行版本使用的打印系统。CUPS还采用了很多过滤器用于传送数据至打印机的方法。与BSD类的假脱机程序不同的是,这是通过一种更加智能的方式来完成的。下面是在CUPS中可用的部分过滤器:
1.后端过滤器。它可以提供最终数据进行传送的端点。这些过滤器可用于并口、TCP/IP套接字连接、LPD和其它端点的连接。
2.文档转换过滤器。该过滤器是作为CUPS一个标准配置一起发行的。它可以转换图像、ASCⅡ文本、PDF文件和HP-GL/2矢量文档至PostScript。
3.接口过滤器。它可以将文档从PostScript转换至其它过渡的文件格式。
表-1 主流Linux发行版本使用的打印系统
发行版本和产品序列号 | 默认安装打印系统 | 可以兼容打印系统 |
RedHat Enterprise Linux 4.0 | CUPS | LPRng |
CentOS 4.2 | CUPS | LPRng |
Mandrake Linux LE2005 | CUPS | LPRng |
Debian GNU/Linux 3.1r0 | BSD LPD | CUPS, LPRng |
Slackware Linux 10.2 | LPRng | 无 |
SuSE Linux 9.3 | CUPS | 无 |
Turbo Linux 10F | CUPS | 无 |
Gentoo 2005.0 | CUPS | 无 |
CUPS是跨桌面的,也就是说你可以在GNOME或KDE下安装你的打印机工作。CUPS主要功能:
Print 将文件发送到特定的URI的打印机; Validate 设定打印优先级别
Creat 将文件作为打印作业处理; Cancal 取消打印作业
Pause 暂停打印作业;Resume 恢复打印作业
Purge 清除打印作业
下面我们看如何为你的Linux系统配置打印系统。以Red Hat Enterprise Linux 4.0为例。
二、打印机驱动程序查询和安装
一般来说我们购买的普通打印机附带的光盘中没有Linux的驱动,如果我们不知道是否可以在Linux下使用。这时可以查看: 站点,这里包含了大量关于在 Linux 上打印的信息。点击网页右列的:Printer Listings。进入查询界面后输入打印机厂商和型号后,即可进行查询。通常会得到四个查询结果:
1、perfectly(完全支持Linux下打印,并且可以使用打印机所有功能和打印分辨率)。
2、mostly(大部分功能支持Linux下打印,有一些小缺陷)。
3、partially(只有一部分功能支持Linux下打印,许多功能不能实现例如彩色打印机只能打印黑白图像)
4、paperweight(完全不支持Linux下打印)。笔者使用的是HP 的designjet430Cannon查询结果
HP designjet430查询结果是:perfectly ,有三个企鹅标志。经过测试打印图像时能达到硬件的最大分辨率:1440*1440 dpi。 网站提供的驱动程序的后缀是.PPR文件,最简单的安装方法是使用系统提供的打印机管理工具,双击“添加打印机”在选择驱动程序时指向下载的PPR文件即可。
三、配置CUPS打印系统
如果系统是从以前的使用 LPRng打印系统 的 Red Hat Linux版本升级而来的,升级过程不会使用 CUPS 来替代 LPRng;系统仍会继续使用 LPRng。要使用CUPS首先需要停止原来的打印守护进程,启动CUPS服务一共分成3个步骤:
1、停止原来的打印守护进程:
# chkconfig –level 2345 lpd off |
2、启动CUPS守护进程:
# chkconfig –level 2345 cups on |
3、切换打印系统,运行命令:
# redhat-switch-printer |
切换界面见图-2(另外如果需要恢复使用LPRng打印系统, 以上过程是可逆的。