![CUPS 堵塞打印机并导致作业停滞?](https://linux22.com/image/705231/CUPS%20%E5%A0%B5%E5%A1%9E%E6%89%93%E5%8D%B0%E6%9C%BA%E5%B9%B6%E5%AF%BC%E8%87%B4%E4%BD%9C%E4%B8%9A%E5%81%9C%E6%BB%9E%EF%BC%9F.png)
我们有 2 台网络连接的 HP LaserJet 400 M401dne,我们需要它们直接从服务器命令行打印发票 PDF。
我已将打印机添加到 CUPS,并创建了一个包含这两台打印机的打印类(发票)。
然后我设置了一个 cron 作业,它会检查目录中的发票文件,如果发现任何发票文件,就会将其发送去打印,然后移走这些文件。
lpr -P 发票 -# 4 {pdf 文件列表}
然而,似乎只要同时需要打印 4-5 张以上的发票,就会发生一些事情——打印机对 Cups 没有响应,并且 Cups 作业永远停留在队列中,不会打印也不会取消打印。
与此同时,打印机仍然接受来自并行使用的 Windows 打印系统的打印输出。
似乎有效的是取消 cups 中的所有打印作业,硬件循环打印机并执行 cupsdisable/cupsenable(不确定是否需要最后一个)。
然而,应该有一些解决方案,以便 CUPS 在准备好接受作业之前不会将其发送到打印机。
可能是什么问题?
也许我需要选择不同的打印协议?目前我使用 CUPS 管理网页建议的协议:
dnssd://HP%20LaserJet%20400%20M401dn%20(636536)._ipp._tcp.local/?uuid=564e4835-5030-3038-3636-c8cbb8636536
但也许我应该使用 IPP 或其他协议?如果是这样,我如何才能找出 HP 打印机的 IPP 队列名称?
或者也许我应该使用不同的打印机驱动程序而不是:HP LaserJet 400 M401dne Postscript(推荐)?
UPD:lpstat -v 输出:
device for invoices: ///dev/null
device for default: ///dev/null
device for HP_LJ_PRO_400_1: dnssd://HP%20LaserJet%20400%20M401dn%20(072E87)._ipp._tcp.local/?uuid=564e4633-4430-3134-3232-6c3be5072e87
device for HP_LJ_PRO_400_2: dnssd://HP%20LaserJet%20400%20M401dn%20(636536)._ipp._tcp.local/?uuid=564e4835-5030-3038-3636-c8cbb8636536
device for HP_HP_LaserJet_P2055dn: dnssd://HP%20LaserJet%20P2055dn%20%5B0E39EF%5D._pdl-datastream._tcp.local/
device for Ricoh_1515: lpd://192.168.100.33/lp
答案1
我建议在端口 9100 上使用套接字打印:
device for invoices: socket://172.16.2.40:9100
轻松配置:
# lpadmin -p invoices -v socket://172.16.2.40:9100 -E
答案2
到目前为止,似乎最好的选择是使用 ipp://printer-ip/ 来添加这台特定的打印机。
使用通用的 HP LJ PCL6 驱动程序(网络上某些地方推荐 PCL5 作为在 HP 打印机上打印 PDF 的最佳驱动程序)出现了打印机不接受复制参数(lpr -# 参数)的问题,因此我切换回 CUPS 推荐的 Postscript 驱动程序。
当使用 socket:// 接口时,仍然存在一些问题,打印作业不再接受作业并且它们挂在队列中并处于“连接到打印机”状态,并且需要手动重新启动 cups 服务器才能解决此问题。
切换到 ipp 后,这种情况就不再发生。