跳转至内容

LPRng

来自 ArchWiki

来自 上游

LPRng 软件是 Berkeley LPR 打印后台程序功能的增强、扩展和可移植实现。在提供相同接口并满足 RFC1179 要求的同时,该实现是全新的,并提供以下功能支持:
  • 完整的(无需数据库)lpr、lpc 和 lprm 程序
  • 打印队列的动态重定向;自动作业挂起
  • 非常详细的诊断信息
  • 多个打印机服务于单个队列
  • 客户端程序无需运行 SUID root
  • 大大增强的安全检查
  • 大大改进的权限和授权机制

LPRng 成熟且稳定,并包含灵活的打印过滤机制。它作为打印服务器表现出色,但也可以作为打印客户端。通过对 CUPS 端进行少量手动配置,它还可以打印来自其他机器上安装的 CUPS 客户端的打印作业。

注意 LPRng 的一个缺点是 Gnome3/GTK3(包括 chrome 和 chromium)以及 KDE 不支持从其 GUI 进行 lpr 打印。但是,打印到文件然后使用 lpr 可以工作,尽管不方便。

安装

安装 lprngAUR 包。

安装可选的过滤器包

配置

配置包括以下步骤:

  • 设置控制文件
  • 配置过滤器
  • 创建 printcap 文件和 spool 目录
  • 启用并启动 lpd 守护进程

控制文件

本地配置

必须配置两个控制文件:

  • /etc/lprng/lpd/lpd.conf
  • /etc/lprng/lpd/lpd.perms

遥控器配置

/usr/share/doc/lprng 中的默认配置对于打印到远程打印机的客户端计算机来说已经足够。将它们复制到 /etc/lprng/lpd/

# cp /usr/share/doc/lprng /etc/lprng/lpd

并进行编辑。

服务器配置

对于接收来自互联网的请求的服务器,请取消注释 /etc/lprng/lpd/lpd.conf 中的最后一行,并按照 /etc/lprng/lpd/lpd.perms 文件注释中记录的方式配置权限。

注意 位于 /usr/share/doc/lprng 的文件 lpd.conf.samplelpd.perms.sample 记录了更复杂的情况。

配置打印机设置(过滤器)

如果你只需要选择以下过滤器(设置)说明中的一种,这就可以了。只需决定你想要采用哪种方式。

Postscript 打印机

如果你有一台网络 Postscript 打印机,那么你很幸运。示例 postscript 过滤器 /usr/share/doc/lprng/psfilter 将 PDF 和文本文件转换为 Postscript。其他文件类型将被拒绝。

将此文件复制到 /usr/lib/lprng/lpd 并根据需要重命名。然后编辑它以设置你的纸张类型和单面/双面打印的选择。

如果你希望拥有单独的单面和双面打印队列,请创建两个不同名称的副本并进行相应编辑。

Foomatic 系统

另一种打印过滤机制是通过 Foomatic 系统。该系统被 CUPS 使用。安装 foomatic-filters-lprngAUR,因为 CUPS 安装中的 foomatic-rip 程序已被修改为移除 LPRng 支持。

使用上面描述的 foofilter,并根据你想要的 .ppd 文件进行编辑。按照 foofilter 中指定的路径安装 .ppd 文件。(/etc/lprng/lpd 是一个好位置。)

要使用惠普打印机,请从主发行版安装 hplip。此包包含几乎所有惠普打印机的 .ppd 文件。

Ghostscript 驱动

如果你有一台拥有 Ghostscript 驱动的打印机,请像上面一样复制并编辑 gsfilter 以设置适当的驱动程序和纸张类型。你可以通过输入以下命令来发现你的 Ghostscript 版本中可用的驱动程序:

$ gs -h

请注意,对各种打印机功能的支持通常是有限的,并且在此选项下是过时的。

Printcap 文件

/etc/lprng/printcap 文件告诉 LPRng 你拥有的打印机以及需要使用的打印过滤器。

示例

printcap.sample 文件(位于 /usr/share/doc/lprng)提供了一个关于如何设置 printcap 文件的简短教程。此目录中的 printcap 片段 printcap_serverprintcap_client 提供了额外信息。

一个示例文件可能如下所示,用于两台本地打印机:

DCPJ4120DW:\
     :mx=0:\
     :sd=/var/spool/lpd/DCPJ4120DW:\
     :sh:\
     :lp=/dev/usb/lp1:\
     :if=/opt/brother/Printers/dcpj4120dw/lpd/filterdcpj4120dw:
HL2035:\
     :mx=0:\
     :sd=/var/spool/lpd/HL2035:\
     :sh:\
     :lp=/dev/usb/lp0:\
     :if=/opt/brother/Printers/brhl2035/lpd/filterHL2030:

网络打印建议

通常,应将一台计算机指定为一台或多台打印机的服务器。其他客户端计算机应将打印作业发送到服务器,而不是直接发送到打印机。

printcap_server 中相当不明显的服务器设置对于在网络打印机上实现打印过滤是必需的,而不是针对通过 USB 端口等直接连接到服务器计算机的打印机。(请参阅 参考手册。)

创建 printcap 文件后,以 root 身份运行命令:

$ /usr/bin/checkpc -f

这将检查你的配置并在 /var/spool/lpd 中创建 spool 目录。如果 checkpc 报告了任何问题,请解决该问题并重新运行。

启动 lpd 守护进程

LPRng 在后台运行一个名为 lpd 的守护进程来管理打印请求。启动/启用 lpd.service

如果更改了任何配置文件,则必须重新启动 lpd

用法

lpr 命令是 LPRng 中的打印工具。其通用用法格式为:

$ lpr [options] file_to_be_printed

如果没有指定文件,则从标准输入接受输入。最有用的选项是 -P printer-K number_of_copies。如果没有指定打印机选项,则将环境变量 PRINTER 设置为打印机名称将告诉 LPRng 使用哪个打印机。

其他有用的命令是 lpq(检查打印队列)和 lprm(从队列中删除打印作业)。请参阅 lpr(1)lpq(1)lprm(1)

CUPS 和 LPRng

CUPS 可用于让未安装 LPRng 的客户端机器访问服务器上的打印机。诀窍在于配置 CUPS 以通过 lpd 协议访问打印机。使用 CUPS 的 Web 界面很容易做到。此外,由于此处设置的服务器会执行所有必要的打印过滤,因此请告诉 CUPS 使用 raw 过滤器。可以根据你的需求设计过滤职责的替代划分。

故障排除

特定打印机说明

尽管标题如此,CUPS/Printer-specific problems 中的部分信息并非 CUPS 特有。

GTK2

GTK2 应用程序仍然支持 lpr 打印。为了使此功能生效,请在你主目录中创建 ~/.gtkrc-2.0 文件,其中包含一行:

gtk-print-backends = "file,lpr"

LXDE

如果桌面外观和感觉被更改,LXDE 可能会创建自己的 ~/.gtkrc-2.0 文件 — 在该文件中查找有关如何继续的说明。

Postscript 打印

来自 poppler 包的 pdftops 过滤器用于在打印过滤器中从 PDF 文件创建 Postscript。

偶尔,pdftops 会产生错误或无效的输出。可以替换为来自 ghostscript 包的备用过滤器 pdf2ps,但此过滤器有其自身的问题。

对于一次性情况,只需使用 pdf2ps 或其他转换器生成 Postscript,然后将其发送到打印机。

双面 PS

示例过滤器中通过在第一行之后插入一行 Postscript 代码来实现 Postscript 文件的双面打印。对于某些 Postscript 文件,此方法不起作用。

在这种情况下,将 Postscript 文件发送到单面打印队列。为单面打印设置的打印过滤器 psfilter 不会对 Postscript 文件进行任何过滤。