如何在 CUPS 中添加虚假的、虚拟的、空的打印机?

如何在 CUPS 中添加虚假的、虚拟的、空的打印机?

我正在编写一个支持多台打印机的软件。为了测试它,我需要向 CUPS 服务器添加多台打印机。我该怎么做?

我想添加一些伪打印机,它们会将作业直接发送到 /dev/null。这样,我可以在 CUPS 界面中查看“已完成的作业”列表,并观察我的软件是否为每个作业使用了正确的打印机。

答案1

一个解决方案是安装杯子-pdf。它添加了一个虚拟打印机,用于打印 PDF 文件。网上有几个关于如何安装和配置它的教程;因为我使用 Gentoo,所以我读过Gentoo-wiki,其中还提到萨芭雍 维基

杯子-pdf虚拟打印机有一个配置文件/etc/cups/cups-pdf.conf,默认情况下所有 PDF 文件都写入其中/var/spool/cups-pdf/${USER}/。在基于 Debian 的发行版例如 Ubuntu,默认路径更改为${HOME}/PDF/

但也存在一些限制:

  • 由于只有一个配置文件,多个PDF打印机将保存到同一个目录中。

  • 无法打印“原始”数据(例如,使用lpr -o raw)。即使将 PDF 文件作为原始作业发送也行不通。原始打印作业将生成一个只有空白页的空白 PDF 文件。

即使有这些限制,它仍然完全满足我的需要。


脚注:如果用户正在使用 Gnome,或者通过 GTK+ 应用程序进行打印,则打印对话框中已经有一个“打印到文件”伪打印机。因此,为什么用户仍然想要添加虚拟 PDF 打印机?以下是几个原因:

  • “打印到文件”是 GTK+ 特有的功能,非 GTK+ 应用程序无法使用。(也许 KDE 有类似的功能,但我不确定)
  • 它使得从专为打印设计的 Flash“应用程序”生成 PDF 成为可能。例如,口袋模组
  • 在 CUPS 中添加虚拟打印机后,可以使用 shell 脚本或其他直接与 CUPS 通信的软件测试打印。这对于开发人员测试其应用程序特别有用。
  • 可以与本地网络“共享”此虚拟打印机。虽然不太有用,但可行。
  • 可以附加在 PDF 文件保存后立即执行的后处理命令。

答案2

Cups Forum 对这个问题有更完整/准确的答案。

答案是设备 URI 应该设置为 file:/dev/null

因此在我的 Ubuntu 设置中:

  • 设备 URI:文件:/dev/null
  • 品牌和型号:本地 Raw 打印机

这对我来说非常有效。

我再次搜索了 Cups 论坛并发现了以下内容:

Cups Forum 中的命令行空打印机设置

在您的 cupsd.conf 中:

FileDevice yes

设置打印机

lpadmin -p nowhere -E -v file:/dev/null

测试打印机

who |lp -d nowhere

答案3

您可以创建一个输出为的/dev/null打印机lpadmin

$ sudo lpadmin -p myprinter -E -v file:///dev/null

这将被写入/etc/cups/printers.conf,但您也可以使用 来查看打印机lpstat

$ sudo lpstat -s
myprinter accepting requests since Thu 22 Jan 2015 11:04:46 AM GMT
system default destination: myprinter
device for myprinter: ///dev/null

注意您可能需要在旧 Linux 发行版中的 /etc/cups/cupsd.conf 中启用 FileDevice

要将新打印机设为默认打印机,请使用lpoptions

$ sudo lpoptions -d myprinter

答案4

取自http://inai.de/linux/adm_virtualprinter

CUPS 中的虚拟打印机

要在 CUPS 中创建不向任何地方发送数据的打印机(如 /dev/null),有很多方法。本页使用 的socket:// 方法。

首先设置 xinetd

我们需要的是端口 9 上的 TCP Discard 服务。xinetd 已内置该服务,因此我们只需使用它即可。确保 xinetd 的配置文件中有以下定义,通常是 /etc/xinetd.d/discard。它应该包含如下服务:

    服务丢弃
        类型 = 内部
        id = 丢弃流
        socket_type = 流
        协议 = tcp
        用户 = root
        等待 = 不
        禁用 = 否
        标志 = IPv6 IPv4
运行rcxinetd reload以重新读取配置文件并激活新服务。或者如果 xinetd 尚未激活,discard则使用。rcxinetd start

CUPS 打印机

现在转到 CUPS Web 前端并添加新打印机。作为目标,使用socket://localhost:9/,对于打印机,选择一些看起来有特色的打印机,例如“HP 2500C Foomatic/pcl3”。就是这样。

相关内容