学会用CUPS管理打印机

一、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. 使用 lplpr 命令来打印文件

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)lplpr命令还支持从标准输入打印:

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 打印和真实打印机打印的结果不一致)。

  • 22
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
要在linux下使用qt和cups修改打印机的纸张来源,需要以下步骤: 1. 安装cupscups-devel包 在终端里输入以下命令: ``` sudo apt-get install cups cups-devel ``` 2. 在Qt项目中添加cups库 在.pro文件中添加以下代码: ``` unix: LIBS += -lcups ``` 3. 使用cups API获取打印机信息 在代码中添加以下代码片段,调用cups API获取打印机信息: ``` #include <cups/cups.h> cups_dest_t *dests; int num_dests; cups_dest_t *dest; char dest_name[256]; num_dests = cupsGetDests(&dests); if (num_dests == 0) { qDebug() << "No printers found!"; } else { for (int i = 0; i < num_dests; i++) { dest = &dests[i]; if (dest->instance == nullptr) { strcpy(dest_name, dest->name); } else { snprintf(dest_name, sizeof(dest_name), "%s/%s", dest->name, dest->instance); } qDebug() << "Printer:" << dest_name; } cupsFreeDests(num_dests, dests); } ``` 以上代码可以获取所有连接的打印机信息。 4. 修改打印机设置 使用cups API修改打印机设置,以下是示例代码: ``` #include <cups/cups.h> cups_dest_t *dests; int num_dests; cups_dest_t *dest; char dest_name[256]; char *media = "A4"; num_dests = cupsGetDests(&dests); for (int i = 0; i < num_dests; i++) { dest = &dests[i]; if (strcmp(dest->name, "MyPrinter") == 0) { if (dest->instance == nullptr) { strcpy(dest_name, dest->name); } else { snprintf(dest_name, sizeof(dest_name), "%s/%s", dest->name, dest->instance); } cupsSetDestMedia(dest_name, media); qDebug() << "Media changed to" << media << "for printer" << dest_name; break; } } cupsFreeDests(num_dests, dests); ``` 以上代码将打印机 "MyPrinter" 的纸张来源设置为 "A4"。 注意:需要使用root权限运行程序才能修改打印机设置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值