如何在CUPS中添加伪造的,虚拟的,空打印机?


12

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

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


这不是正确的“ lpadmin -p lp0 -E -v / dev / null -m raw”
Ashika Umanga Umagiliya

Answers:


11

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

cups-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文件后,可以附加要立即执行的后处理命令。

10

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

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

所以在我的Ubuntu设置中:

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

哪个最适合我。

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

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

在您的cupsd.conf中:

FileDevice yes

设定打印机

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

测试打印机

who |lp -d nowhere

我现在正在看我的打印输出:精美的细节,鲜艳的色彩使它从我的页面上跳了下来。……等等……
安德鲁·罗素

谢谢。我需要在虚拟机中使用虚拟打印机来截图一些说明。:)
njallam 2012年

谢谢。这也起作用wine
TINTI

7

您可以创建一个打印机输出,/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

如何删除?
理查德(Richard)

@Richard使用lpadmin -x myprinter或Web界面。
TorkelBjørnson-Langen17年

2

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

根据手册页上的描述:

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

要使用它,只需运行ippserver "My cool printer",它将创建一个虚拟打印机,并带有My cool printer您的名称。它像Web服务器一样运行,并侦听特定端口。

如果需要多台打印机,可以使用来在多个端口上运行服务器ippserver "My other cool printer" -p 8888

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

ATTR enum print-quality-default high

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

ippserver "My high quality cool printer" -a attributes-file.txt

参考文献:

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

1

取自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
        用户=根
        等待=否
        禁用=否
        标志= IPv6 IPv4 
运行rcxinetd reload以重新读取配置文件并激活新discard服务。或使用rcxinetd startxinetd是否是尚未激活。

CUPS打印机

现在转到CUPS Web前端并添加新打印机。作为目的地,使用socket://localhost:9/作为打印机,选择看起来很有特色的东西,例如“ HP 2500C Foomatic / pcl3”。这里的所有都是它的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.