在 Linux 上打印很容易,但有时感觉启动应用程序、打开文件、在菜单中找到“打印”选项、单击确认按钮等等需要很多工作。当您是 Linux 终端用户时,您通常希望通过简单的触发器来执行复杂的操作。打印很复杂,而 lpr
命令非常简单。
使用 lpr 命令打印
要从终端打印文件,请使用 lpr
命令
$ lpr myfile.odt
如果失败,您需要设置默认打印机或手动指定打印机。
设置默认打印机
根据我 1984 年印刷的 Berkeley 4.2 手册,lpr
命令对文件进行分页并将其发送到打印机假脱机,该假脱机将数据流式传输到称为行式打印机的设备。

图 1:lpr 命令。
如今,实际的 lpr
命令是不够的,因为现代计算机很可能可以访问多台打印机,而且肯定比点阵行式打印机复杂得多。 现在有一个子系统,称为通用 Unix 打印系统 (CUPS),用于跟踪您希望计算机访问的所有打印机、您的计算机应使用哪个驱动程序与每台打印机通信、默认使用哪个打印机等等。 与 CUPS 捆绑在一起并且通常符号链接到 lpr
的 lpr.cups
或 lpr-cups
命令允许您通过首先引用通用 Unix 打印系统 (CUPS) 配置从终端进行打印。
要使用 lpr
打印文件,您应该首先设置默认打印机。 您可以在系统的打印机设置中设置默认打印机

图 2:设置默认打印机。
或者,您可以使用 lpadmin
命令将打印机标记为默认打印机
$ sudo lpadmin -d HP_LaserJet_P2015_Series
$ lpstat -v
device for HP_LaserJet_P2015_Series: ipp://10.0.1.222:631/printers/HP_LaserJet_P2015_Series
使用环境变量设置默认目标
您无权在您没有管理员帐户的系统上设置自己的默认打印机,因为更改打印目标被认为是特权任务。 在 lpr
引用 CUPS 获取目标之前,它会查询系统的 PRINTER 环境变量。
在此示例中,HP_LaserJet_P2015_Series
是赋予打印机的人类可读的名称。 将 PRINTER 设置为该值
$ PRINTER=HP_LaserJet_P2015_Series
$ export PRINTER
设置 PRINTER 变量后,您可以打印
$ lpr myfile.pdf
获取已连接打印机的列表
您可以使用 lpstat
命令查看所有正在接受打印作业并且已连接到您系统的打印机
$ lpstat -a
HP_LaserJet_P2015_Series accepting requests since Sun 1 Aug 2021 10:11:02 PM NZST
r1060 accepting requests since Wed 18 Aug 2021 04:43:57 PM NZST
打印到任意打印机
将打印机添加到您的系统后,并且现在您知道如何识别它们,您可以打印到其中的任何一台,无论您是否设置了默认目标
$ lpr -P HP_LaserJet_P2015_Series myfile.txt
打印机的定义方式
CUPS 有一个用户友好的前端,可以通过 Firefox 等 Web 浏览器访问。 即使它使用 Web 浏览器作为其用户界面,它实际上是在您的计算机上本地运行的服务(称为 localhost 的位置)上的 631 端口。 CUPS 管理连接到您计算机的打印机,并将其配置存储在 /etc/cups/printers.conf
中。
printers.conf
文件由详细说明您的计算机可以访问的打印设备的定义组成。 您不应该直接编辑它,但如果这样做,则必须首先停止 cupsd
守护进程。
一个典型的条目如下所示
<Printer r1060>
Info Ricoh 1060
Location Downstairs
MakeModel Ricoh Aficio 1060 - CUPS+Gutenprint v5.2.6
DeviceURI lpd://192.168.4.8
State Idle
StateTime 1316011347
Type 12308
Filter application/vnd.cups-raw 0 -
Filter application/vnd.cups-raster 100 rastertogutenprint.5.2
Accepting Yes
Shared No
JobSheets none none
QuotaPeriod 0
PageLimit 0
KLimit 0
OpPolicy default
ErrorPolicy stop-printer
</Printer>
在此示例中,打印机的名称是 r1060
,它是 Ricoh Aficio 1060 的人类可读标识符。
MakeModel 属性是从 lpinfo
命令中提取的,该命令列出系统上所有可用的打印机驱动程序。 假设您知道您有一台要打印到的 Ricoh Aficio 1060,那么您将发出此命令
$ lpinfo -m | grep 1060
gutenprint.5.2://brother-hl-1060/expert Brother HL-1060 - CUPS+Gutenprint v5.2.11
gutenprint.5.2://ricoh-afc_1060/expert Ricoh Aficio 1060 - CUPS+Gutenprint v5.2.11
此命令列出了您已安装的相关驱动程序。
MakeModel 是结果的后半部分。 在此示例中,它是 Ricoh Aficio 1060 - CUPS+Gutenprint v5.2.11
。
DeviceURI 属性标识了打印机在网络上找到的位置(或物理位置,例如 USB 端口)。 在此示例中,DeviceURI 是 lpd://192.168.4.8
,因为我使用 lpd
(行式打印机守护程序)协议将数据发送到联网打印机。 在不同的系统上,我有一台通过 USB 电缆连接的 HP LaserJet,因此 DeviceURI 是 DeviceURI hp:/usb/HP_LaserJet_P2015_Series?serial=00CNCJM26429
。
从终端打印
将作业发送到打印机是一个简单的过程,只要您了解连接到您系统的设备以及如何识别它们。 从终端打印是快速、高效的,并且易于编写脚本或作为批处理作业完成。 试试看!
评论已关闭。