我正在编写一个支持多台打印机的软件。为了测试它,我需要向 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 论坛并发现了以下内容:
在您的 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”。就是这样。