CUPS页面会计与自定义过滤器

时间:2014-04-22 12:23:24

标签: printing postscript accounting cups

我有两台Konica Bizhub打印机,希望通过Samba打印Windows机器。

问题是,这些打印机使用帐户跟踪进行复制/扫描。我这样处理:http://casa.apertus.es/blog/2011/06/howto-account-tracking-konica-minolta-c220-under-linux/(由另一篇文章修改:将* cupsFilter添加到打印机PPD)。

但是现在我无法对打印的页面进行说明,因为每个作业都是1。

如果我理解一切正确,则必须应用“pstops”过滤器才能正确计数。有链接过滤器的方法吗?

由CUPS管理的另一台打印机(没有自定义过滤器)被正确计算并使用相同的驱动程序方法(Windows PS驱动程序与打印机特定的PPD)。

1 个答案:

答案 0 :(得分:2)

  

"我这样处理:[...]将* cupsFilter添加到打印机PPD"

注意,打印队列的PPD中的*cupsFilter: - 条目确定哪个过滤器作为该队列的过滤链的 last 实例运行,然后才通过作业数据到相应队列的后端(将其发送到最终目标打印机或文件)。

所以它真的取决于你的PPD *cupsFilter:背后隐藏了什么具体的设置。如果您的*cupsFilter:告诉CUPS将相应的数据作为" raw" 作业处理,那么它可能看不到任何创建会计信息的过滤器。您的作业数据可能未经过滤到打印设备。在这种情况下,CUPS唯一的选择是将副本1写入page_log文件。

如果你搞乱CUPS过滤(通过任何方式:编写你自己的过滤器或包装脚本,PPD中的*cupsFilter:行,或者其他......),那么你自己有责任创建一个过滤器链,在page_log

中创建正确的条目
  

"有没有办法过滤过滤器?"

当然有。

CUPS过滤器对于参数的数量以及调用它们的确切顺序非常挑剔。他们通过在终端中手动调用其中一个而无需任何参数来告诉您它是哪种方式。这是Mac OSX的一个例子:

 kp@mbp:> /usr/libexec/cups/filter/pstops 
  Usage: /usr/libexec/cups/filter.orig/pstops job-id user title copies options [file]

所以它是:

  1. 论点没有。 0:路径+过滤器本身的名称
  2. 论点没有。 1:CUPS job-id
  3. 论点没有。 2:CUPS用户名
  4. 论点没有。 3:职位名称
  5. 论点没有。 4:请求的副本数
  6. 论点没有。 5:此作业的Printjob选项。过滤器仅应用它理解的选项!
  7. 论点没有。 6:要处理的文件。可选参数。如果缺少,则表示:&#34;处理<stdin>&#34;。
  8. CUPS过滤器始终将输出提供给<stdout>,并且必须能够从<stdin>获取输入。

    如果您手动或通过脚本调用和运行过滤器,上述某些参数可能为空或可能带有虚拟值。如果为空,请使用如下的空双引号:""

    第六个参数(输入文件名)是可选的。如果缺少,则过滤器应该期望从<stdin>输入。

    因此您可以编写自己的CUPS过滤器。您有两种不同的类型:

    1. 从头开始编写CUPS过滤器。
    2. 或者将CUPS过滤器编写为包装器,运行一个原始CUPS过滤器(或一系列CUPS过滤器)
    3. 在任何情况下,您的过滤器调用约定必须遵循以上关于参数数量及其在命令行中的出现顺序的规则。

      另请注意:如果 CUPS 运行导致输出到<stderr>的过滤器,则会将此输出重定向到CUPS日志文件。因此,如果您编写自己的CUPS过滤器,您可以控制最终在CUPS&#39;通过控制<stderr>的内容来记录。如果您不希望它出现在CUPS日志中,请重定向到/dev/null

      如果 在终端中手动运行过滤器,当然<stderr>输出会出现在该终端中。

      因此,要手动将Mac上的PDF文件提供给手动调用的CUPS过滤器链,请尝试:

      in=a-one-page-pdf-file.pdf
      /usr/libexec/cups/filter/cgpdftops 1 kp "testing filter-chain" "1" "" ${in}  \
       | /usr/libexec/cups/filter/pstops 1 kp "testing filter-chain" "1" ""        \
       | /usr/libexec/cups/filter/pstopdffilter 1 kp "testing filter-chain" "1" "" \
       | /usr/libexec/cups/filter/cgpdftoraster 1 kp "testing filter-chain" "1" "" \
       | /usr/libexec/cups/filter/rastertotiff 1 kp "testing filter-chain" "1" ""  \
       | /opt/local/bin/convert - -mattecolor red -scale 25%  -frame 1x1 output.png
      

      (不要告诉我,这个特殊的过滤链没有多大意义。我知道。它仅用于演示目的。但它确实有用。)

      该命令处理PDF,首先调用5个CUPS过滤器的过滤链。然后作为最后一个过滤器,它调用ImageMagick convert命令,该命令创建一个PNG图像,其中红色细线作为页面周围的框架。

      还有更多内容,例如:

      • 现在有些过滤器如何读取和解释PPD文件,以及如何应用它们在命令行上读取的作业选项以及在PPD文件中指定的详细信息。他们从环境变量PPD中使用PPD。
      • 如果您使用关键字<stderr>EMERG:ALERT:CRIT:ERROR:,则过滤器会在消息行前面加注WARN:。 ,NOTICE:INFO:DEBUG:只有在 cupsd中相应的LogLevel设置(或更高的设置)时,这些相应的行才会显示在日志中。 conf 处于有效状态:alertcriterrorwarnnoticeinfodebug

      但是我现在就把它留在那里......