如何剖析CUPS作业控制文件'/ var / spool / cups / cNNNNNN'?

时间:2018-12-08 23:37:20

标签: binaryfiles cups ipp-protocol

将作业打印到CUPS服务器时,可以设置 cupsd.conf 参数 PreserveJobHistory PreserveJobFiles < / em>来控制要保留的作业数量。

CUPS始终将实际的打印作业文件临时存储在目录 /var/spool/cups/ 中。由打印客户端提交的假脱机文件(在插入过滤器的CUPS转换链之前)始终命名为 dNNNNNN-001 (以“ d”开头,如“ datafile”中所示),其中 NNNNNN 是CUPS分配的作业ID。如果提交多文档打印作业,则同一作业ID中第二个文档的假脱机文件名为 dNNNNNN-002 ,依此类推...

此外,同一目录将保存以另一个字符开头的文件,即控制文件,并且每个作业的文件都将命名为 cNNNNNN

我想剖析这些控制文件。

当我使用strings工具时,它只显示了我想了解的部分内容:

示例:

 sudo strings /var/spool/cups/d00089

  attributes-charset
  utf-8H
  attributes-natural-language
  en-us
  printer-uri
  %ipp://localhost:631/printers/hp2B
  job-originating-user-name
  kurtpfeifleB
  job-name
  hosts!
  copies
  finishings
  job-cancel-after
  job-hold-until
  no-hold!

  job-priority
  job-sheets
  noneB
  none!
  number-up
  job-uuid
  -urn:uuid:ca854775-f721-34a5-57e0-b38b8fb0f4c8B
  job-originating-host-name
  localhost!
  time-at-creation
  time-at-processing
  time-at-completed
  job-id
  job-state
  job-state-reasons
  processing-to-stop-point!
  job-media-sheets-completed
  job-printer-uri
  (ipp://host13.local:631/printers/hp!

  job-k-octets
  document-format
  text/plainA
  job-printer-state-message
  job-printer-state-reasons
  none

此外,strings的输出看起来也不是很好。

问题:是否有一种编程(或其他)方式来剖析这些CUPS作业控制文件并获得包含所有包含的信息的完整内容?

2 个答案:

答案 0 :(得分:2)

我遇到了类似的问题-我们需要工作的持续时间并发现了您的话题。到目前为止,testIPP都可以正常工作,但是我不想只为这些小巧的工具编译杯子,我还需要将其集成到其他基于go的应用程序中。

我已经开始在go中实现小型CLI util,它也可用作库 https://github.com/ui-kreinhard/go-cups-control-files

答案 1 :(得分:0)

我自己找到了答案...

从源代码编译CUPS时,存在子目录 cups 。它还具有特定于此子目录的 Makefile 。该Makefile包含一个名为“ unittests” 的构建目标,默认情况下该构建目标为 NOT

但是,如果您运行 make unittests ,则它不仅运行其单元测试,而且还会创建一些命令行实用程序,这些实用程序在单元测试之外也有可能会得到很好的利用!

为解决我的问题,事实证明 testipp CLI实用程序是纯金。见自己:

sudo ./testipp /var/spool/cups/c00089

 operation-attributes-tag:

     attributes-charset (charset): utf-8
     attributes-natural-language (naturalLanguage): en-us

 job-attributes-tag:

     printer-uri (uri): ipp://localhost:631/printers/hp
     job-originating-user-name (nameWithoutLanguage): kurtpfeifle
     job-name (nameWithoutLanguage): hosts
     copies (integer): 1
     finishings (enum): none
     job-cancel-after (integer): 10800
     job-hold-until (keyword): no-hold
     job-priority (integer): 50
     job-sheets (1setOf nameWithoutLanguage): none,none
     number-up (integer): 1
     job-uuid (uri): urn:uuid:ca854775-f721-34a5-57e0-b38b8fb0f4c8
     job-originating-host-name (nameWithoutLanguage): localhost
     time-at-creation (integer): 1472022731
     time-at-processing (integer): 1472022731
     time-at-completed (integer): 1472022732
     job-id (integer): 89
     job-state (enum): completed
     job-state-reasons (keyword): processing-to-stop-point
     job-media-sheets-completed (integer): 0
     job-printer-uri (uri): ipp://host13.local:631/printers/hp
     job-k-octets (integer): 1
     document-format (mimeMediaType): text/plain
     job-printer-state-message (textWithoutLanguage): Printing page 1, 4% complete.
     job-printer-state-reasons (keyword): none

不幸的是,运行 make install 不会将此工具安装到系统中,因此它永远不会暴露给任何CUPS管理员!另外,Linux发行版打包程序可能会轻易忽略它。 testipp 对于大多数CUPS极客来说都是秘密的。

make unittests 还有一些有用的实用程序:
这些是: testadmin, testarray, testcache, testclient, testconflicts, testcreds, testcups, testdest, testfile, testgetdests, testhttp, testi18n, testlang, testoptions, testppd, testpwg, testraster, testsnmp

不幸的是,目前没有Linux发行版可以构建和发布这些有用的工具。 所以,如果您认识发行发行商,请在此处指向他,并请她为所有 cups-test-utils.rpm的最终用户打包好捆绑包 。 } cups-test-utils.deb cups-test-utils.tgz 或$ distro的软件包名称后缀是什么! `