摘自鸟哥的linux私房菜基础篇,来源自第二十一章,除此之外也参考了cups的官方手册。
发行版一般自带了相关的配置工具,不过随着unix上服务的标准化,现在unix的打印服务都只需要cups来管理了。现在新版的发行版,都是由cups负责打印。
unix上的打印一个是本地打印,另一个是网络打印。unix的支持都是很好的,并且都能通过cups简单地完成。
unix打印支持
要使用打印机,不仅要BIOS的支持,而且还需要unix系统的支持。其中的原因是,老式的打印机使用的是25针串口,此接口必须的BIOS中设为开启状态。至于系统,则是打印机制造商得提供相应的打印机驱动,unix才能使用该型号的打印机。
HP打印机对unix的支持程度很好,所以多选择HP品牌的打印机。
系统对于打印机的支持情况可以参考<www.linuxfoundation.org/en/OpenPrinting>里面的一个支持列表。
打印流程
打印过程中文档从文件经过格式转换被发送到打印机。由于打印机的工作的时候只能一份一份地打印,于是就产生了一个打印队列,在打印机工作时依次从打印队列中选择一份待打印的文档进行打印。
在系统中一个打印机拥有一个打印队列。打印队列一般以打印机的名子命名。将队列内的打印作业转成打印机识别的格式,交给打印机输出的程序称为打印服务。打印服务显然要认识与沟通打印机,因此就得连上打印机与驱动打印机。常见的打印服务有CUPS与LPRng,不过以CUPS为主流。
所谓的打印机驱动程序其实就是将打印作业数据转成打印机格式。Postscript是常见的打印格式。CUPS支持这种打印格式。打印驱动程序因此有很大一部分都是Postscript打印机描述档案(PPD)。
那么,是否打印机支持Postscript后,不同打印机驱动程序所完成的工作就大体上类似了呢。
如果没有PPD档案,我们可以使用Ghostscript解释打印作业数据以让打印机认识该格式。这样仍然可以顺利进行打印。
PPD驱动程序一般放在/usr/share/cups/model下面。需要的话还可以自己从上面的打印支持中下载所有的PPD档案。
CUPS的打印支持
CUPS支持联机打印。常见的打印分享方式有若干种。一种是socket方式。这种情况下使用的是internet套接字,端口一般为9100或者35.实际上可以通过输入端口socket:/host-printer:9100向打印机传送数据。另一种是LPD方式。LPD是较早出现的打印服务,LPDng就是使用这种方式实现联机打印。利用的是串行端口。还有一种是IPP方式。它是现在比较流行的打印机打印协议。CUPS预设也是这种方式。IPP启动后打印机会启动631端口,打印数据透过这个端口传送。
打印机或者unix主机启动IPP后可以直接使用浏览器输入 ipp://printer_ip//printername 或者 http:/printer_ip:631 直接在线处理打印机设定。最后一种是SMB。协诉使用的是smb://user:password@host/printer。
设备连接以后使用相应的接口进行标识。平行串行端口一般作为/dev/lpN出现,在CUPS里使用parallel:/dev/lpN来访问。USB打印机使用格式为usb:/dev/usb/lpN.
网络打印
管理unix打印非常简单。只要启动CUPS之后,就可以通过浏览器接口进行管理了。不过要注意,用户必须启动CUPS服务,且需要root权限,默认情况下只能通过localhost管理CUPS服务,也就是不能通过网络访问CUPS管理界面。
配置过程。如果要通过网络进行打印,首先通过打印机手册设置好打印机IP地址。然后在主机上使用ping检测打印机IP可连通。之后在主机上启动CUPS服务。成功标志是存在cupsd服务,并且cupsd监听了631端口。之后打开浏览器进行cups和管理界面。
在管理界面下进行设置打印队列名,添加打印机等工作。其中关键是设置队列名,所使用的打印服务,打印机型号以及打印机所在的URL地址。
如果没有相关打印机型号的驱动,其实只需要提供好合适的PPD文件就可以了。一般没有出现这个型号时,使用Postscript的PPD文件。之后还要输入root密码。
通过管理界面设置一般USB打印机过程类似。在进行这一过程之前要求我们已经知道打印机的设备名称。知道名称后如同上面的步骤添加打印机。不过,在选择打印机服务类型的时候选择本机设备。(一般有usb之类的字符。)
这样一来本机上的CUPS只为本地文件提供打印服务。如果要进行更改,还要进入CUPS管理界面,以设置允许其它主机访问。设置完成后,本机的CUPS就会提供一个供打印用的URL地址。这个URL就是其它主机访问打印机的方式。
上面都是自动配置方式。如果手动,则主要包括手动设置CUPS配置文件,设置打印驱动程序。
打印机管理
可以通过管理界面进行设置,也可以通过CUPS提供的lpadmin命令。lpadmin的实际作用只是管理打印机与管理与打印机关联的打印队列。
lpstat是CUPS提供的观察打印状态的指令。可观察的类别有打印机,打印队列,工作状态,CUPS状态,以及其它更为详细的信息。
在真正进行打印时,lp,lpr,lpq与lprm也许最为有用。它们可以管理用户的打印队列。
如何打印
要打印的文件的页面方向,纸张类型,缩放系数,文件名都可以通过lp命令设置。而且lp命令支持一些图片文件如JPEG格式的直接打印。
查看打印机PPD所支持的格选项可以使用lpoptions -p print -l 命令。打印机会知道它所支持的打印格式。通常都能使用PDF,PS,文本文件格式。
配置虚拟打印机
一般情况下我们使用真实打印机进行打印。此外suse上提供了默认的到PDF与PS格式的输出,这样也可以产生相关格式的文档。通常情况下,应用程序如果有到PDF格式的输出,应该使用应用程序提供的PDF输出功能,然后由实际的打印机打印PDF或者PS文档。但是如果应用程序没有这种功能,则我们可以使用虚拟打印机完成这一工作。
CUPS打印体系本身就已经允许发送到打印机的文档重新定向到某个文件里,但是这样还是比较麻烦。我们不想让CUPS负责由PPD处理输出的格式发送到文件里的话,可以使用虚拟打印机程序。这样一来,由这个虚拟打印机自动负责输出的位置。
广泛使用的一个工具是cups-pdf.这个程序非常地小。下载源代码之后,按照说明编译与安装程序。过程大致为,编译源代码,复制到CUPS的backend目录里,然后将conf复制到/etc/cups里面,以cups-pdf命名。再之后把代码包里的PPD文件复制到打印模块目录下。最后重新启动cups服务。添加打印机,型号选择Virtual PDF Printer.之后的配置,比如默认页面,输出文件位置等,参考cups-pdf.conf文档。
虽然给出了这个方法,但是我们还是把它作为最后方法,如果应用程序支持直接输出PDF或者PS格式,还是应当由应用程序产生,这样的质量一般比较高一些。