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

Den*_*aia 12 printer cups

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

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

Den*_*aia 12

一种解决方案是安装cups-pdf。它添加了一个可以写入 PDF 文件的虚拟打印机。网上有几个关于如何安装和配置它的教程;因为我使用 Gentoo,所以我阅读了Gentoo-wiki,其中也提到了Sabayon wiki

杯-PDF虚拟打印机有一个配置文件/etc/cups/cups-pdf.conf,默认情况下所有的PDF文件写入/var/spool/cups-pdf/${USER}

(注意:在 Ubuntu 上,它写入 ~/PDF/)

但是有一些限制:

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

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

即使有这些限制,它也非常适合我的需求。


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

  • “打印到文件”特定于 GTK+,不适用于非 GTK+ 应用程序。(也许 KDE 有类似的功能,但我不确定)
  • 可以从专为打印设计的 Flash“应用程序”生成 PDF。例如,PocketMod
  • 向 CUPS 添加虚拟打印机可以使用 shell 脚本或直接与 CUPS 对话的其他软件来测试打印。这对开发人员在测试他们的应用程序时特别有用。
  • 可以与本地网络“共享”这个虚拟打印机。不完全有用,但可能。
  • 可以附加后处理命令,以便在保存 PDF 文件后立即执行。


And*_*ell 10

杯赛论坛对这个问题有更完整/准确的答案。

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

所以在我的 Ubuntu 设置中:

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

这对我来说非常有效。

我再次搜索了 Cups 论坛,发现了这个:

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

在您的 cupsd.conf 中:

FileDevice yes
Run Code Online (Sandbox Code Playgroud)

设置打印机

lpadmin -p nowhere -E -v file:/dev/null
Run Code Online (Sandbox Code Playgroud)

测试打印机

who |lp -d nowhere
Run Code Online (Sandbox Code Playgroud)


Wil*_*hes 7

您可以创建一个打印机输出,/dev/null具有lpadmin

$ sudo lpadmin -p myprinter -E -v file:///dev/null
Run Code Online (Sandbox Code Playgroud)

这将写入/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
Run Code Online (Sandbox Code Playgroud)

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

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

$ sudo lpoptions -d myprinter
Run Code Online (Sandbox Code Playgroud)


小智 5

最好的解决方案之一是使用ippserver. 它带有CUPSv2.2.2和更高。您也可以从此处获取该项目:IPP 示例实现

根据手册页的描述:

ippserver 是一个简单的 Internet 打印协议 (IPP) 服务器,符合 IPP Everywhere 和 IPP 共享基础设施扩展 (INFRA) 规范。它可以用作独立的打印服务器和/或标准 IPP 客户端和符合 INFRA 规范的 IPP 代理之间的非常基本的基础设施服务器。

要使用它,您所需要做的就是运行ippserver "My cool printer",它会My cool printer为您创建一个具有该名称的虚拟打印机。它像网络服务器一样运行并侦听特定端口。

如果您需要多台打印机,您可以使用ippserver "My other cool printer" -p 8888.

您甚至可以使用属性文件提供打印机属性。例如,您的打印机默认支持高质量打印,您可以在属性文件中添加以下属性:

ATTR enum print-quality-default high
Run Code Online (Sandbox Code Playgroud)

并使用以下命令运行服务器:

ippserver "My high quality cool printer" -a attributes-file.txt
Run Code Online (Sandbox Code Playgroud)

参考:

  1. PWG IPP 样本
  2. CUPS ipptoolfile 手册页