如何查看发送到 CUPS 的打印作业参数?

如何查看发送到 CUPS 的打印作业参数?

我正在编写一个程序,需要使用 打印 PDF 文件lp。我可以使用 PDF 查看器和 GUI 打印该文件,但使用时lp出现问题。我想确切地了解 PDF 查看器向 CUPS 发送了哪些选项,以便我可以在命令中使用它们lp,但我没有在 CUPS 界面中看到任何方法来执行此操作。这可能吗?

答案1

如果您知道如何从命令行运行 pdf 查看器(例如 )xpdf my.pdf,请改用以下命令:

strace -f -e execve xpdf my.pdf

这将输出像这样的行

execve("/usr/bin/lp", ["lp", "-abc", "my.pdf"], ...

它显示正在运行的命令,以及数组中显示的参数[,,,]

如果您无法从命令行运行查看器,请找到它的进程 ID(使用ps fax或类似的),如果是 2519,请使用以下命令将 strace 附加到它:

strace -f -e execve -p 2519

您应该得到类似的输出。键入control-c以终止 strace。

这可能不会显示 的执行情况lp,但如果需要,您可以要求 strace 显示更多正在执行的操作。

答案2

CUPS 将作业中的所有选项(和元数据)记录在c- 文件(控制文件)与实际的线轴数据一起传输d- 文件输入/var/线轴/杯子/

控制文件命名为cNNNNNN,其中 NNNNNN 表示 CUPS 作业 ID。

这一点我一直都知道。昨天,我需要仔细查看这些文件,但由于它们是二进制编码的,因此strings对它们进行简单的运行并不能产生足够好的结果。

首先我在StackOverflow上问了一个相关的问题,但后来我发现了一个可以剖析c文件的工具。它位于 CUPS 源代码中,但默认情况下不会构建,因此即使是最极客的 CUPS 用户也几乎看不到它(并且也不是由 Linux 发行版打包程序构建的)。

它的名字是testipp

我在 StackOverflow 上描述了如何构建它以及如何使用它:

答案3

如果您有权访问 CUPSerror_log文件(通常位于/var/log/cups/),并且如果 CUPSLogLevel debug在其设置中(在/etc/cups/cupsd.conf文件),然后您可以通过 grep 包含字符串 的行来查看每个作业将哪些命令行参数传递给 CUPS argv[5]

argv[5]包含 CUPS 在每个过滤器命令行的第五个参数中看到的所有这些参数。在这些之前,在同一行上,您还会看到打印为 的相应作业 ID [Job NNNNNN]

相关内容