我正在编写一个支持多台打印机的软件。为了测试它,我需要向我的 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打印机呢?以下是几个原因:
And*_*ell 10
杯赛论坛对这个问题有更完整/准确的答案。
答案是设备 URI 应该设置为 file:/dev/null
所以在我的 Ubuntu 设置中:
这对我来说非常有效。
我再次搜索了 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)
您可以创建一个打印机输出,/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)
参考: