从 Linux 终端打印文件

要从终端打印文件,请使用 lpr 命令。
23 位读者喜欢这篇文章。
Typewriter with hands

rawpixel.com 提供。CC0。

在 Linux 上打印很容易,但有时感觉启动应用程序、打开文件、在菜单中找到“打印”选项、单击确认按钮等等需要很多工作。当您是 Linux 终端用户时,您通常希望通过简单的触发器来执行复杂的操作。打印很复杂,而 lpr 命令非常简单。

使用 lpr 命令打印

要从终端打印文件,请使用 lpr 命令

$ lpr myfile.odt

如果失败,您需要设置默认打印机或手动指定打印机。

设置默认打印机

根据我 1984 年印刷的 Berkeley 4.2 手册,lpr 命令对文件进行分页并将其发送到打印机假脱机,该假脱机将数据流式传输到称为行式打印机的设备。

book page displaying lpr command information

图 1:lpr 命令。

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

要使用 lpr 打印文件,您应该首先设置默认打印机。 您可以在系统的打印机设置中设置默认打印机

dialog box to set default printer

图 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 端口)。 在此示例中,DeviceURIlpd://192.168.4.8,因为我使用 lpd(行式打印机守护程序)协议将数据发送到联网打印机。 在不同的系统上,我有一台通过 USB 电缆连接的 HP LaserJet,因此 DeviceURI 是 DeviceURI hp:/usb/HP_LaserJet_P2015_Series?serial=00CNCJM26429

从终端打印

将作业发送到打印机是一个简单的过程,只要您了解连接到您系统的设备以及如何识别它们。 从终端打印是快速、高效的,并且易于编写脚本或作为批处理作业完成。 试试看!

接下来要阅读的内容
标签
Seth Kenlon
Seth Kenlon 是一位 UNIX 极客、自由文化倡导者、独立多媒体艺术家和 D&D 爱好者。 他曾在电影和计算行业工作,通常是同时进行。

评论已关闭。

Creative Commons License本作品已获得 Creative Commons Attribution-Share Alike 4.0 International License 许可。
© . All rights reserved.