CUPS是Apple公司所有一个打印集成服务。包括了前端接收打印命令的相关程序,后端控制打印机硬件的程序,中间则是打印驱动。首先来看看CUPS驱动打印机的方式。这里要说明的是所谓驱动,其实是一系列的程序加定义文件的总和,不像我们有时候想像的那样是一个很简单的单一文件。当CUPS接受到打印命令时,首先会进行一个格式的预转换,比如将.jpg等各种文件先转换成PostScript格式(图1桔红方框)。然后进一步将PostScript格式转换成 CUPS内部格式,这个称为PostScript到PostScript转换,这两种PostScript格式还是有差别的,当然大家可以不必深究(我也没好好看,只是知道在MIME中定义了这两种不同的PostScript)。
    以上这些都是预处理工作,接下来CUPS的工作围绕PostScript展开,CUPS会根据PPD(PostScript Printer Description 文件)文件来选择相应的处理流程。PPD文件其实是驱动的核心,不同的打印机有不同的PPD文件,PPD 包含有关输出设备的信息,CUPS使用 PPD 文件中的信息来确定在打印文档时向打印机发送哪些 PostScript 信息。需要说明的是,CUPS实际上把所有打印机都“看成”PostScript打印机,即便打印机本身不支持PostScript,也可以通过CUPS 自带的PostScript解释程序(pstoraster)或者GhostScript来解释PostScript文件,从而把普通的打印机模拟成 PostScript打印机。图1中金色的线条显示就是CUPS处理PostScript文件的方式,按我的理解,可以分为三种,第一种就是接正在的 PostScript打印机的,而后面两种就是分别用CUPS的pstoraster或GhostScript来解释PostScript,虚拟出一台 PostScript打印机。三种工作方式能够分别支持不同的打印机(这也是CUPS兼容性非常好的原因):
    第一种,直接传输PostScript文件给CUPS的后台,再将打印流传输到PostScript打印机,接下来的事情全部丢给打印机去处理,当然,这种打印机大多价格不菲;
    第二种方式是交给CUPS的内置程序处理,把PostScript转换成其特有的raster格式,这种格式是CUPS特有的,至于为什么要转成这种格式,是为了方便打印机生产商,让他们可以只需开发CUPS的raster格式到其打印机的接口,方便大家统一,但似乎这一方式的驱动还不多。
    第三种方式,也是支持打印机最多的方式,叫做GhostScript格式的驱动模式。它其实和第二种打印驱动比较类似,只把CUPS的解释器换成了外置的 GhostScript来解释PostScript文件,之所以这么周折,是因为目前支持这种方法的打印机比支持CUPS的raster的打印机要多很多。GhostScript程序是独立于CUPS运行的,它的功能也不仅限于打印,但很多情况下通过CUPS来调用GhostScript打印是件很方便的事情。foomatic则是用于连接CUPS和GhostScript的一个脚本程序(用perl写的),用来打包各种不同格式的打印机命令,它非常有用,对于通过CUPS调用GhostScript来说则是必须的。GhostScript格式的驱动程序很多,大家可以到Open Printing - OpenPrinting去看看,现在大部分打印机在Linux都是用GhostScript驱动的。当然,有些时候,GhostScript还不能包打天下,像HP的1020就比较特殊,它的打印流有点不一样,需要再用特殊的程序进行处理,GhostScript负责讲PostScript格式转换成点阵模式后,还要进过foo2zjs处理,转换成特殊的打印流,再交给后台。这种模式,相当于给GhostScript又装了个插件,附加了一个小模块。
    总之,无论是哪种模式,实际上CUPS都是把打印机“看成”PostScript打印机,或是直接调用,或是用自带的方法虚拟,或者用GhostScript虚拟。

打印驱动的安装
用Ubuntu系统为例,命令行仅供参考,实际安装时可能会因为系统和版本的差别或有差异,可针对不同的系统作些修改。
    万丈高楼平地起,首先,要安装的是CUPS本身,这个相对还是很方便的:
        sudo aptitude install cupsys cupsys-client
安装的cupsys是CUPS服务,cupsys-client则是管理连接CUPS用的。理论上这个时候要是你的打印机是PostScript打印机,或者在CUPS支持的范围内,只需将PPD文件往CUPS相应的目录一放,你就能够用CUPS打印了。但实际上,大多数打印机在Linux下还是需要 GhostScript来驱动的。关于CUPS的服务配置,我们最后一起讨论。所以,下一步:
        sudo aptitude install ghostscript
(插一句,在ubuntu下,本人推荐用aptitude替代apt-get,aptitude处理包的依存关系比apt-get要好)
安装上GhostScript后,别忘记装foomatic,否则CUPS还是调用不过来的:
        sudo aptitude install foomatic
(再次罗嗦下,foomatic五个部分,用aptitude可以一次搞定安装,apt-get似乎要敲好几次,建议)
到此为止,只要再稍加配置,系统就应该已经能够支持很多种打印机了。GhostScript本身就已经带了很多打印机的驱动,还有很多GhostScript标准写的驱动,可以从Open Printing - OpenPrinting下载到。
至于像hp 1020这样的机器,我们还得多装一点东西,不用担心,此程序的作者已经想得很周到了,只需稍许几个命令就能解决安装。(参考rkkda.com - 

下载:
wget -O foo2zjs.tar.gz

解压缩:
tar zxf foo2zjs.tar.gz

进入相应的目录:
cd foo2zjs

编译foo2zjs:
make

取得打印机的韧件(firmware):
./getweb 1020

安装:
sudo make install

安装热插拔系统支持:
sudo make install-hotplug

安装到CUPS系统:
sudo make cups

这样,所有的安装工作都完成了。接下来需要配置调试CUPS服务了。

CUPS系统的配置
    CUPS系统装好的时候是只能从本地打开的,就是安装CUPS的那台机器能打开:http://127.0.0.1:631。如果要支持从其他机器登录,要修改配置文件:/etc/cups/cups.d/ports.conf,在里面添加要监听的地址,例如:

Listen 127.0.0.1:631
#默认的本地监听

Listen /var/run/cups/cups.sock
#默认的监听端口

Listen 192.168.1.2:631
#要添加的监听地址

另外,由于安全的需要,CUPS将很多从网络安装维护打印机的功能作了限制,经过尝试,建议对配置文件再做一些修改,增加几个配置参数,降低一些安全设置,以方便在普通内网条件下使用。当然,如果你对安全性有很大的要求,请参考相CUPS的说明进行修改:

# Authenticate against system accounts by default...

...

DefaultEncryption IfRequested
#添加默认的对密码加密的要求

... ... ...

# Restrict access to the server...

...

Allow 192.168.1.0/24
#添加可以访问服务器的网段

... ... ...

# Restrict access to the admin pages...

...

Allow 192.168.1.0/24
#添加那些机器可以访问管理页面

... ... ...

# Restrict access to the admin pages...

...

Encryption Never
#表示访问管理员页面无需对密码加密

... ... ...

配置完成后,就可以通过web页面来管理你的打印机了。

最后,将PPD文件放到/usr/share/cups/model目录下,CUPS就能识别你的打印机了。
     PPD文件哪里来的呢,这个有很多途径可以获得:CUPS自己本身带了很多PPD已经在/usr/share/cups/model/cups- included/目录下存在;从linuxprinting网站,也能下载到很多的PPD文件;还有,最经典的,可以用foomatic- compiledb编译出来,当然这个编译过程需要相应的数据库支持,默认编译的时候,会把所有foomatic支持的都编译出来,选择你要的就好了。以 HP1020为例,你可以直接从linuxprinting网站下到PPD;也可以在安装好foo2zjs后,用foomatic编译一个PPD文件,编译好后的文件存放在当前目录下的ppd/文件夹里。最后把对应型号的PPD文件拷贝到/usr/share/cups/model就完成了。

CUPS系统的使用
    在使用CUPS,需要添加打印机,打开打印机。然后输入CUPS服务器地址“http://192.168.1.2:631”打开web页面管理,点击 “Administration”页面,可以看到添加打印机的按钮,点击按照提示选择相应的端口和打印机信号就能完成安装(图形界面添加打印机)。该过程和在 widnows下安装很类似,完成后可以点“Print Test Page”试下测试页,打印机很快就会打出相应的页面。到此,我们已经完全完成了对CUPS系统的配置,打印服务已经可以直接使用了。在Linux服务器上,可以直接调用CUPS服务打印文件。另外也能通过网络,共享这台打印机,让其他的系统包括Windows系统使用这台打印机。

在Window下使用CUPS共享的打印机
在Windows下,安装CUPS共享的打印机。网上有很多解决方案,很多方案提到用samba来共享打印机,那种方法可行,但配置samba也是一项比较复杂的工作。我们完全可以使用CUPS的网络打印功能,来完成这一任务。例如图4,添加一台网络打印机并输入URL:http://192.168.1.2:631/printers/HP_LaserJet_1020_USB_1,就可以完成打印机添加了,之后的步骤和安装普通的本地打印机一样。其中“192.168.1.2:631/printers”是CUPS打印服务所在地址和端口,“HP_Laser_1020_USB_1”是你的打印机名。

总结
    通过CUPS的配置,我们能够将普通的打印机安装在Linux服务器上,从而提供网络服务,相比市售的网络打印机,这种方法不但降低了成本,一台带有 64M内存的奔腾就能很好的完成任务,而且该服务器还能同时兼任NAT,Web Server,FTP等服务,为10台以内的机器服务绰绰有余,CPU占用率100%的时间很少;而且相对传统网络打印机CUPS打印服务更加灵活可靠。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐