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。

用CUPS打印

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的客户端了。

OpenOffice

OpenOffice有自己的打印配置程序,但如果你使用了CUPS,完全没有必要再去配置什么,OpenOffice可以自动识别到CUPS系统中添加的打印机。

Mozilla Firefox

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

用Acrobat Reader使用打印机时,在其打印对话框中有Command选项,其缺省值为/usr/bin/lpr,因此用户必须安装cupsys-bsd软件包才行。如果打印时并非使用缺省的打印机和选项,则需要在这里进行自己设置。

gedit

在GNOME 2.8中,其打印组建gnomeprint已经比较成熟了。如果你现在仍然使用GNOME 2.8以前的版本,我建议你更新一下,这样gedit就可以正常地打印了。

命令行

CUPS的命令行程序有lplpstatcancel,对应的BSD打印命令行工具是lprlpqlprm。这些命令行程序都有很多参数,在CUPS的用户手册中有详细的描述,在此就不赘述了。需要说明的是,当传递给lp的文件不是PostScript或者PDF格式时,CUPS都要选择一个程序来将其转换为这个格式,其打印效果也就不得而知了。因此,建议用户首先想办法生成一个PS/PDF文件,然后再打印。

gtklp

要记住lp的每一个选项还是一件挺麻烦的事情,gtklp是一个允许用户在图形界面下选择打印选项的工具。它支持所有的CUPS选项,只要点点鼠标就可以打印啦。用户选择完毕后,它会自动调用lp命令的。gtklp软件包中还有一个gtklpq程序,通过它,可以查看和修改打印队列。

共享

共享打印机给Linux用户对于CUPS来说非常简单,只需要修改/etc/cups/cupsd.conf文件,允许其它用户访问/printer资源就可以了。我不知道Windows是否支持ipp协议,如果支持,也可以用这种方式打印。

常见的问题

  1. 为何XX程序不能打印中文?

    如上所属,能不能打印中文,关键在于负责生成PostScript的程序是否能够支持中文,很多老的命令行工具都是无法支持中文的,即便是新的软件,也不见得能够支持地很好。

  2. 显示时的中文粗体为何打印的时候没有?

    现在很多用xft/fontconfig的朋友都打了firefly的粗体补丁,但这个补丁仅仅是用在显示上的。当打印时,往往是直接从字库中提取字形信息,并嵌入到PostScript文件中的,字库里面是什么样子,打印出来就是什么样子。

  3. 我的打印机,Linux支持的不是很好,怎么办?

    我有一台Mac,还有一套正版的Windows,我打电话给微软客服,但它们却告诉我如果你要使用Windows,就一定要选择跟Windows兼容的计算机。如果你要用Linux,买硬件之前就一定要做一些简单的调查研究,对于那些技术很差根本不懂得如何支持Linux的硬件厂商的产品,就千万不要买。http://www.linuxprinting.org上可以查到各种打印机和Linux的兼容情况,查一下,除了兼容性之外,还能知道有些打印机为什么会便易,而另一些为什么贵。

posted on 2004-12-15 16:27  I love I think  阅读(6920)  评论(3编辑  收藏  举报