打印系统:LINUX打印系统

打印系统介绍

一、Linux打印

1.1 Linux打印简介

 

首先需要了解的是,打印在Unix世界的演化中总是围绕着PostScript页面描述语言展开的。该语言是由Adobe公司开发的,它是一个成熟的、用于描述一个文档每个页面内容的程序语言。它是一种与设备无关的打印机语言,即在定义图像时可以根本不考虑输出设备的特性(如打印机的分辨率、纸张大小等),而且它对文本和图形实行同样的处理流程,这给处理字体带来了极大的灵活性。通过PS驱动程序,各种不同的应用软件将各自的数据转换成PostScript格式。

如今很多打印机中都有一个嵌入式的PostScript解释器,它负责使用PostScript将页面在打印纸上再现出来。现在,所有桌面Linux应用程序都有一个打印选项,可以生成PostScript数据来打印整页的文档。

在Linux中,虽然PostScript是产生打印文档的事实上的标准,但打印机本身却并不需要知道PostScript,因为这需要使用到相对比较昂贵的技术。在一般情况下,尤其是在低端打印机中,PostScript数据要被翻译成打印机本地的页面描述语言。这是通过使用一个特殊的转化过滤器来完成的。一般而言,一个过滤器实际上就是一个特殊的程序,它可以处理输入的数据,并且输出经过加工的数据。现在,Linux打印系统中使用着各种不同的过滤器:转换过滤器、I/O过程器(负责将数据传送到设备)、处理过滤器(转换文档数据)。

打印系统的基础是一个假脱机程序(Spooler)。它可以管理打印任务队列,而一个队列通常和一个打印机相关联,并且用户提交的任务都是按照先进先出的原则来处理的。当一个打印任务被处理时,任务中的数据在送达打印机前一般都要通过一定数量的过滤器。Unix打印假脱机程序有很多种形式,目前在Linux系统中使用广泛的几种形式:

1)、BSD LPD打印系统

2)、LPRng打印系统

3)、通用Unix打印系统(CUPS)。cups允许用户为每个打印任务设定不同的选项而不用提前配置整个打印队列。每个打印队列的打印机选项被保存在PPD(PostScript printer description)文件中。在打印机配置对话框中这些选项可以被设成对用户可使用。默认情况,PPD文件允许用户控制所有打印机选项,但是系统管理员通过编辑PPD文件可以限制打印机的功能。

 

1.2 重要的标准打印机语言

1)、ASCII text。多数打印机至少能够打印ASCII文本,少数的打印机不能够打印ASCII文本,但是可以识别下面几种打印机语言。

2)、PostScript。PostScript打印机语言是Unix和Linux下公认的标准打印机语言。PostScript格式的输出可以被PostScript打印机直接打印,然而这些打印机相对成本高,因为PostScript打印机语言虽然强大但是复杂,需要较高的硬件成本去解析。

3)、PCL3,PCL4,PCL5e,PCL6,ESC/P,ESC/P2和ESC/P raster。光栅语言。

如果PostScript不被打印机支持,打印机过滤器用Ghostscript程序将PostScript格式的数据转换成其他格式的数据。Ghostscript根据不同的打印机使用不同的驱动。

 

1.3 打印流程

1)、打印任务可以通过命令行或者应用中启动;

2)、相应的打印数据暂时存储在打印队列中,然后由打印机spooler程序读取,并发送给打印过滤器;

3)、打印过滤器进行如下操作:

   a、过滤器判断打印数据的格式;

   b、如果数据格式不是PostScript格式,首先打印数据被转换成标准的PostScript格式。通常ASCII文本也被转换成PostScript格式;

   c、PostScript格式数据根据需要转换成另外格式的打印数据:

     ●如果打印机支持PostScript格式,不转换;

      ●如果打印机不是PostScript格式打印机,Ghostscript程序运行将PostScript格                                式数据转换成指定打印机支持的数据格式,然后将转换后得数据发送给打印机

4)、所有打印任务都发给打印机后,打印spooler从打印队列中删除该打印任务。

 

 

 

1.3 Linux打印原理

 

在Linux下采用假脱机(spooling)打印方法,当用户需要打印一个文件时,该文件并不直接送到打印机,而是送到spool目录下,然后由一个负责打印的后台进程把这些数据送入打印机。

Linux对每台打印机都定义了一个打印缓冲区,打印守护程序经常扫描缓冲区以查看有无要打印的新文件。如果存在,就按先进先出的顺序打印缓冲区中的文件。

Linux系统除了可以在本地打印机上打印外,还可以通过网络打印机远程打印。

Linux系统上的打印原理如下:

各种类型的文档经由一个(或一些)转换程序转换成用户正在使用的打印机可以识别的格式,即用各种类型的打印机语言描述的流,系统将这个流直接发送到打印机端口,由打印机对其进行解释并形成硬拷贝。

目前大多数Linux系统以下面的流程来实现文档到打印机语言的转换:

普通文本文件和各种类型的图形由适当的转换程序转换成PostScript文件,有些应用程序将其输出直接写成PostScript文件,这些PostScript文件经由一个作为打印机过滤器的应用程序Ghostscript转换成打印机语言。因此,如果系统的打印系统已经配置成使用Ghostscript作为打印过滤器,应用程序要实现的就是输出合乎程序要求和语法的PostScript文件。

 

1.4 Linux打印流程

 

在打印过程中,通常是应用程序产生输出并以管道的方式传送给lpr或者直接应用lpr打印一个文件。lpr与打印机后台服务程序通过网络进行连接并进行通信,传送相应的打印数据和打印选项。打印机后台服务程序将在相应的spool目录存储打印信息,在输出设备可以利用的情况下将打印任务送给打印设备。

 

二、cups

1、IPP和Server

IPP-- Internet Printing Protocol

Server --  http://localhost: 631

 

2、cups内部打印业务处理

1)、转换成PostScript

   根据...cups/mime.types判断打印文件格式,根据...cups/mime.convs决定采用哪个转换工具。

2)、统计。

  打印文件转换成PostScript格式之后,cups统计每个打印任务的页数,靠pstops程序完成(...lib/cups/filter/pstops),统计数据被写到...var/log/cups/page_log中,该文件的每一行包含如下信息:

●printer name(例如,lp)

●user name(例如,root)

●job number

●date and time(在方括号中)

●current page number

●number of copies

3)、转换成打印机认识的语言

  使用指定过滤器转换PostScript格式为打印机认识的语言格式,过滤器位于...lib/cups/filter/文件夹下,过滤器是由PPD文件中的*cupsFilter项决定。如果该项不存在,cups认为打印机支持PostScript,其它的设置项也在PPD文件中

4)、传送数据到打印机

  是最后一步,cups调用一个后端(back-end)。后端是特殊的过滤器,用于传输打印数据到设备或网络打印机。后端保持与设备或网络打印机的通讯。如果后端是usb,cups运行.../lib/cups/backend/usb,它会打开并锁定相应的USB设备文件,初始化,传递来自过滤器的打印数据。当打印任务结束,后端关闭并解锁USB设备文件

5)、无过滤器打印

  lpr -l 或者 lp -oraw ,通常打印出来的是空的。

 

 

3、cups的过滤系统

1)、The pre-filters

如果输入格式不是PostScript,预过滤器将转化它为PostScript格式(更确切的是转换成MIMEtype application/postscript),所使用的过滤器有:texttops,pdftops,hpgltops。(也有imagetops,但是严格来讲,它不是预过滤器):

2)、The pstops-filter

一旦有PostScript格式的可用内容(MIME type application/postscript),pstops filter开始工作。这个过滤器标准化前级输入的PostScript文件,另外执行统计操作(用户的设置,如页数等),它输出的格式为application/vnd.cups-postscript:

3)、The pstoraster-filter

再接着调用的是pstoraster过滤器,该过滤器是CUPS RIP(Raster Imageprocessor)的核心,目前它还衍生了Ghostscript版本5.50。该版本听起来相当的老,但是cups的开发者打了很多补丁,因此这个链中的光栅驱动程序依然能驱动很多喷墨打印机打印出高品质图片,Gimp-Print驱动在Epson打印机上的打印效果比厂家自己提供的Windows驱动打印效果更赞。(注意:pstoraster 工作的时候,cupsomatic开始工作,并且在返回光栅数据给cups后端(backend)之前,cupsomatic引导CUPS-PostScript)。

pstoraster输出光栅数据,格式为MIME type application/vnd.cups-raster:

4)、The imagetoraster-filter

如果输入文件格式是MIME type "image/*",打印机不是PostScript打印机,imagetoraster工作。

5)、imagetops-filter

输入文件格式是MIMEtype "image/*",打印机是PostScript打印机。

6)、The printer-specific filters

最后,但并非最不重要,CUPS光栅数据该转换成打印机特有的格式,同时嵌入与打印机交互的控制指令。这些都是靠打印机对应的特殊过滤器实现的,或者靠调用一个更加通用的但是带有打印机特殊参数的过滤器实现。此时,第三方过滤器可以被调用。

7)、Foomatic和cupsomaticfilter

Foomatic是Linuxprinting.org的数据库。它包含关于打印机模型、合适的Ghostscript驱动、支持的打印参数和驱动执行细节的最完整信息。你可以在网络服务器上使用"PPD-O-Matic"脚本存取这些信息,甚至可以产生针对任何打印机的最新的PPD文件(注:不应当再使用名为"CUPS-O-Matic"的老脚本产生PPD文件,因为和有些应用不兼容)。

最简单的方式:选择你的打印机模型,阅读说明,选定建议的驱动,点击产生PPD,保存PPD然后按照指南安装。PPD-O-Matic产生的PPD文件不是只能被CUPS使用,也能被其他识别PPD的程序使用。PPD文件包含所有可用的驱动和打印机的组合。PPD识别程序能够加载PPD文件,并且解析里面的内容。

为了PPD能够确切的在CUPS服务器上工作,一些先决条件要满足:

●cupsomatic Perl脚本要装在...lib/cups/filter/目录下;

●Ghostscript过滤器要安装,这将要被cupsomatic调用;

●一些Perl模块要安装,cupsomatic运行时需要。

与其他"non-PS-printer-PPD"类似,PPD-O-Matic产生的PPD文件有一行以"*cupsFilter"开始:

*cupsFilter:"application/vnd.cups-postscript 0cupsomatic"

这告诉cups在已经将输入打印数据通过上述标准过滤器机制转换成MIME type of "application/vnd.cups-postscript"格式后使用cupsomatic作为接下来的过滤器。cupsomatic读取该PPD文件中的选项和指令,通过这些指令Ghostscript命令行正确的启动,并且运行合适的过滤器。最后,cupsomatic将转换后得数据交给cups后端,然后后端将数据发送个打印机。

foomatic/cupsomatic将打印机和Ghostscript过滤器的工作整合,使得它在cups上可用。

8)、整体介绍

 

三、Foomatic

支持一款打印机最主要的问题是使spooler调用正确的过滤器,并且用户可以控制打印机。大多GNU/Linux分布式计算机使用自己的工具实现,但是这些工具通常支持的打印机不是最新的,并且只能操作很基本的功能。

为了改善这种情况,Grant Taylor创建了一个数据库,用于列出免费的打印机驱动,这个数据库叫做Foomatic,Foomatic目前位于linuxprinting.org。列出了所有免费的打印机驱动和它们的指令以及可用的选项,同时也列出了我们可以获得的所有打印机的支持情况。Foomatic以XML实现,它们是Perl脚本,这些脚本可以自动创建配置文件,为众多周知的免费spooler完成打印队列,这些免费spooler有:LPD、LPRng、GNUlpr、CUPS、PPR、PDQ等。通过Foomatic用户可以独立于spooler接口,因此可以以同样的方式操作所有的spooler。

使用Foomatic有两种方法:

●从linuxprinting.org获得必要的文件,并且手动放在某个位置。

●下载Foomatic包,然后使用它的命令行使用工具。

接下来会一步步的介绍怎样利用上述两种方法安装一款打印机。

 

利用linuxprinting.org网站配置打印机

1、在linuxprinting.org上查找打印机

2、为打印机选择合适的驱动(使用推荐的)

在linuxprinting.org上进行

3、查看目前系统中是否安装了所选择(所期望)的驱动

目前系统必须安装了Ghostscript。如果所选择的驱动类型是“Ghostscript”,则该驱动必须被编译进Ghostscript。执行gs -h,在可用设备行查看是否所选择的驱动被支持。如果不被支持,有两种选择:

1)、从打印机驱动主页下载驱动,在Ghostscript中编译它。

2)、下载并安装ESP GhostScript 7.05.4或者更新的包含所有"GhostScript"驱动的版本,版本可以从linuxprinting.org上找到。从两方面确保Ghostscript字体能用:一、确保已经安装指定的Ghostscript字体安装包;二、配置Ghostscript时指明字体,如下。

使用gs -h查询的Searchpath项中的后面就有Ghostscript的字体路径。

使用which + “驱动名”的方式查看是否Ghostscript中有自己的驱动,例如:$ which hpijs /usr/bin/hpijs

如果没有需要从驱动的主页下载安装该驱动。

4、为spooler获取配置文件(PPD文件)

登录http://www.openprinting.org/printers选择打印机型号,选择驱动,点击生成PPD文件,下载保存。注意,PPD文件不是打印机的驱动,它只是用来描述spooler怎样使用打印机驱动。

5、建立打印机队列

首先确保系统已经安装CUPS,安装了Ghostscript,安装了Foomatic;

拷贝生成的PPD文件到...usr/share/cups/model目录下;

重新启动cups;

使用命令行(对于嵌入式未开启远程管理的)或者CUPS的网络接口配置打印队列。命令行如下:

lpadmin -p DJ990 -E -v usb:/dev/usb/lp0 -m HP-DeskJet_990C-hpijs-ppd.ppd -o PageSize=A4

6、配置选项

配置打印机的选项,可以使用CUPS的web接口也可以使用命令行。

在web接口的主界面点击“ManagePrinters”,在指定的打印机上点击“Configure Printer”。以“root”用户登录,

以命令行为例:

1)、首先打印出打印机的帮助页(插上打印机-P之后是打印机的型号,-o docs使不打印,只在终端输出)。

lpr -P DJ990 -o docs ~/.bashrc

2)、列出打印机现在的设置项

lpoptions -p DJ990 -l

3)、配置打印机项

lpadmin -p DJ990 -o Resolution=600ColorCMYK -o Duplex=DuplexNoTumble

或者

lpoptions -p DJ990 -o Resolution=600ColorCMYK -o Duplex=DuplexNoTumble

 

使用Foomatic包配置打印机

1、安装Foomatic。

系统中必选先安装Perl和libxml2。也必须安装perl-devel和libxml2-devel包,因为这两个包在编译Foomatic时使用

./configure make make install

2、决定打印机数据库ID。

1)、使用foomatic-configure命令查询打印机在数据库中对应的id: foomatic-configure -O | less 输出为:

2)、设置。

这一步做完了所有的步骤:产生PPD,建立队列,配置打印机选项。

对于打印和任务管理可以使用foomatic-printjob命令:

四、cups使用

1、lpadmin

   用于配置CUPS套件中的打印机和类,也被用来设置打印服务器默认打印机。

语法

  

选项

  

     -x:删除指定打印机

   

参数

  

例如:lpadmin -p hp_lj_pm202n-E -v usb:/dev/usb/lp0 -m Generic-PCL-Laser.ppd

     lpadmin -d hp_lj_pm202n

 

2、lpstat

   用于显示CUPS中打印机的状态信息。

语法

  lpstat(选项)

选项

例如:lpstat -t

 

3、lp

   用于打印文件,或者修改排队的打印任务。与lpr命令类似,lp命令既支持文件输入也支持标准输入。它与lpr的不同之处在于它有一个不同(稍微复杂点)的参数选项设置。

语法

   lp(选项)(参数)
选项

   

更多参看https://www.cups.org/doc/man-lp.html

退出状态:

    

 

4、lpr

  用于将文件发送给指定打印机进行打印,如果不指定目标打印机,则使用默认打印机
语法

  

选项

   

更多参看https://www.cups.org/doc/man-lpr.html

 

5、lpoptions

  显示或设定打印机选项和默认值。如果没有指定默认打印机需要使用-p选项。该命令设定的参数被lp和lpr目录使用。当以root登录时,lpoptions为所有用户获得以及设定默认选项,这些选项存储在/etc/cups/lpoptions文件中。

语法

  

选项

详见https://www.cups.org/doc/man-lpoptions.html

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

打印系统移植

说明:板卡上使用的C库为glibc-2.10.1。而这一点恰恰限制了如下有些版本的软件不能使用。在移植过程中由于没有指导,因为版本的问题,尝尽苦头。

一、移植cups

版本:CUPS-1.5.4(由于历史原因,选取的。)

下载地址:

http://www.cups.org/software.php?VERSION=1.5.4&FILE=1.5.4/cups-1.5.4-source.tar.gz

下面介绍交叉编译过程,遇到的错误以及如何解决:

相关推荐

相关文章