Linux 打印机管理

  离上一次在 Linux 下使用打印机已经十多年了,记忆中那还是 2005 年在工商局工作的时候。在那之后,要么是不需要在 Linux 下使用打印机,要么就是办公电脑跑的不是 Linux。直到最近,公司 ERP 系统升级,需要给服务器配置打印机,才开始重新接触 Linux 下的打印机管理。


Linux 的打印系统

  目前绝大多数 Linux 发行版都使用 CUPS 作为默认的打印系统,CUPS 全称为 Common Unix Printing System,由 Michael R. Sweet 于 1997 年开始开发。如果你打开过 CUPS 的 Web 配置页面,可能会发现页面上赫然写着 Developed by Apple Inc.,其实故事是这样的(援引维基百科):

2002 年 3 月,苹果公司在 Mac OS X v10.2 中使用了 CPUS 作为其打印系统,2007 年 2 月,苹果公司聘请了 Michael R. Sweet 并购买了 CUPS 的源代码。

配置方式

  Linux 系统中可以通过三种方式来配置打印机:

  • 命令行配置工具
  • Web 配置页面
  • 系统图形配置工具

  其中 Web 和图形界面的配置相对来说较为简单,基本上对着配置界面摸索一番就能设置好打印机。而命令行对于初次在 Linux 下配置打印机的用户来说,可能需要花一点时间来熟悉和测试一些命令以及选项,所以下面会主要介绍一些命令行下常用的配置工具。

常用操作和命令

添加和删除打印机

  添加和删除打印机主要使用 lpadmin 命令。

添加打印机

USB 接口打印机

  假设场景如下:

  • 打印机型号:HP Color LaserJet 2700
  • 打印机接口:USB
  • 打印机安装后命名:Printer01

  首先使用 lsusb 查看打印机绑定的 USB 总线,USB 总线通常是以 Bus 00X 这样的方式命名,总线后面的 Device XXX 是该总线下的设备编号,我们只要知道打印机的型号、接口,以及对应的总线编号和设备编号就可以添加打印机了,命令如下:

1
# lpadmin -p Printer01 -E -v /dev/bus/usb/00X/XXX -m lsb/usr/HP/hp-color_laserjet_2700-ps.ppd.gz
Windows 共享打印机

  假设场景如下:

  • 打印机型号:Zebra 105SL Plus
  • 共享打印机 PC 的 IP 地址:192.168.2.85
  • 共享打印机在 Windows 上的共享名称:Z105SLP
  • 打印机安装后命名:Printer01

  添加 Windows 共享打印机就没有本地 USB 打印机那么繁琐了,直接使用下面的命令:

1
# lpadmin -p Printer01 -E -v smb://192.168.2.85/Z105SLP -m drv:///sample.drv/zebra.ppd

  如果打印机的共享设置了必须输入用户名和密码才能访问,怎么办?
  在 Device URI 中加上用户名和密码即可:

1
# lpadmin -p Printer01 -E -v smb://USERNAME:PASSWORD@192.168.2.85/Z105SLP -m drv:///sample.drv/zebra.ppd
LPD 协议打印机

  假设场景如下:

  • 打印机型号:Zebra 105SL Plus
  • 打印机 IP 地址:192.168.2.86
  • 打印机安装后命名:Printer01

  某些时候连接 LPD 打印机可能会需要输入完整的 Device URI,而我们在对 Zebra 的标签打印机进行测试时,只需要指定 IP 地址即可,命令如下:

1
# lpadmin -p Printer01 -E -v lpd://192.168.2.86 -m drv:///sample.drv/zebra.ppd

删除打印机

  删除打印机时就简单粗暴多了,不用管什么总线、接口、IP 地址,直接按打印机名称删除:

1
# lpadmin -x Printer01

命令选项解析

   -p 为打印机命名
   -E 启用打印机并接受打印任务
   -v 指定 Device URI
   -m 指定打印机对应的 PPD 文件
   -x 删除打印机

关于打印机自动发现

  CUPS 默认会自动发现并添加网络中其它机器上 CUPS 服务共享的打印机,当你真的需要使用他们的时候这确实很方便,但有时候根本不会用到它们,你可以使用 cupsctl 命令来控制是否自动添加网络上其它 CUPS 服务共享的打印机。

  自动发现并安装网络中的打印机:

1
# cupsctl --remote-printers

  不要自动发现和安装网络中的打印机:

1
# cupsctl --no-remote-printers

打印机状态查看

  查看当前系统的默认打印机:

1
# lpstat -d

  列出当前系统中所有的打印机:

1
# lpstat -v

  查看当前系统中所有打印机的状态:

1
# lpstat -p

  查看打印机 Printer01 的状态:

1
# lpstat -p Printer01

打印机状态管理

启用打印机和接受打印任务

  如果你在添加打印机时忘了加上 -E 选项,则打印机被添加之后默认是处于禁用且拒绝打印任务的状态,这个时候你可以使用下面的命令来启用打印机:

1
# cupsenable Printer01

  然后让其接受打印任务:

1
# cupsaccept Printer01

  在某些时候,打印任务进行到一半时打印机被拔掉或重启了,系统可能会显示该打印机为 Paused 状态,此时使用上面的 cupsenable Printer01 可以重新启用打印机并继续执行之前中断的打印队列。

禁用打印机和拒绝接受打印任务

  禁用打印机:

1
# cupsdisable Printer01

  拒绝接受打印任务:

1
# cupsreject Printer01

打印机参数设置

  查看打印机 Printer01 的当前参数设置:

1
# lpoptions -p Printer01

  将 Printer01 设置为默认打印机:

1
# lpoptions -d Printer01

  设置打印机 Printer01 使用 A4 纸张进行打印:

1
# lpoptions -p Printer01 -o PageSize=A4

  设置打印机 Printer01 使用 600 DPI 的分辨率进行打印:

1
# lpoptions -p Printer01 -o Resolution=600dpi

打印机权限管理

  允许所有用户使用 Printer01 打印(打印机添加后默认即是所有用户可使用):

1
# lpadmin -p Printer01 -u allow:all

  仅允许用户 rainywykris 使用 Printer01 打印:

1
# lpadmin -p Printer01 -u allow:rainy,wykris

  仅允许用户 rainywykris 以及 erp 组的成员使用 Printer01 打印:

1
# lpadmin -p Printer01 -u allow:rainy,wykris,@erp

  除 rainywykris 以外的所有用户都可以使用 Printer01 打印:

1
# lpadmin -p Printer01 -u deny:rainy,wykris

打印文件

  CUPS 提供了两个可以用来打印的命令行工具,分别是 lplpr

使用 lp 打印

  调用默认打印机打印 test.txt

1
# lp test.txt

  调用打印机 Printer01 打印 test.txt

1
# lp -d Printer01 test.txt

  调用默认打印机将 test.txt 打印 3 份:

1
# lp -n 3 test.txt

  调用默认打印机打印 test1.txttest2.txt

1
# lp test1.txt test2.txt

使用 lpr 打印

  调用默认打印机打印 test.txt

1
# lpr test.txt

  调用打印机 Printer01 打印 test.txt

1
# lpr -P Printer01 test.txt

  调用默认打印机将 test.txt 打印 3 份:

1
# lpr -#3 test.txt

  调用默认打印机打印 test1.txttest2.txt

1
# lpr test1.txt test2.txt

  lp 默认会回显打印任务所使用的打印机以及打印任务的编号,而 lpr 是静默执行,如果希望 lp 提交打印任务时也静默执行,可以加上 -s 选项。

管理打印任务

查看任务

  查看默认打印机的任务:

1
# lpq

  查看所有打印机的任务:

1
# lpq -a

  查看打印机 Printer01 的任务:

1
# lpq -P Printer01

删除任务

  删除编号为 269 的任务(任务编号可使用 lpq 命令查看):

1
# lprm 269

  删除默认打印机的第一个任务:

1
# lprm

  删除打印机 Printer01 的第一个任务:

1
# lprm -P Printer01

  删除默认打印机的所有任务:

1
# lprm -

  删除打印机 Printer01 的所有任务:

1
# lprm -P Printer01 -

转移任务

  将编号 269 的任务移至打印机 Printer01

1
# lpmove 269 Printer01

  将打印机 Printer01 的所有任务移至打印机 Printer02

1
# lpmove Printer01 Printer02

  上面介绍了一些 Linux 打印机管理和配置工具的常用选项,如果想要深入了解更详细的内容,可以查阅相关命令的手册和源代码。