原文:http://vbird.dic.ksu.edu.tw/linux_basic/0610hardware_2.php

利用 CUPS 配置 Linux 打印机

打印机对於日常生活来说,很重要吧!呵呵~没错啊!尤其我们的 Linux 主机如果未来还要作为 Printing server 的话,那么自然就得要先创建好打印机的连线啦!在本章里面我们仅谈论一下如何让你的 Linux 可以连接到打印机, 让你的 Linux 可以顺利的将文件数据列印出来啦!现在就来谈谈先!


小标题的图示 Linux 的列印组件 (列印工作、伫列、服务与打印机)
  • 硬件支持度

要谈论 Linux 的列印,首先就得要知道 Linux 底下整个列印的行为是怎样的一个流程呢?而且, 也得要了解一下你的硬件是否支持列印工作嘛!在硬件部分,你必须要在 BIOS 将打印机的支持启动才行! 不过,这大概都属於旧式打印机才需要的动作啦!为啥呢?因为现在打印机大部分都是 U盘 或者是网络打印机了, 根本不需要使用 25 针序列埠的支持!

Tips:
为什么会谈到 25 针序列埠以及 BIOS 的支持呢?这是因为鸟哥曾经发生过一件糗事。 由於鸟哥常用旧型主机的关系,所以总喜欢先在 BIOS 里面将没用到的装置项目全部取消 (disable), 所以没有接打印机的情况下,当然连打印机的序列埠 (Parallel) 也关闭了。没想到后来为了测试打印机的连线取得一台旧式打印机, 要命啊!连续测试两天的时间却无法顺利的列印出正确的文件资讯!最后才想到可能是 BIOS 内部的问题。 进入 BIOS 将打印机支持启动成为 EPP/SPP 之后,俺的 Linux 就能够顺利的捉到打印机并进行列印~真想哭啊! 不是感动的想哭,是气的想哭!
鸟哥的图示

除了主机本身的支持之外,你的打印机也必须要能够支持 Linux 才行!其实并不是 Linux 的问题啦!而是打印机制造商必须要能够提供给 Linux 用的驱动程序,这样你的 Linux 才能够使用该型号的打印机。 老实说,鸟哥是 HP 打印机的爱好者,因为 HP 打印机对 Linux 的支持非常好!但是另一牌的 L 开头的打印机总是很慢或者不推出给 Linux 用的驱动程序,所以该牌的打印机很难安装在 Linux 主机上!真困扰。

Tips:
因为鸟哥过去所待的研究室大多购买 HP 的打印机,所以测试打印机时完全没有出现任何问题。 但是某天在家里使用鸟嫂购买的 L 牌的事务机时,连忙了三天却都无法连接到该打印机来顺利输出。 最终查询 Linux 打印机支持网站,才发现该型号的事务机根本没有推出给 Linux 用的驱动程序, 所以就无法顺利使用该打印机~最终...鸟哥就放弃该测试了~唉!真浪费时间!
鸟哥的图示

那到底你该如何确认你的打印机有支持 Linux 呢?或者是,如果你想要购买新的打印机时, 如何查询该打印机能否在 Linux 上面安装呢?很简单,直接到底下的网站去查询一下即可喔!

举例来说,鸟哥现在的研究室有一部 HP 的 LaserJet P2015dn 打印机,我想要知道这部打印机对 Linux 的支持度好不好, 那就先进入上述的网站连结,出现如下的画面:

打印机支持网站的主画面
图 2.1.1 、 打印机支持网站的主画面

在如上画面中请按下『 Printers 』来观察打印机的特色吧!会出现如下画面:

选择打印机示意图
图 2.1.2 、 选择打印机示意图

在上图中填入正确的厂牌 (HP) 以及正确的打印机型号 (LaserJet P2015dn) 后,请按下『 Show 』那个按钮, 该网站就会从数据库内捉出支持度的情况给你看,如下图所示:

鸟哥的打印机对 Linux 的支持度
图 2.1.3 、 鸟哥的打印机对 Linux 的支持度

在显示的画面中,你最要注意的是那个企鹅数量啦!如果达到 3 只,那就代表支持度是非常完美的。 两支企鹅是可接受的范围内。如果是小於一只企鹅时,那么该打印机对 Linux 的支持可能就是比较差的喔! 还好,鸟哥这部含有网络功能的打印机还有两只企鹅的支持,等一下应该能够顺利安装到俺的 Linux 测试机上吧!


  • 列印组件

你有没有发现,在打印机还没有启动电源的情况底下,其实我们还是可以透过软件来将某个工作列印出来的, 只是该项工作就会被放入到等待的环境中 (伫列) 。为什么会这样呢?这是因为整个列印的行为被区分为许多部分, 每个部分都可以单独存在的啦!我们将整个部分绘制成下图来瞧瞧:

列印行为之各组件示意图
图 2.1.4、 列印行为之各组件示意图

我们大概可以将上图区分为几个部分来说明:

  • 列印工作:

    例如 Open Office 这类较大型的办公室软件中,可以利用内建的程序产生列印的动作。 我们也可以使用类似 lpr 这类命令列程序来直接列印某个文件。列印软件产生的列印动作,就是产生一个列印的工作 (job), 这个列印工作就会进入排队等待 (伫列, queue) 的环境中,等待列印服务来进行输出。

  • 列印伫列:

    这是放置列印工作的重要项目!这个列印伫列与列印服务有关。一般来说,列印伫列会以打印机的名字来命名, 让大家知道你的列印工作将要使用哪部打印机输出之故。当列印工作放置到伫列后,就开始等待列印服务的取用与输出了。 

  • 列印服务:

    就是实际负责沟通伫列内的列印工作与打印机的服务啦!列印服务其实就是将伫列内的列印工作,将她的数据转成打印机认识的格式后, 直接交给打印机来输出而已。但是列印服务必须要认识与沟通打印机,因此他就得要连上打印机与驱动打印机才行。 目前常见的列印服务有 CUPS 与 LPRng ,不过以 CUPS 为主流啦!

    一般我们说的打印机驱动程序,其实就是将列印工作的数据转成打印机格式啦! 而目前常见的打印机格式为使用 Postscript 的列印格式,Linux 默认的 CUPS 本身就支持这种列印格式,因此, 只要你购买的打印机有支持 postscript ,那么安装起来应该是很轻松的才是。我们在上面提到的打印机支持网站中, 里面的驱动程序很多就是 postscript 打印机描述文件 (Postscript Printer Description (注1))

    那万一没有 PPD 文件呢?没关系,我们可以透过打印机制作商提供的其他定义档 (例如 Ghostscript) 来解释列印工作的数据, 让打印机认识该格式后,就能够顺利列印了!这也就是说,其实打印机驱动程序就是将数据转成打印机认识的格式后, 就能够加以输出了。而常见的格式为 Postscript 及 Ghostscript 罗!

    那么这些列印的 PPD 驱动程序档放在哪里呢?其实就放在 /usr/share/cups/model/ 底下啦! CentOS 已经提供一些默认的驱动程序了,如果想要取得升级的 PPD 驱动程序档,请参考上面的打印机网站, 从那上头来下载即可呦!若想要直接下载全部的 PPD 文件,可以参考连结: http://www.linuxprinting.org/download/PPD/
Tips:
为什么需要列印伫列 (queue) 呢?因为打印机只能够给单一任务进行列印,没办法像 CPU 可以交错运行的! 所以列印工作就得要排队等待打印机的列印,而打印机得要将前一份工作列印完毕后才能够列印下一份工作! 否则如果是交错列印,那印出的东西不就混杂在一起了?这样说了解吗? ^_^
鸟哥的图示

小标题的图示 CUPS 支持的连线模式

如果你的打印机具有网络卡,那么你当然可以使用网络连线到你的打印机上面罗!不过,这种打印机提供什么服务呢? 也就是说,你可以使用什么连线协议来连上打印机呢?常见的打印机连线分享方式有底下这些:

  • socket
    数据透过 internet socket(端口)来传送,一般为 port 9100 或 35。如果想要进行数据的传输与列印,可以透过在浏览器上面输入: socket://host-printer:9100/ 来进行。不过,这种模式不常用就是了。

  • LPD (Line Pritner Daemon)
    LPD 是较早之前的列印服务,刚刚上头提到的 LPRng 就是使用这种方式的连线啦! LPD 主要是利用序列埠来达成列印的需求,打印机名称就是 LPT1/LPT2... 等等。 目前还是可以在比较早期的 Linux distributions 看到这种列印方式。

  • IPP (Internet Printing Protocol)
    这是目前比较流行的打印机列印协议,我们的 CUPS 默认也是支持这种协议啊!当启动 IPP 时,打印机会启动 port 631 ,列印的数据就是透过这个 port 来进行传送的。另外,如果你的打印机或者 Linux 主机启动了 ipp 之后, 嘿嘿!你可以直接使用浏览器,输入: ipp://printer_IP/printername,或者是: http:/printer_IP:631 就能够直接线上处理打印机的配置了!方便的很啊!

  • SMB (Server Message Block)
    这家伙就是网络上的芳邻啦!协议使用的是: smb://user:password@host/printer 。

CentOS 5.x 默认提供的就是 CUPS 的 IPP 协议喔!而且 CUPS 默认启动就启动了, 因此,你可以随时随地的以 Web 介面配置自己的打印机呢!真是非常方便! 那如果你的打印机是透过线材 (U盘/序列埠) 连上主机的呢?那就得要考虑底下的连接介面罗!

  • parallel :平行序列埠啊,就是 25 针那种玩意儿!他是连接到 /dev/lp[0-2] 等装置。 在 CUPS 里面的装置使用格式为: parallel:/dev/lp0

  • U盘 :一般越来越常见的 U盘 打印机啊! CUPS 使用的格式为: usb:/dev/usb/lp0 。

小标题的图示 以 Web 介面控管网络打印机

事实上,管理 Linux 的打印机是非常简单的一件事情,因为你只要启动 CUPS 之后,再以浏览器介面来管理即可。 不过,在默认的情况底下,要进行浏览器介面的管理动作时,你必须要:

  • 必须要启动 CUPS 这个服务 (/etc/init.d/cups start)
  • 具有 root 的权限 (需要 root 的口令来配置);
  • 默认仅能在本机 (localhost) 管理,无法使用远程连线连到此 Linux 管理;

如果你想要在区域网络内将打印机的控制权挪出来给其他用户管理时,就得要修改 CUPS 的配置了。 在这里,我们先以本机的方式来处理打印机的连线喔!首先,鸟哥以具有网络卡的打印机 HP LaserJet P2015dn 这部为例 (因为鸟哥也只有这部打印机具有网卡啊!),这部打印机的 IP 为 192.168.201.253,而鸟哥 Linux 测试机 IP 为 192.168.201.250。然后,你可以这样做:


  • 确认打印机存在且支持 CUPS 认识的相关协议

如果想要加入 CUPS 的网络打印机,那么你的打印机当然就得要支持 CUPS 认识的通讯协议罗!如何确定呢? 首先,你必须要依照你打印机所提供的手册去配置好 IP ,以鸟哥上面的环境来说,我的打印机 IP 为 192.168.201.253 , 因此我可以这样确定该打印机是否存在喔:

# 1. 先确定 IP 是否正确:
[root@www ~]# ping -c 3 192.168.201.253
PING 192.168.201.253 (192.168.201.253) 56(84) bytes of data.
64 bytes from 192.168.201.253: icmp_seq=1 ttl=255 time=0.464 ms
64 bytes from 192.168.201.253: icmp_seq=2 ttl=255 time=0.313 ms
64 bytes from 192.168.201.253: icmp_seq=3 ttl=255 time=0.356 ms

--- 192.168.201.253 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 0.313/0.377/0.464/0.067 ms
# 重点是有没有出现回应的时间参数,亦即是 time 那个栏位喔!

# 2. 使用 nmap 测试打印机有没有出现列印相关的服务端口:
[root@www ~]# nmap 192.168.201.253
Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2009-05-27 22:07 CST
Interesting ports on 192.168.201.253:
Not shown: 1676 closed ports
PORT     STATE SERVICE
80/tcp   open  http
139/tcp  open  netbios-ssn
515/tcp  open  printer
9100/tcp open  jetdirect
MAC Address: 00:18:FE:9E:4C:58 (Unknown)

Nmap finished: 1 IP address (1 host up) scanned in 3.875 seconds
# 鸟哥这部打印机仅支持 LPD 服务 (515) 以及 HP 独家的服务 (9100)

这样就确定我的打印机实际存在,且这部打印机仅支持 HP 独家的网络服务 (port 9100) 以及旧版的 LPD 服务而已, 这个资讯很重要,因为等一下我们使用 CUPS 连线时,就得要使用这个 LPD 的服务喔!另外,请特别给他留意一下, 那个 nmap 是个可以扫瞄主机端口的软件 (port scan) ,这个软件其实是黑客软件,他默认并没有安装到 CentOS 上, 但是你可以使用『 yum install nmap 』来安装他。请注意,因为这个软件可以是恶意攻击的,因此千万不要用来查阅别人的主机,否则恐怕会有违法之虞喔!!

接下来,让我们来了解一下,系统有没有 CUPS 的支持吧!


  • 查询你 Linux 主机是否启动 CUPS 服务

再来查看看你的主机是否已经启动了 CUPS 呢?使用 netstat 这个命令看看:

[root@www ~]# netstat -tlunp | grep 631
tcp  0  0 127.0.0.1:631     0.0.0.0:*         LISTEN      4231/cupsd
udp  0  0 0.0.0.0:631       0.0.0.0:*                     4231/cupsd

确实有启动 631 端口以及 cupsd 的服务。接下来,我们可以直接连上 CUPS 了!请打开浏览器, 然后在网址列输入『 http://localhost:631 』即可!因为浏览器要连接的并非正规的 WWW 服务端口, 因此就得要加上冒号 (:) 来指定端口连接!顺利的话,应该可以出现如下画面:

CUPS 进站画面
图 2.3.1、 CUPS 进站画面

主画面主要可以分为上下两个按钮列来说明,其中又以下方的按钮列为常见的操作项目。我们会用到的按钮大概就是:

  • Add Printer:新增打印机,就是从这个按钮开始的!
  • Manage Jobs:列印工作管理,如果有列印工作要取消的,这个就对了!
  • Manage Printers:管理打印机,包括是否启动或者是删除打印机等。

不罗唆,赶紧来新增打印机看看!按下『 Add Printer 』项目吧:

CUPS 新增打印机的画面示意图
图 2.3.2、 CUPS 新增打印机的画面示意图

上面图示中,最重要的其实是那个『 Name 』的项目,那就是你打印机的伫列名称!未来所有列印的工作都是放在该名称底下排队的! 鸟哥的这个打印机名称比较复杂啦!你可以取个比较简单的名字,以后比较容易使用命令列软件来列印啦! 至於位置 (Location) 与描述 (Description) 都是这个打印机的说明,可写可不写!写完后按下『 continue 』吧!

选择打印机所提供的服务项目
图 2.3.3、选择打印机所提供的服务项目

接下来则是选择这个打印机伫列所连线的打印机提供什么服务的列印功能?你可以看到前一小节我们使用 nmap 的时候就发现 port 9100 就是 HP JetDirect ,因此我们可以选择上图的第一个项目。 由於这部打印机也提供 port 515 的 LPD 服务,因此你也可以选择上图的『 LPD/LPR Host or Printer 』项目。 不过,在这里鸟哥选择的是第一项啦!选择完毕后再按下『 Continue 』进入打印机的实体位置项目,如下图:

填写打印机的实际连线方式,要填正确!
图 2.3.4、填写打印机的实际连线方式,要填正确!

上图有提供很多范例,我们由於使用到 port 9100 ,因此使用的就是 socket:// 那个范例使用的状态。 填写正确的位置后,接下来按下『 Continue 』来继续选择打印机的型号吧!

选择打印机的实际型号(驱动程序确认)
图 2.3.5、选择打印机的实际型号(驱动程序确认)

如上图所示,我们选择的是 HP 的厂牌!厂牌选择完毕后会出现如下图的型号选择:

选择打印机的实际型号(驱动程序确认)
图 2.3.6、选择打印机的实际型号(驱动程序确认)

但上图中我们并没有看到 P2015dn 这部打印机的型号!那怎办?没关系,可以连线到http://www.linuxfoundation.org/en/OpenPrinting 网站下载适当的驱动程序后, 按下上图中的『浏览』按钮来选择该文件即可。不过,从该网站的介绍中,可以发现鸟哥的这部打印机似乎使用默认的 Postscript 驱动程序即可,该网站也没有提供这部打印机的驱动程序啊!那怎办?没关系,在 /usr/share/cups/model/ 目录下就有默认的驱动程序啦!所以请按下『浏览』来处理一下!

选择驱动程序文件
图 2.3.7、选择驱动程序文件

如上图所示,选择正确的驱动程序,然后再按下『开启』按钮,最后按下『 Add Printer 』按钮就可以进入管理员口令输入画面:

输入管理员帐号口令(默认用 root)
图 2.3.8、输入管理员帐号口令(默认用 root)

到此为止我们的打印机配置就 OK 了!如果你回到 CUPS 的进站画面,并且点选 Printers 之后,就会出现如下的打印机画面:

打印机的控制画面
图 2.3.9、打印机的控制画面

上面画面中的按钮都看的懂吧?其中比较重要的是那个『 Set As Default 』项目, 那就是配置为『默认打印机』,当你产生列印工作后,该工作默认就会丢给这个 hp_lj_p2015dn 的伫列来处理的意思喔。 接下来,当然就是按下『 Print Test Page 』看看能否列印出正确的画面罗!如果可以顺利的列印,恭喜您! 打印机配置成功!


小标题的图示 以 Web 介面控管 U盘 本机打印机

上一小节提到的是网络打印机,那如果你的打印机是一般普通的具有 U盘 介面的打印机呢? 由於打印机的装置档名为 /dev/usb/lp0 开始的名称,既然已经知道打印机名称了,那么我们先来注意看看 U盘 是否有捉到该打印机, 由於我们的 Linux 已经能够处理随插即用 (PnP) 的装置,因此直接运行 ls 去查阅档名是否存在即可:

[root@www ~]# ll /dev/usb/lp0
crw-rw---- 1 root lp 180, 0 Jun  1 22:32 /dev/usb/lp0
# 这个文件会被自动的创建起来,你不需要手动创建这个文件喔!

老实说,除非你的 U盘 打印机是非常冷门的机种,否则,我们的 CUPS 应该已经自动的捉到并且配置好该打印机罗! 以鸟哥为例,鸟哥办公室的事务机为 HP Diskjet F380 ,如果使用列出 U盘 装置的 lsusb 时,可以看到:

[root@www ~]# lsusb
Bus 001 Device 001: ID 03f0:5511 Hewlett-Packard Deskjet F300 series
Bus 002 Device 001: ID 0000:0000
Bus 002 Device 002: ID 0d62:a100 Darfon Electronics Corp. Benq Mouse

接下来,同样的我们使用 CUPS 的 Web 介面来配置一下这部打印机吧!在网址列输入 http://localhost:631 之后再按下『Manage Printers』会出现如下画面:

由 HAL 机制顺利取得的 U盘 打印机
图 2.4.1 、由 HAL 机制顺利取得的 U盘 打印机

由上图我们可以发现 CUPS 已经捉到了打印机了!连驱动程序都安装妥当!这是怎么回事啊? 这是因为 CentOS 提供了 HAL 的机制来处理 PnP 装置的缘故。关於 HAL 的机制我们会在下一小节再来讨论。 不过由於这个装置使用的是 HAL 提供的装置档名,我们如果想要使用 /dev/usb/lp0 来作为打印机的输出档名的话, 那么就自己来创建一个打印机的伫列吧!同样的在 CUPS 画面中按下『 Add Printer 』来新增一个打印机:

 输入伫列名称
图 2.4.2 、 输入伫列名称

指向第一个 U盘 装置处
图 2.4.3 、指向第一个 U盘 装置处

如上图所示,你要指定的是那个有 #1 的位置,那就是我们的第一个 U盘 插槽位置喔!

选择打印机的驱动程序
图 2.4.4 、选择打印机的驱动程序

最终结果
图 2.4.5 、最终结果

如上图所示,最后就会多出一个名为 deskjet_f380 的打印机名称,接下来当然就是『 Print Test Page 』测试看看能否列印罗。 如果能够列印得出来,那就是配置妥当了。所以说, U盘 打印机的配置要简单太多罗! ^_^


小标题的图示 将 Linux 本机打印机开放成为网络打印机

想像一个状况,你仅有 U盘 打印机安装在 Linux 上头,整个办公室或实验室里面仅有这部打印机。 虽然你可以加装列印服务器来使 U盘 打印机变成网络打印机,但总是得多花钱啊! 有没有办法可以让你的本机打印机变成网络打印机呢?有的,那就是修改 CUPS 的配置即可。如何修改呢? 我们还是透过 CUSP 的浏览器介面来处理即可喔!选择『Administration』会出现如下画面(在画面的最右边):

勾选可让 CUPS 成为列印服务器的功能
图 2.5.1 、勾选可让 CUPS 成为列印服务器的功能

如上图所示,在箭头指定的地方进行勾选即可。勾选完毕后按下『 Change Settings 』就能够让你的 CUPS 变成列印服务器! 而你原本的打印机就会成为:『ipp://你的IP:631/printers/打印机伫列名称』,举例来说,鸟哥这部 Laserjet p2015dn 在网络上看到的就会是:『ipp://192.168.201.250/printers/hp_lj_p2015dn』的名称啊! 你可以在其他用户端计算机上面以这个 URI 来进行连线哩!


小标题的图示 手动配置打印机

事实上我们刚刚在上面所进行的各项动作大多是在修改 /etc/cups/ 里面的几个文件而已啊!几个重要的文件为:

  • /etc/cups/printers.conf:打印机的配置值,都写在这个文件中;
  • /etc/cups/cupsd.conf:CUPS 的主要配置档,包括做为服务器之用途的配置。
  • /etc/cups/ppd/*.ppd:就是各个打印机的驱动程序 (PPD 配置档);

既然只是改了这几个配置档,你当然也可以使用 vim 去编辑,不过,因为涉及硬件连线的问题, 因此还是建议使用 web 介面来进行修改啦。不过,某些时候如果你没有浏览器介面时,那么使用终端机介面的命令来修改也是可以的。 我们底下只以鸟哥办公室拥有的这一部 HP P2015dn 的雷射打印机来作为范例喔!


  • 1. 下载合适的 PPD 驱动程序定义档

首先你必须要前往打印机网站下载你的打印机驱动程序定义档。鸟哥之前已经查询过,这部打印机使用默认的 PPD 文件即可。 所以鸟哥这部打印机的驱动程序定义档基本上在: /usr/share/cups/model/postscript.ppd.gz 。 如果你有自己下载自己打印机的驱动程序时,请将你下载的文件放置到 /usr/share/cups/model/ 目录下, 因为后续要操作的命令会到此目录中找寻驱动程序定义档喔!


  • 2. 启动 CUPS 以及打印机

接下来请确定你的 CUPS 是有启动的,而且打印机也已经打开电源了。启动 CUPS 的方法与检查是否启动 CUPS 的操作如下:

# 1. 重新启动 CUPS 的方法!
[root@www ~]# /etc/init.d/cups restart
正在停止 cups:                  [  确定  ]
正在启动 cups:                  [  确定  ]

[root@www ~]# netstat -tlunp | grep 631
tcp   0  0 0.0.0.0:631       0.0.0.0:*      LISTEN      4939/cupsd
tcp   0  0 :::631            :::*           LISTEN      4939/cupsd
udp   0  0 0.0.0.0:631       0.0.0.0:*                  4939/cupsd
# 因为 CUPS 启动的网络服务端口就是 port 631 !所以确定是启动的!

# 2. 确认打印机提供的服务为何
[root@www ~]# nmap 192.168.201.253
Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2009-06-03 00:43 CST
Interesting ports on 192.168.201.253:
Not shown: 1676 closed ports
PORT     STATE SERVICE
80/tcp   open  http
139/tcp  open  netbios-ssn
515/tcp  open  printer
9100/tcp open  jetdirect
# 再次强调,鸟哥这部打印机仅有提供 HP 自家的打印机协议 9100 端口!

从上面的输出可以很清楚的看到鸟哥的打印机与 Linux 上面的 CUPS 都有顺利的运行中!其中还是要强调, 你千万不要拿 nmap 去扫瞄别人家的系统!很可怕的!而由於上面输出的结果,我们也知道鸟哥这部打印机在网络上的连线方式为: socket://192.168.201.253:9100 的样式喔!这个地方也请先记录下来。


  • 3. 使用 lpadmin 进行打印机的创建与删除

命令配置/删除打印机的方式就是透过 lpadmin 这个命令啊!这个命令的语法是这样的:

[root@www ~]# lpadmin [-p 自订伫列名] [-v URI] [-m PPD] [-E] <==创建打印机
[root@www ~]# lpadmin [-d 已存在的伫列名]  <==配置成为默认打印机
[root@www ~]# lpadmin [-x 已存在的伫列名]  <==删除此一打印机伫列
选项与参数:
-p :后面接的就是打印机的伫列名称,这个名称可自订,但还是定为有意义较佳。
-v :后面接的就是装置的相关位置,常见的装置有:
     序列埠      : parallel:/dev/lp0
     U盘         : usb:/dev/usb/lp0
     网络打印机  : ipp://192.168.201.253/
     提供特殊插槽: socket://192.168.201.253:9100
-m :后面接的通常就是 PPD 的定义档,注意,要放置到 /usr/share/cups/model/ 底下!
-E :作为可接受 (accept) 此列印工作之意!

# 1. 先列出本机上面所有已经存在的打印机吧!
[root@www ~]# lpstat -a
Deskjet_F300_series accepting requests since Tue Jun  2 00:48:59 2009
deskjet_f380 accepting requests since Mon Jun  1 23:34:21 2009
hp_lj_p2015dn accepting requests since Tue Jun  2 00:22:31 2009

# 2. 删除所有已经存在的打印机吧!
[root@www ~]# lpadmin -x Deskjet_F300_series
[root@www ~]# lpadmin -x deskjet_f380
[root@www ~]# lpadmin -x hp_lj_p2015dn
[root@www ~]# lpstat -a
lpstat: No destinations added.
# 这样就确定没有任何存在的打印机罗!

# 3. 加入 hp_p2015 打印机,打印机参数如前面两小节所示:
[root@www ~]# lpadmin -p hp_p2015 -v socket://192.168.201.253:9100 \
> -m postscript.ppd.gz -E

# 4. 因为仅有一部打印机,因此让此打印机成为默认列印打印机
[root@www ~]# lpadmin -d hp_p2015

其实这个 lpadmin 命令只是在升级 /etc/cups/ 目录里面的两个数据而已, 一个是 /etc/cups/printers.conf ,这个文件主要是规范了打印机的相关装置、是否接受列印工作、 打印机的伫列名称、页面的限制等等,反正就是整个打印机的规范就是了。 至於这个打印机相关的 PPD 文件则是以打印机的伫列名称连结到 /etc/cups/ppd/ 目录下。 不相信吗?让我们来瞧瞧 printers.conf 的文件内容吧!

[root@www ~]# cat /etc/cups/printers.conf
# Printer configuration file for CUPS v1.2.4
# Written by cupsd on 2009-06-03 01:06
<DefaultPrinter hp_p2015>                <==这就是打印机伫列名称
Info hp_p2015
DeviceURI socket://192.168.201.253:9100  <==就是打印机所在的装置位置
State Idle
StateTime 1243962326
Accepting Yes
Shared Yes
JobSheets none none
QuotaPeriod 0
PageLimit 0
KLimit 0
OpPolicy default
ErrorPolicy stop-printer
</Printer>

[root@www ~]# ll /etc/cups/ppd
-rw-r--r-- 1 root root 7714 Jun  3 01:05 hp_p2015.ppd
# 这就是刚刚捉过来的,给 hp_p2015 用的打印机定义档!


  • 4. 打印机状态的观察

配置完打印机后,来观察一下目前的打印机状态吧!底下的 lpstat 是个不错用的观察命令喔!

[root@www ~]# lpstat [-adprt]
选项与参数:
-a  :列出目前可以接受列印工作的打印机伫列名称;
-d  :列出目前系统的默认打印机 (未指定列印伫列时,默认输出的打印机);
-p  :列出每部打印机目前的工作状态,包含工作的 ID;
-r  :列出目前 CUPS 服务是否有在运行?
-t  :列出目前列印系统中更为详细的资讯说明,很适合查询喔!

# 1. 列出目前系统上面所有的打印机伫列与接受工作与否的情形
[root@www ~]# lpstat -a
hp_p2015 accepting requests since Wed Jun  3 01:05:26 2009
# 有一部名为 hp_p2015 的打印机,从 2009/6/3 开始接受列印工作之意!

# 2. 列出目前的『列印系统』状态,不止包括打印机而已。
[root@www ~]# lpstat -t
scheduler is running   <==CUPS 这个服务有在运行的意思
system default destination: hp_p2015  <==默认的打印机为这一部 hp_2015
device for hp_p2015: socket://192.168.201.253:9100 <==这部打印机的装置位址
hp_p2015 accepting requests since Wed Jun  3 01:05:26 2009
printer hp_p2015 is idle.  enabled since Wed Jun  3 01:05:26 2009
# 这部打印机目前是发呆 (Idle) 的状态,但可接受列印工作!

如果不清楚你的打印机状态,使用 lpstat 就能够看的清楚罗~接下来,让我们开始来使用列印命令产生列印工作吧! 


  • 5. 利用 lpr 与 lp 来产生列印工作

如果你没有浏览器或者是说,你没有图形介面的软件时,可以透过 lpr 或者是 lp 这两个命令来列印某些文件或数据流重导向的东东。底下的测试会实际列印出数据来,因此,建议你可以先将打印机电源关闭, 让 CUPS 可以接受列印伫列的工作,却无法输出到打印机,这样也方便我们后续管理命令的查询! 所以,请将打印机的电源关闭先。来看看这两个命令如何操作吧!

[root@www ~]# lpr [-P printer伫列] [-#  列印份数] -U [username] file
选项与参数:
-P  :若没有默认打印机 (default) 或者想要由不同打印机输出时,可用 -P 指定打印机
-#  :如果这份文件你想要列印多个副本时,用这个 -# 加上份数就对了!
-U  :有些打印机有限制可使用的使用者帐号,此时就得要使用这个选项;

# 1. 指定 hp_p2015 这部打印机来列印 /etc/passwd 这个文件
[root@www ~]# lpr -P hp_p2015 /etc/passwd

# 2. 关闭打印机后,将 /root/ 底下的文件档名输出到这部打印机
[root@www ~]# ll /root | lpr -P hp_p2015

要注意的是,因为鸟哥有指定默认打印机,因此上面的范例中,即使没有加上 [-P hp_p2015] 这个项目时,依旧能够顺利的列印。但如果你没有指定默认打印机,那么就一定要加上这个项目, 否则 lpr 会不知到要将数据输出到哪里去喔!看完了 lpr ,再来聊聊 lp 这个命令的用法吧:

[root@www ~]# lp [-d printer伫列] [-n 列印份数] file
选项与参数:
-d  :后面接的是打印机的伫列名称。如果有多部打印机才需要指定;
-n  :就是列印的份数啊!

# 1. 列印出 2 份 /etc/issue 数据
[root@www ~]# lp -d hp_p2015 -n 2 /etc/issue
request id is hp_p2015-11 (1 file(s))  <==以 hp_p2015 来列印,工作号码为 11

  • 6. 列印工作的观察 (lpq) 与删除 (lprm)

我们已经有产生三个工作,但是第一个工作有顺利的列印 (打印机是开启的),因此还有两个工作尚未完成才对! 那我们如何知道还有哪些列印工作在伫列内呢?可以使用底下的命令来观察喔!

[root@www ~]# lpq [-al] [-P 列印伫列]
选项与参数:
-a  :列出所有打印机上面在伫列当中的工作情况;
-l  :用其他较长格式来输出列印的相关资讯 (拥有者与文件大小等等)
-P  :后面接特定的打印机,与 -a 不同。

# 1. 显示出目前所有打印机的工作伫列状况
[root@www ~]# lpq -a
Rank    Owner   Job     File(s)               Total Size
active  root    10      (stdin)               1024 bytes
1st     root    11      issue                 1024 bytes
# 上面的意思是,有 2 份工作,第一个工作为来自 stdin 的数据流,列印号码为 10 ,
# 整份列印数据占去 1024 bytes 。同理,第二份工作为文件,档名为 issue。

# 2. 用更详细的资讯显示列印工作
[root@www ~]# lpq -l -P hp_p2015
hp_p2015 is ready and printing

root: active                  [job 10 localhost]
        (stdin)                       1024 bytes

root: 1st                     [job 11 localhost]
        2 copies of issue             1024 bytes
# 你可以看到, issue 会被列印两份的数据!

如果这些列印工作你想要取消呢?那就使用 lprm 吧!

[root@www ~]# lprm [-P printer伫列] job_id
选项与参数:
-P  :后面直接指定某部打印机的某个工作号码。注意,那个 job_id
      就是刚刚我们使用 lpq 查看到的那个 Job 的号码啦!

# 1. 将使用 lpq 看到的第 11 号列印工作取消!
[root@www ~]# lprm 11
[root@www ~]# lpq -a
Rank    Owner   Job     File(s)               Total Size
active  root    10      (stdin)               1024 bytes
# 瞧!只剩下一个工作而已罗!

整个命令模式处理打印机的任务大约到此为止,其他的,还是使用 Web 介面去管理比较方便啦!


  • 7. 一个简单的练习

假设你目前的 CentOS 主机上面接著一台 U盘 介面的打印机,这台 U盘 介面的打印机是 Samsung 的 ML-1210 打印机, 请问,您可以如何安装这部打印机?

  1. 先下载 PPD 定义档,档名为: Samsung-ML-1210-gdi.ppd 到 /usr/share/cups/model/ 当中;
  2. 加入打印机,使用下列方法:
    [root@www ~]# lpadmin -p samsung -v usb:/dev/usb/lp0 \
    > -m Samsung-ML-1210-gdi.ppd -E
    
  3. 开始给他测试练习一下:『 lpr -P samsung /etc/passwd 』如果有东西印出来,那就是 OK 啦!

另外,如果老是看到萤幕前面显示:『 Printer not connected; will retry in 30 seconds...』, 很有可能是因为我们的装置代号输入错误,请使用『 lpstat -t 』查阅一下是否正确的配置好了? 基本上,安装一部 Linux 有支持的打印机,真的是快速啦!

Logo

更多推荐