全部博文(1144)
分类: LINUX
2006-04-24 09:31:46
一、Linux打印系统发展路线图
在Unix世界里,PostScript语言是主要用于打印的接口。所有主要的应用程序都会输出通用的PostScript页面,而这些PostScript经过打印系统处理后再被打印出来。打印在Unix世界的演化中总是围绕着PostScript页面描述语言展开的。该语言是由Adobe公司开发的,它是一个成熟的、用于描述一个文档每一页面内容的程序语言。如今很多打印机中都有一个嵌入式的PostScript解释器,它负责使用PostScript将页面在打印纸上再现出来。现在,所有桌面Linux应用程序都有一个打印选项,可以生成PostScript数据来打印整页的文档。这种方法和其它面向桌面的操作系统有很大的不同,大部分Unix系统是提交任务至队列中,并且希望它能够正确地打印出来。但是并没有一种统一的收集打印机信息或工作状态的方法,这严重影响了那些需要提供打印能力的Linux应用程序。在Linux中,虽然PostScript是产生打印文档的事实上的标准,但打印机本身却并不需要知道PostScript,因为这需要使用到相对比较昂贵的技术。
在一般情况下,尤其是在低端打印机中,PostScript数据要被翻译成打印机本地的页面描述语言。这是通过使用一个特殊的转换过滤器来完成的。一般而言,一个过滤器实际上就是一个特殊的程序,它可以处理输入的数据,并且输出经过加工的数据。现在,Linux打印系统中使用着各种不同的过滤器:转换过滤器、I/O过程器(负责将数据传送至设备)、处理过滤器(转换文档数据)。打印系统的基础是一个假脱机程序(Spooler)。它可以管理打印任务队列,而一个队列通常和一个打印机相关联,并且用户提交的任务都是按照先进先出的原则来处理的。当一个打印任务被处理时,任务中的数据在送达打印机前一般都要通过一定数量的过滤器。
使用PostScript页面描述语言进行打印的优点是极大的简化的设计,不用像Windows系统一样安装各种打印机驱动程序。但是它的缺点是许多打印机(特别是低端打印机)不能解析PostScript输出,Linux系统对此的解决方法是从打印机队列调用Ghostscript( )软件包支持你的打印机。要查看Ghostscript在你的Linux发行版本上支持什么打印机列表,可以在命令行下键入:
$gs --help
gs命令会列出一份它支持的打印机和输出设备的名单。gs命令使用-r选项设置打印分辨率。调整ghostscript的输出结果,假如gs 的输出不能让人满意,还有一些办法::输出的位置及大小。位置,大小,还有图像在页面上的视觉比例是由ghostscript中的打印机驱动程序所控制的. 如果你发现打印出来太短, 太长或是大了两倍, 你可能会想要看一下驱动程序的原始模组并且调整任何所能想到的参数。
一代的BSD LPD打印系统,这个打印系统源自于伯克利的Unix发行版,BSD LPD是用于Linux发行版(比如Slackware)的第一个打印系统。现在仍然有发行版(Debian、Slackware)还会带有这种假脱机打印程序。BSD打印系统核心的功能仅限于队列任务。它由一个后台程序(lpd)及一些位于/etc目录下的配置文件组成,在这些配置文件中有着队列和属性的一些定义。在相应的目录下,还有一系列基本的用于提交、删除和处理任务使用的命令(lpd、lprm、lpc)。BSD LPR是BSD打印系统重要一个部分,因为它定义了LPD网络协议,而该协议是用于提交任务至远程LPD后台程序的,并且它允许Unix工作站实现一个打印服务器的功能。现在,所有的网络打印机都支持这个协议。由于它使用范围非常广泛,所有其它打印系统都要求至少可以和其它的LPD后台程序进行会话。 下面是如何在printcap文件中定义一个远程队列的例子。在这个例子中,任务将会被即时传送至远程监控程序的队列之中,并且不会在本地机进行处理。
remote:
:sd=/var/spool/lpd/remote: :rm=printserver.domain.tld:
:rp=queue:
:mx#0:
LPD协议传送数据被分成两个部分。首先会生成一个描述任务的控制文件,并且传送该文件。该控制文件包含有源用户、文件名和所有与工作相关的信息。接着就会传送数据文件,它的格式完全取决于目前正在使用的打印语言。
第二个使用较广、较有影响力的基于BSD的打印系统是LPRng(LPR Next Generation),该系统实际上重写了原来的BSD LPR系统,但原有概念都保留了下来。保留了printcap文件的格式,但是它还引入了一些新的属性以使配置过程更加灵活。过滤器定义可以被独立出来,并且还可以定义真正的I/O过滤器。用户也可以通过在本地机主目录下编写printcap文件来定义自己的队列。LPRng打印系统的优点:1、不需数据库环境就可以执行lpr lpc lprm命令。2、打印队列可以自动转向。3、打印工作可以自动保留。4、多重打印机可以使用同一打印队列。5、客户端不需这些SUID root。6、可以大幅度提高安全性检查。7、可以使用Printconf工具维护配置文件(/etc/printcap)。LPRng还提供了模拟Unix System V风格的打印命令(lp、lpstat等)。随LPRng发行的还有IFHP过滤器,它可以用在队列中,用于自动转换一些数据格式(比如打印ASCⅡ文本或图像)。
通用Unix打印系统(CUPS) 是比较新的打印系统。CUPS 软件为 Unix/Linux 用户提供了以有效而可靠的方式来管理打印的方法。它生来就支持 IPP(因特网打印协议),IPP协议的四个主要目的是:1、帮助用户寻找为了上可用的打印机。2、 传送打印作业。3、传送打印机状态信息。4、取消打印作业。并有 LPD、SMB(服务器消息块,例如与 Microsoft Windows 连接的打印机)和 JetDirect 接口。CUPS采用的另外一个标准是PPD(PostScript Printer Definition)文件格式,这是Adobe另外一个用于PostScript打印机的标准。从以上可以看出CUPS打印系统是目前Linux打印系统中最好的选择,从Red hat Linux 9.0开始它取代了LPRng成为Linux缺省安装的Linux打印系统。Linux支持许多种类的打印机,从老式的针式打印机,到最新的激光打印机,都可以使用。了解目前Linux 支持什么打印系统非常重要,下面我们看看几个主流Linux发行版本使用的打印系统。CUPS还采用了很多过滤器用于传送数据至打印机的方法。与BSD类的假脱机程序不同的是,这是通过一种更加智能的方式来完成的。下面是在CUPS中可用的部分过滤器:
1.后端过滤器。它可以提供最终数据进行传送的端点。这些过滤器可用于并口、TCP/IP套接字连接、LPD和其它端点的连接。
2.文档转换过滤器。该过滤器是作为CUPS一个标准配置一起发行的。它可以转换图像、ASCⅡ文本、PDF文件和HP-GL/2矢量文档至PostScript。
3.接口过滤器。它可以将文档从PostScript转换至其它过渡的文件格式。
表-1 主流Linux发行版本使用的打印系统
发行版本和产品序列号
默认安装打印系统
可以兼容打印系统
RedHat Enterprise Linux 4.0
CUPS
LPRng
CentOS 4.2
CUPS
LPRng
Mandrake Linux LE2005
CUPS
LPRng
Debian GNU/Linux 3.1r0
BSD LPD
CUPS, LPRng
Slackware Linux 10.2
LPRng
无
SuSE Linux 9.3
CUPS
无
Turbo Linux 10F
CUPS
无
Gentoo 2005.0 CUPS 无
CUPS是跨桌面的,也就是说你可以在GNOME或KDE下安装你的打印机工作。CUPS主要功能:
Print 将文件发送到特定的URI的打印机; Validate 设定打印优先级别
Creat 将文件作为打印作业处理; Cancal 取消打印作业
Pause 暂停打印作业;Resume 恢复打印作业
Purge 清除打印作业
下面我们看如何为你的Linux系统配置打印系统。以Red Hat Enterprise Linux 4.0。为例。
二、打印机驱动程序查询和安装
一般来说我们购买的普通打印机附带的光盘中没有Linux的驱动,如果我们不知道是否可以在Linux下使用。这时可以查看: 站点,这里包含了大量关于在 Linux 上打印的信息。点击网页右列的:Printer Listings。进入查询界面后输入打印机厂商和型号后,即可进行查询。通常会得到四个查询结果:
1、perfectly(完全支持Linux下打印,并且可以使用打印机所有功能和打印分辨率)。
2、mostly(大部分功能支持Linux下打印,有一些小缺陷)。
3、partially(只有一部分功能支持Linux下打印,许多功能不能实现例如彩色打印机只能打印黑白图像)
4、paperweight(完全不支持Linux下打印)。笔者使用的是HP 的designjet430Cannon查询结果截图如下:
图1 打印机查询结果
HP designjet430查询结果是:perfectly ,有三个企鹅标志。经过测试打印图像时能达到硬件的最大分辨率:1440*1440 dpi。 网站提供的驱动程序的后缀是.PPR文件,最简单的安装方法是使用系统提供的打印机管理工具,双击“添加打印机”在选择驱动程序时指向下载的PPR文件即可。
三、配置CUPS打印系统
如果系统是从以前的使用 LPRng打印系统 的 Red Hat Linux版本升级而来的,升级过程不会使用 CUPS 来替代 LPRng;系统仍会继续使用 LPRng。要使用CUPS首先需要停止原来的打印守护进程,启动CUPS服务一共分成3个步骤:
1、停止原来的打印守护进程:
# chkconfig –level 2345 lpd off
2、启动CUPS守护进程:
# chkconfig –level 2345 cups on
3、切换打印系统,运行命令:
# redhat-switch-printer
切换界面见图-2(另外如果需要恢复使用LPRng打印系统, 以上过程是可逆的。
图-2切换CUPS和LPRng打印系统
四、管理CUPS打印系统:
管理CUPS打印系统可以有两种方法:编辑/etc/cups/cups.conf(CUPS 打印机守护进程配置文件);使用Web管理界面。cups.conf配置文件和Apache 的复杂的 /etc/httpd.conf 相似。一个典型的cups.conf配置文件内容是:
Order Deny,Allow
Deny From All
Allow From 127.0.0.1
AuthType None
Order Deny,Allow
Deny From All
Allow From 127.0.0.1#允许从本地配置
Browsing On
BrowseProtocols cups
BrowseOrder Deny,Allow
BrowseAllow from at LOCAL
Listen 127 dot 0.0.1:631#打印机监听端口
除了主配置文件Cups.conf外,目录下还有classes.conf — CUPS 类别配置文件,它负责指向不同的打印组。client.conf -客户端配置文件,指向默认CUPS服务器,可以指定加密要求。mine.cons-列出不同文件格式的过滤器,如图像和文本。 mine.types-列出CUPS打印机可以处理的文件类型。 print.conf-CUPS Web工具改变的配置文件。 pstoraster.cons -包含Ghostscript文件的过滤器。GUN通过这种方法处理PostScript打印机。如果你感到命令行文件比较复杂,可以使用Web管理CUPS打印系统:
1.使用命令检查打印机相关RPM包:
#rpm –qa :grep cups;rpm -qa:grep foo
cups-libs-1.1.17-13 #CUPS命令集
cups-devel-1.1.17-13 #CUPS开发库
cups-1.1.17-13 #CUPS主程序
foomatic-2.0.2-15 #独立于假脱机打印的数据库
Omni-foomatic-0.7.2-4 #Omni数据库
2.通过浏览器直接连接到CUPS的Web控制界面: ,出于安全此时要输入账号名称和口令,见图-3.
图-3 CUPS打印系统Web管理页面
3.CUPS打印系统Web管理表
名称
说明
ESP
导航到CUPS开发者站点: 。
Administration: Do Administration Task
管理、增加打印机、类、打印作业。
Classes :Manage Printer Class
通过类的方式管理打印机组。
Help : On-Line Help
CUPS管理手册和帮助。
Jobs : Manage Jobs
用来管理打印队列中的打印任务。
Printer : Manage Printers
管理、增加打印机
Software:Download the Current CUPS Software
下载软件最新版本
4、增加一个打印机
在该页面中有多个选项。点击第一个选项"Do Administration Tasks"(管理任务选项),这时程序会提示你登录,用户名必须以root身份登录并且输入超级用户密码。若要增加一个打印机,点击"Add Printer"按钮,出现的页面会提示用户填写下列信息:
Name:打印机的名字。
Loaction:连接打印机的主机名。
Description:对打印机的简短描述。
填写完以上信息后,点击"Continue"键。接下来的页面询问打印机当前使用什么类型的设备。唯一的选项是:Disk File。所以用户只要选择"Continue"就可以了。接着用户要提供设备的URI。包括:
ipp://hostname/ipp/port1
ipd://hostname/queue
当上面的信息都填写完毕后,系统会发送一条打印机已经正确加入的消息。在打印机正确加入后,点击"Administration"管理打印机:(见图-4)。
图-4 管理打印机的Web界面
在该页面提供的操作包括测试打印机、启动打印机及其它管理任务。它同时显示打印任务及打印机的状态。
五、使用Redhat Linux自己的配置管理工具
Redhat Linux 8.0以后的版本都内置自己的配置管理工具既能够配置 CUPS,也能够配置 LPRng 打印系统。根据你的系统配置而定,它会配置活跃的打印系统。要使用 打印机配置工具,你必须具备根特权。要启动这个应用程序,选择“主选单”-“系统设置”-“打印”,或键入 “redhat-config-printer” 命令。该命令会根据它所执行的环境是图形化 X 窗口系统还是基于文本的控制台来自动判定它应该以图形化还是文本形式来运行程序。配置界面见图-5。
图-5 使用系统配置工具添加本地打印机
如果你没有安装 图形界面可以在命令行添加,运行命令:
#redhat-config-printer-tui --Xadd-local options
主要选项:
--device=node :要使用的设备节点。例如:/dev/lp0。
--make=make :IEEE 1284 MANUFACTURER 字符串或 foomatic 数据库中的打印机生产厂商的名称(若无 manufacturer 字符串)。
--model=model :IEEE 1284 MODEL 字符串或 foomatic 数据库中列出的打印机型号(若无 model 字符串)。
六、配置管理网络打印机
如果你的本地打印机不能被Linux支持或者打印效果太差,可以使用配置网络打印机。RHEL 4.0一共可以配置六种类型的打印队列:
1、本地连接 — 直接通过并行或 USB 端口连接到计算机上的打印机。
2、联网的 CUPS (IPP) — 连接到能够通过 TCP/IP 网络、使用互联网打印协议进入的打印机,又称 IPP(例如,连接到网络上另一个运行 CUPS 的 Red Hat Linux 系统的打印机)。需要输入打印机所连接的远程机器的主机名或 IP 地址和到远程机器上的打印队列的路径。
3、联网的 UNIX (LPD) — 连接到能够通过 TCP/IP 网络进入的其它 UNIX 系统上的打印机(例如,连接到网络上另一个运行 LPD 的 Red Hat Linux 系统的打印机)。 需要添加打印机所连接的远程机器的主机名或 IP 地址,远程打印机队列。默认打印机队列通常是 lp。
4、联网的 Windows (SMB) — 连接到通过 SMB 网络来共享打印机的其它系统上的打印机。需要添加共享打印机的 Samba 工作组的名称,共享打印机的服务器的名称。你想用来打印的共享打印机的名称。这个名称必须和远程 Windows 机器上定义的 Samba 打印机的名称相同。在“用户名”字段中指定的用户的口令,你要访问打印机所必须登录使用的用户名称。用户在 Windows 系统上必须存在,并且必须有访问打印机的权限。默认的用户名典型为guest(Windows 服务器)或 nobody(Samba 服务器)。
5、联网的 Novell (NCP) — 连接到使用 Novell NetWare 网络技术的其它系统上的打印机。 需要添加打印机所连接的 NCP 系统的主机名或 IP 地址。NCP 系统上的打印机的远程队列。你要使用打印机所必须登录的用户名。 为以上用户字段指定的口令。
6、联网的 JetDirect — 通过 HP JetDirect 直接连接到网络打印机。 JetDirect 打印机的主机名或 IP 地址。 JetDirect 打印机监听打印作业的端口。默认端口为 9100。
管理打印作业
当你给打印机守护进程发送打印作业时(例如从 Emacs 中打印文本文件或从 The GIMP 中打印图像),这个打印作业被添加到打印假脱机队列中。打印假脱机队列是一个被发送给打印机的打印作业以及关于每个打印请求的信息的列表。这些信息包括打印请求的状态、发送请求的用户名、发送请求的系统主机名、作业号码等等。 要改变打印机设置,右击打印机图标,然后选择“属性”。打印机配置工具就会被启动。 双击一个已配置的打印机来查看打印假脱机,见图-6。
图 6 打印作业列表
要取消在 GNOME 打印管理器中列出的某一作业,从列表中选择它,然后选择编辑-取消文档。如果打印假脱机中有活跃的打印作业,打印机通知图标可能会出现在桌面面板上的面板通知区域,
七、打印机管理常用命令
在Linux中是把硬件设备当作文件来管理。每个与Linux系统相连的实际设备(包括光盘驱动器、显示器、网卡、显示卡、扫描仪和打印机等),都可以在文件系统中表示出来。Linux系统把每一个设备都看成一个文件,与普通文件一样处理,这样可以使文件与设备的操作尽可能统一。从用户的角度来看,对设备的使用和一般文件的使用一样。Linux提供了大量的命令,利用命令可以有效管理设备。所以,在Linux系统上使用打印机,离不开使用系统提供的命令。要想真正理解Linux系统打印,就必须从Linux打印命令学起。不管你是在 GUI 中点击一个按钮还是从命令行中键入命令,打印都不能算是一项很互动化的进程。下面将会向你介绍印相关命令。
1.CUPS打印系统命令见表4。
表4 CUPS打印系统命令
命令名称
功能说明
lp.cups
提交打印任务,即开始打印。
lpr.cups
打印机请求命令。
lprm.cups
从打印队列删除任务。
lpq.cups
查询打印队中的任务。
lpc.cups
行打印控制命令。
lpstat,.cups
显示打印机状态,包括打印队列长度和打印机数量。
lpoptions
显示或设置打印选项。
lppasswd
为用户修改打印密码。
lpinfo
显示打印设备。
lpadmin
配置打印机。
cancel
取消一个打印任务。
disabe
禁止一个打印任务。
enable
启动一个打印任务。
lpmove
改变打印任务到新队列。
accept
接受打印任务。
reject
拒绝打印任务。
2.LPD打印命令
Red Hat Linux现在默认打服务器是CUPS。但是许多Linux老用户仍然倾向使用行打印监控程序(LPD)。LPD包括四个主要命令:行打印机请求(Line Printer Request ,lpr)、行打印机控制(Line Printer Control,lpc)、行打印机查询(Line Printer Query,lpq)、行打印机删除(Line Printer Remove,lprm)。LPD打印系统命令见表5。
表5 LPD打印系统命令
命令名称
功能名称
常用选项
lpr
打印机请求
-h file:打印没有作业控制页的文件,通常包含用户账号和源计算机的主机名。作业控制页也称为粹发页。
-Pother file:用/etc/printcap文件定义的打印机other打印文件file。注意:P和打印机之间没有空格。
-s fike:生产打印文件file的符号链接。
lpq
提供当前打印队列
lpq ;返回默认打印机的当前打印队列,在/etc/printcap文件中定义。
lpq -P printer :返回指定打印机的当前打印队列,使用/etc/printcap文件中定义的名称。
lprm
打印队列删除任务
-P: 删除默认打印机的当前打印队列,在/etc/printcap文件中定义。
Lpc
可以控制每台打印机的几个特征
lpc [-P] [device][enable: disable:starp:stop:stataus]
lpc -P device stataus:显示打印机的状态。输出显示能否将打印作业发送到队列、队列中的作业号、打印机是否接收作业以及和打印机的通信状态。
lpc disable:禁止对默认打印机将发送(假脱机)到打印队列。
lpc enable:启动对默认打印机将发送(假脱机)到打印队列。与lpc disable命令相反。
lpc start:从订印队列重新开始传输。
lpc stop:停止打印机与打印队列之间的通信。
八、重要联机资料
要了解更多关于在 Red Hat Linux 上打印的信息,请参考下列资料。
man printcap — /etc/printcap 打印机配置文件的说明书页。
map lpr — 允许你从命令行打印文件的 lpr 命令的说明书页。
man lpd — LPRng 打印机守护进程的说明书页。
man lprm — 用来从 LPRng 假脱机队列中删除打印作业的命令行工具的说明书页。
man mpage — 用来在一张纸上打印多页的命令行工具的说明书页。
man cupsd — CUPS 打印机守护进程的说明书页。
man cupsd.conf — CUPS 打印机守护进程配置文件的说明书页。
man classes.conf — CUPS 类别配置文件的说明书页。
总结:以上介绍了Linux打印机配置的方法,与以前相比,随着更多、更高级打印系统的出现,情况已有了很大改观,也得到了HP、IBM等公司的关注,它们也努力致力于推进这个基础架构发展。FSG(自由标准组织)正在进行着一个名为OpenPrinting的项目。据称该项目是为Linux定义下一代打印系统的基础架构,目前其聚集了很多业内的专家。以提升Linux竞争者力。