一、CUPS 简介
CUPS 是苹果公司为 macOS® 和其他 UNIX® 类操作系统开发的基于标准的开源打印系统。CUPS 使用 Internet 打印协议 (Internet Printing Protocol, IPP) 来管理打印机、打印请求和打印队列。
- IPP 是网络打印的标准协议。与其他基于 IP 的协议类似,可以在本地或通过 Internet 使用 IPP 与远程打印机进行通信。但与其他协议不同的是,IPP 还支持访问控制、验证和加密,从而使其成为比其他协议强大且安全许多的打印解决方案。IPP 位于超文本传输协议 (Hypertext Transfer Protocol, HTTP) 的顶层。HTTP 是 Internet 中的 Web 服务器的基础协议。使用 IPP 时,您可以验证打印机或服务器的状态信息、管理打印机以及通过浏览器打印作业。CUPS 是基于 IPP/1.1 的完整打印系统,它提供基本的摘要本地证书验证,以及基于用户、域或 IP 的访问控制。
- CUPS 使用 PPD(PostScript 打印机描述)文件来描述打印机所需的打印机功能和驱动程序(自2009年以来,几乎所有现代网络打印机都使用无处不在的PPD)。CUPS 内置了一些样本驱动程序支持许多 Dymo、EPSON、HP、Intellitech、OKIDATA 和 Zebra 打印机。还有更多驱动程序可从网上获取,有时也可从打印机附带的驱动程序光盘中获取。
CUPS 提供 System V 和 Berkeley 命令行界面、Web 界面和 C API 来管理打印机和打印任务。它支持本地(并行、串行、USB)和网络打印机打印,打印机可以从一台计算机共享到另一台计算机,甚至可以通过互联网共享!
- 1) System V 和 Berkeley 命令行: 这些命令包括新的 CUPS 打印命令以及之前由 LP 打印服务使用的一些打印命令。
- 2) Web 界面: 可以打开 http://localhost:631来访问打印机管理工具,并管理服务器上的打印机、类和作业。
- 3) C API: 在终端窗口中键入 system-config-printer 命令可调出以 C API 作为接口的打印机管理应用程序。
CUPS 学习资源:
CUPS 官方网站:https://www.cups.org/
CUPS 源码gitee:https://gitee.com/mirrors/cups
ORACLE CUPS 文档:https://docs.oracle.com/cd/E26926_01/html/E25812/cups-1.html#scrolltoc
Debian 打印wiki文档:https://wiki.debian.org/zh_CN/SystemPrinting
二、使用 Web 界面管理打印机
如下就是 CUPS 的 Web 界面首页,其中 Administration 菜单可以添加管理打印机,也可以添加打印类,Classes可以管理打印类,Jobs可以管理打印工程,Printers可以管理系统中已经添加的打印机。Web 界面管理打印机非常方便。
三、使用 system-config-printer 应用程序管理打印机
终端输入 sudo system-config-printer
(如果没有此命令可通过 sudo apt install system-config-printer
来安装)即可调出下面的应用程序终端,从而方便的管理打印机。
四、使用 CUPS 命令行管理打印机
1. 使用 lpinfo
列出可用的打印机或者驱动
lpinfo -v # 列出可用打印机设备
lpinfo -m # 列出可用打印机驱动(模型)
2. 使用 lpadmin
命令和正确的 URI 来添加打印机:
在使用具体的 lpadmin
命令前,先理解一下什么是正确的 URI,我们大概也知道,IPP 是 CUPS 本机支持的唯一协议,大多数网络打印机和打印服务器都支持 IPP。IPP 通过端口 631 支持加密和其他安全功能,并使用 http(Windows)、ipp 和 ipps 后端。这些后端的设备 URI 如下所示:
http://ip-address-or-hostname:port-number/printers/name/.printer
ipp://ip-address/ipp/print
ipp://ip-address-or-hostname/printers/name
ipps://ip-address/ipp/print
ipps://ip-address:443/ipp/print
ipps://ip-address-or-hostname/printers/name
后端还支持许多选项,因为知识点较广泛,写多了会影响文章整体结构,就不赘述了,如果安装了 CUPS,可以通过这个帮助文档来深入学习。
接下来看看 lpadmin
添加打印机的命令语法:
lpadmin -p printername -E -v device-uri -m ppd-name
-p printername
设置打印机名称-E
加密和启用目标并接受作业-v device-uri
指定需要连接打印机的 ipp 或者 ipps URI-m ppd-name
则是指定模型目录或驱动程序接口,从而为打印机设置标准PPD文件,可以用-m everywhere
来自动查询指定 ipp 或者 ipps URI 所引用打印机的驱动程序
如下就是添加局域网内 102.168.0.101
地址所在的打印机的命令(两条命令都可以):
lpadmin -p myprint -E -v ipp://192.168.0.101/ipp/print -m everywhere
lpadmin -p myprint -E -v ipps://192.168.0.101/ipp/print -m everywhere
CUPS 支持大多数使用基于 TCP/IP 协议的网络打印机,除了上面提到的 IPP 协议 (互联网打印协议)外,还支持 AppSocket 协议和 lpd (行式打印机守护进程)协议。比如,一些老式打印机,通常使用的就是 socket 或者 lpd URI ,需要深入了解也可查看帮助文档
3. 使用 lpadmin -x
命令删除打印机
lpadmin -x printername
4. 使用 lpoptions
命令显示或设置打印机选项和缺省值
lpoptions -d printer-name # 设置默认打印机
5. 使用 lp
或 lpr
命令来打印文件
CUPS 提供 System V 的 lp
命令和 Berkeley 的 lpr
命令来打印文件,且 lp 和 lpr 命令都支持驱动程序的打印选项。
CUPS 可识别多种类型的图像文件以及 PDF、PostScript 和文本文件,因此您可以直接使用命令来打印这些文件,而无需通过应用程序。
1)将文件打印到默认打印机
lp filename
lpr filename
2)将文件打印到指定打印机
lp -d destination-printer filename # 或者 `lpr -P destination-printer filename`
-d
指定目标打印机,destination-printer
表示目标打印机名称,filename
指定要打印的文件名。
打印选项:
选项 | 含义 |
---|---|
-d destination-printer | 打印到目标打印机(注意:lpr 指定打印机命令用的是 -P 选项) |
-n N | 打印份数 |
-q n | 打印优先级,n 的取值范围是 1-100,默认优先级为 50 |
-t “name” | 设置打印作业名称 |
-o 参数=值 | 设置打印作业选项(见下面) |
3)可以使用 -o
参数来指定打印作业选项
选项 | 含义 |
---|---|
-o media=size | 设置纸张大小、类型、或者源(见下) |
-o media=Custom.WIDTHxLENGTH | 自定义纸张大小(如7x7,7x7in,7x7cm,7x7mm) |
-o orientation-requested=3 | 设置纸张为纵向(不旋转)(portrait) |
-o orientation-requested=4 | 设置纸张为横向(旋转90度)(landscape) |
-o orientation-requested=5 | 设置纸张为横向或海景反向(旋转270度) |
-o orientation-requested=6 | 设置纸张为反向纵向或倒置(旋转180度) |
-o page-border=top,bottom,left,right | 设置页边距 |
-o page-left=N | 设置左边距为 N 点(1英寸=72点=2.54cm) |
-o page-right=N | 设置右边距为 N 点 |
-o page-top=N | 设置上边距为 N 点 |
-o page-bottom=N | 设置下边距为 N 点 |
-o print-quality=N | 设置纸张质量 - 低质量 (3), 标准 (4), 高质量 (5) |
-o fit-to-page | 缩放打印文件以适合页面 |
-o scaling=N | 缩放图片文件(文本文件无效)至页面的N%,N>100时,会打印到多个页面 |
-o sides=one-sided | 设置单面打印(默认) |
-o sides=two-sided-long-edge | 设置双面长边打印 |
-o sides=two-sided-short-edge | 设置双面短边打印 |
-o page-ranges=pages | 选择打印页面,pages的写法如:1,2-4,5 |
-o number-up=N | 每页打印版数 |
-o cpi=N | 每英寸打印文本文件时使用的字符数(字体拉宽),默认是10 |
-o lpi=N | 每英寸打印文本文件时使用的行数(字体拉长),默认是6 |
-o media=size
中的size参考值:
Letter
- US Letter (8.5x11 inches, or 216x279mm) - 美国字母(8.5 x11英寸,或216x279毫米)Legal
- US Legal (8.5x14 inches, or 216x356mm) - US Legal (8.5 x14英寸,或216x356毫米)A4
- ISO A4 (8.27x11.69 inches, or 210x297mm) - ISO A4(8.27 x11.69英寸,或210x297毫米)COM10
- US #10 Envelope (9.5x4.125 inches, or 241x105mm) - 美元10英镑信封(9.5 x4.125英寸,241x105毫米)DL
- ISO DL Envelope (8.66x4.33 inches, or 220x110mm) - ISO DL 封套(8.66 x4.33英寸,或220x110毫米)Transparency
- Transparency media type or source - 透明媒体类型或来源Upper
- Upper paper tray - 上层纸盒Lower
- Lower paper tray - 放低纸张盒MultiPurpose
- Multi-purpose paper tray - 多用途纸张托盘LargeCapacity
- Large capacity paper tray - 大容量纸张托盘
举个例子:
lp -o media=A4 -o sides=one-sided filename.doc # 单面打印到 A4 纸
lpr -o media=A4 -o resolution=600dpi filename.doc
再举自定义打印图片的例子:
lp imagename.png # 默认自适应页面打印图片
lp -o scaling=50 imagename.png # 缩放至50%的页面大小打印图片
lp -o page-left=72 -o page-right=72 imagename.png # 左右边距分别设置为1英寸,自适应打印图片
4)lp
和lpr
命令还支持从标准输入打印:
echo 'haha' | lp
6. 使用 lpstat
命令来查看打印机状态
许多系统将有不止一台打印机可供用户使用。 这些打印机可以通过并行、串行或 USB 端口连接到本地系统,也可以通过网络使用。 使用 lpstat
命令查看可用打印机列表:
选项 | 含义 |
---|---|
-r | 查看是否有打印机运行 |
-p | 查看打印机是否空闲,启用或禁用时间;后面跟打印机名称,则只查看指定打印机信息。 |
-d | 查看默认打印机名称。 |
-v | 查看打印机名称和什么设备联系在一起。 |
-t | 显示CUPS的相关状态(包括所有打印机的状态)信息,例如打印机是否处于活动状态以及是否接受打印机请求。 |
lpstat -d # 查看默认打印机名称
lpstat -r # 查看是否有打印机运行
7. 使用 lpq
查看打印机队列
lpq
为使 CUPS 管理打印环境,须先在 CUPS 下创建一个打印队列。打印队列可以指向通过 USB 端口或并行端口直接连接到系统的打印机,也可以指向网络打印机、Internet 打印机或多个打印机,具体取决于您配置应用程序的方式。无论队列指向何处,系统对待打印队列的方式与任何其他打印机相同。
五、将文件打印到pdf
首先,安装PDF虚拟打印机
sudo apt install printer-driver-cups-pdf
系统会自动安装一个名为 PDF 的虚拟打印机,接下来,只需要将目标打印机选择为PDF进行打印即可。
lp -d PFD imagename.png # 或者 lpr -P PDF imagename.png
生成的pdf文件位于 ~/PDF
目录内,用这个功能来测试打印命令很直接,也省纸张(不过,有时候同样的参数,但 PDF 打印和真实打印机打印的结果不一致)。