CUPS:lp 命令仅打印最后一个文件

oz1*_*1cz 9 printing cups-lpd

我尝试从命令行打印两个文件:

$ lp alpha.txt beta.txt
Run Code Online (Sandbox Code Playgroud)

lpq命令给出以下输出:

$ lpq
HP_OfficeJet_Pro_6970_7BE7A4 is ready
Rank    Owner   Job     File(s)                         Total Size
1st     claus   56      alpha.txt                       2048 bytes
Run Code Online (Sandbox Code Playgroud)

这里,它只提到了 file alpha.txtbeta.txt但是,实际上仅打印文件。alpha.txt未打印。

原因可能是什么?

我正在运行带有 CUPS 2.4.1 的 Ubuntu 22.04.1 LTS。

更多信息

如果我用来lp打印多个文件,则会出现以下消息/var/log/cups/error_log

W [13/Dec/2022:16:22:19 +0100] [Job 61] /tmp/12345639a6b95: file is damaged
W [13/Dec/2022:16:22:19 +0100] [Job 61] /tmp/12345639a6b95 (offset 14802): xref not found
W [13/Dec/2022:16:22:19 +0100] [Job 61] /tmp/12345639a6b95: Attempting to reconstruct cross-reference table
Run Code Online (Sandbox Code Playgroud)

更多信息2

日志中的文件名以 12345 开头。这种整齐的模式纯属巧合。反复尝试表明,文件名的前 5 位似乎是gstoraster作为打印过程的一部分运行的 CUPS 过滤器的 PID 的十六进制值。所以也许问题出在那个过滤器上。

oz1*_*1cz 2

回答我自己的问题:

\n

我在 CUPS 邮件列表上发布了这个问题,并从 Helge Blischke 得到了这个答案:

\n
\n

好吧,我不完全明白这里发生了什么,\n但我至少有一个假设我\xe2\x80\x99会尝试在这里解释。

\n

我从你的日志文件中了解到的是:

\n

\xe2\x80\x94 您的打印机是使用基于 cups-browsed 功能的隐式类模拟(由 openprinting 开发的,\ncups 1.x 中实现的隐式类的功能可在 cups 2.x 中使用)来设置的。

\n

这种方法似乎 - 至少对我而言 - 相当复杂,关键特征是后端\n“隐式类”(此处使用的)通过为每个作业文件执行完整\n过滤器链来收集相关打印机的所有作业。

\n

\xe2\x80\x94 这意味着例如对于 PDF 文件(cups-filter 策略是使用 pdftopdf 过滤器将所有要打印的文件\n至少中间转换为 PDF,根据我的经验,附加一个\n额外的 EOF 字符( ^Z,我想)到每个 PDF 文件。

\n

\xe2\x80\x94 在隐式类后端执行的过滤器链中的某个位置,PDF 由 QPDF 库中实现的例程进行处理,这会导致由中间 ^Z 字符 \xe2\x80\x94 引起的 PDF 错误消息至少是我从各种消息中推断出的。

\n

由于我自己不使用cups-filters包(即使在我的Linux机器上我也不使用\xe2\x80\x99t),我没有机会\n进一步消化这个问题。但我认为我的论文不能\xe2\x80\ x99t 完全错误。

\n
\n

所以,显然,这是 CUPS 中一个相当复杂的错误,我只能忍受它。

\n