linux下面打印的问题一直没有解决直到看到这篇文章。收藏。
打印对于Linux/Unix类系统来说,曾经没有一点问题,但那是很久以前的事情了。随着各种新型打印机的出现,特别是很多不支持PostScript功能的廉价打印机,曾一度使在Linux上的打印变得非常困难。但现在,情况已经完全不同了,在Linux上打印已经越来越方便,用Linux作为打印服务器,已经成为很多大小企业的选择。
在具体讲述如何安装打印机之前,先来看一下对于打印的一些比较关键的问题。
- 打印机的命令方式:从总体上来看,打印的命令方式可以分成文本、PostScript和其它种类。所谓文本,就是那些比较古老的针式打印机,我们可以直接 cat text_file > /dev/lp0 ,这种打印机现在已经很少使用了,在Linux上使用这类打印机是一点问题都没有的。相信PostScript这个词大家都是听说过的,PS实际上是一种专门用语打印方面的脚本语言;能够直接支持PostScript的打印机,通常都是非常高级的办公用打印机;PS语言是计算机和这类打印机之间沟通的方式。
再有就是现在我们经常用到的各种比较低档的打印机,喷墨的或者激光的都有;它们不支持PostScript,通常都是使用厂家自己的命令集。 - 应用程序的打印支持:Linux上的各种应用程序,都是通过输出PostScript来描述需要打印的页面的,而在将来,这种趋势不会发生任何变化。
- GhostScript:对于支持PostScript的打印机而言,要支持Linux是比较容易的,但对于那些并不支持PostScript的打印机而言,就必须要能够把PostScript格式的页面描述,转换成为这些打印机能够识别的打印命令。而GhostScript就是用来完成这个工作的,它能够解析PostScript命令,并用相应的驱动来显示它们。譬如GhostScript可以把一个PS文件显示在屏幕上,也可以借助打印机厂商的驱动将PS文件转换成打印命令。
- PPD:PPD是用来描述打印机功能的文件,要使用一款打印机之前,必须找到其PPD文件,并正确地安装到打印管理器程序上。
- 打印管理程序:作为一个多用户多任务的操作系统,Linux上的所有程序都是基于多任务、多用户而设计的,打印也不例外。为了让不同的用户、不同的任务在打印的时候不会产生冲突,就需要一个打印管理程序。这类管理程序很多,从传统的LPD,到时下非常流行的CUPS。它们功能各异,但有一点不变的就是都是用来协调打印任务的。CUPS的工作方式如下:通过命令行接收要打印的文件;通过文件的类型判断是否需要将其转换为PostScript,如果需要,则调用相应的应用程序进行转换;通过PPD文件来判断GhostScript应使用何种驱动处理此PostScript文件;把GhostScript处理的结果输出到打印设备上。
- 把一切整合在一起:由于打印领域长时间的混乱,诞生了各种打印管理程序,而要学会为每一个打印管理程序安装驱动,是一件痛苦的事情(仅仅学习CUPS却是非常愉快的)。于是就出现了foomatic,它的作用是通过一种方式管理所有的打印机,把PPD和打印管理程序的配置屏蔽掉,给用户一个统一的界面。
综上所属,要在Linux上使用一台打印机,首先必须确定它被支持,然后需要选择一个打印管理程序并配置好打印驱动。最后,能否产生正确漂亮的打印结果,则要看应用程序能否生成正确的PostScript文件。过去,有很多程序不能正确的打印中文,主要就是因为它们不能正确的处理中文的字符集或者中文字体。下面,我会介绍在Debian上安装配置CUPS并进行打印的过程,并不包括foomatic。
Common Unix Printing System(CUPS)是一个出现的比较晚的打印管理程序,也正是如此,它的功能很现代,界面也非常友好。出现的晚,并不代表功能少和支持不广泛,CUPS拥有丰富的功能,支持各种各样的打印机,且被各种应用程序广泛地支持。
Debian上的CUPS被分散在几个软件包中,包括库、服务器、客户端等等。连接了打印机的机器需要安装服务器,而要提交打印任务的机器,则必须安装客户端。服务器的包是cupsys,客户端的包是cupsys-client和cupsys-bsd,前者是CUPS自己的客户端,后者是用来替换BSD的lp命令的,这样可以让一些比较古老的应用程序继续通过lp命令进行打印。
通过apt-get命令分别安装打印机和服务器:
# apt-get install cupsys foomatic-filters
# apt-get install cupsys-client cupsys-bsd
foomatic-filters这个软件包对于CUPS系统来说是非常必要的,千万别忘了。
这里我们所说的驱动程序,包含以下三个方面:
- PPD文件:要获得这个文件有很多的方法,但最简单的就是到http://www.linuxprinting.org去下载。同一台型号的打印机有时会有不同的PPD文件,譬如HP LaserJet 5000就有四个,要根据硬件的情况来选择,譬如其中的PostScript类型就不能用于HP LaserJet 5000LE款的打印机上,因为这一款打印机去掉了PostScript模块。下载PPD文件后,要将其复制到安装了CUPS服务器的计算机的/usr/share/cups/model目录中,然后重新启动CUPS的服务器。
- GhostScript驱动:GhostScript有几个版本,其中Debian缺省使用的是gs-esp。这个版本的GhostScript已经将各种Free的驱动编译到其中。
- 其它程序:如果是用HP系列的打印机,通常会需要hpijs。不同的厂商还会提供一些用于管理其打印机的程序,譬如检查墨盒容量等等,可根据自己的需要安装。
安装好打印驱动之后,下一步的工作就是把已经完成的设备添加到CUPS的打印设备列表里面。这一步可以有很多种方式,但最简单的,就是用CUPS自己的Web管理界面。在安装了CUPS服务器的计算机上,访问http://localhost:631/就可以了。当添加打印机时,用户需要输入账号密码,此时可以用root账号,但只要用户在lpadmin这个组中,就可以管理打印机了。
添加的第一步是选择打印机的名称、位置、描述等,名称是比较重要的,以后都会用到。在选择完制造商后,就可以看到上述PPD文件所描述的打印机信息了,如果你找不到,可能是忘了重新启动cupsys服务。
通过Web界面,可以完成全部管理打印机的操作,包括开启、关闭打印机,取消打印作业等等。如果要打印一个文件,就需要借助应用程序或者是CUPS的客户端了。
Mozilla Firefox在使用打印机前,需要进行简单的设置。编辑文件/usr/lib/mozilla-firefox/defaults/pref/unix.js,并加入如下两行:
pref("font.FreeType2.enable", true);
pref("font.directory.truetype.1","/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType/");
在Firefox的软件包中,上述文件并不存在,不用担心,加上就可以了。
用Acrobat Reader使用打印机时,在其打印对话框中有Command选项,其缺省值为/usr/bin/lpr,因此用户必须安装cupsys-bsd软件包才行。如果打印时并非使用缺省的打印机和选项,则需要在这里进行自己设置。
CUPS的命令行程序有lp、lpstat和cancel,对应的BSD打印命令行工具是lpr、lpq和lprm。这些命令行程序都有很多参数,在CUPS的用户手册中有详细的描述,在此就不赘述了。需要说明的是,当传递给lp的文件不是PostScript或者PDF格式时,CUPS都要选择一个程序来将其转换为这个格式,其打印效果也就不得而知了。因此,建议用户首先想办法生成一个PS/PDF文件,然后再打印。
-
为何XX程序不能打印中文?
如上所属,能不能打印中文,关键在于负责生成PostScript的程序是否能够支持中文,很多老的命令行工具都是无法支持中文的,即便是新的软件,也不见得能够支持地很好。
-
显示时的中文粗体为何打印的时候没有?
现在很多用xft/fontconfig的朋友都打了firefly的粗体补丁,但这个补丁仅仅是用在显示上的。当打印时,往往是直接从字库中提取字形信息,并嵌入到PostScript文件中的,字库里面是什么样子,打印出来就是什么样子。
-
我的打印机,Linux支持的不是很好,怎么办?
我有一台Mac,还有一套正版的Windows,我打电话给微软客服,但它们却告诉我如果你要使用Windows,就一定要选择跟Windows兼容的计算机。如果你要用Linux,买硬件之前就一定要做一些简单的调查研究,对于那些技术很差根本不懂得如何支持Linux的硬件厂商的产品,就千万不要买。http://www.linuxprinting.org上可以查到各种打印机和Linux的兼容情况,查一下,除了兼容性之外,还能知道有些打印机为什么会便易,而另一些为什么贵。