如何从命令行恢复 CUPS 打印机?

如何从命令行恢复 CUPS 打印机?

我的 CUPS 中有一台打印机(HP 1010),由于驱动程序问题,有时会暂停。

我想编写一个每小时执行一次的 shell 脚本来恢复 CUPS 中的打印机。但是在谷歌搜索了几分钟后,我还是不知道如何从 shell 命令行恢复打印机。

答案1

有 cupsenable 命令。

cupsenable printer

启动已禁用的打印机(要找出打印机名称,您可以使用lpstat -p或列出您的打印机lpc status)。

您可能需要以 root 身份或通过 sudo 运行该命令。因此,如果您必须在 shell 脚本中启用打印机,则必须将 shell 添加到 root 的 crontab,或编辑 sudoers 文件。

答案2

根据您所运行的 CUPS 版本,您可以用不同的方法来解决您的问题。

  1. 更多的CUPS 的最新版本(版本 1.2 及以上)带有一个可以提供帮助的内置功能。它被称为“ErrorPolicy”。它的默认设置在 cupsd.conf 中选择,并确定 cupsd 应如何处理未按预期运行的打印队列。您有 3 个选择可以单独标记到每个队列:

    ErrorPolicy abort-job  
    ErrorPolicy retry-job  
    ErrorPolicy retry-this-job  
    ErrorPolicy stop-printer  
    

    解释:

    • abort-job
      -- 中止此作业并继续执行同一队列中的下一个作业

    • retry-job
      -- 等待 N 秒后重试此作业(其中 N 由以下因素决定:cupsd.conf的“JobRetryInterval”指令)。

    • retry-this-job
      ——立即无限期地重试当前作业。

    • stop-printer
      -- 停止当前打印队列并保留作业以供将来打印。这仍然是默认设置,除非您按照上述替代方案另行定义。它也是 CUPS 以前版本中所有队列的默认 + 唯一可能的行为(根据您的问题,您确实想摆脱该队列)。

    此外,您可以为每个单独的打印队列设置单独的 ErrorPolicies。此设置将在 Printers.conf 文件中注明。(使用 命令行进行设置lpadmin -p printername -o printer-error-policy=retry-this-job)。

  2. 为了旧版本的 CUPS我建议你看一下behCUPS后端处理程序.beh是一个可应用于任何 CUPS 后端的包装器。

    假设您的打印队列当前已定义后端socket://192.168.1.111:9100,并且其行为方式您不喜欢(由于网络连接问题,cupsd 有时会禁用它)。beh您可以像这样重新定义后端:

    beh:/0/20/120/socket://192.168.1.111:9100
    

    这将以两分钟为间隔重试 20 次,并且仅在仍未成功时禁用队列。或者您可以这样做:

    beh:/1/3/5/socket://192.168.1.111:9100
    

    这将重试该作业 3 次,每次尝试之间间隔 5 秒。如果作业仍然失败,则将其丢弃,但不会禁用队列。您想让 cupsd 无限期地尝试连接设备吗?好的,试试这个:

    beh:/1/0/30/socket://192.168.1.111:9100
    

    无限次尝试,直到打印机恢复。连接尝试间隔为 30 秒。打印机关闭时作业不会丢失。只需关闭打印机即可有意延迟打印。对于台式打印机和/或家庭用户来说,这是一种很好的配置。


总的来说,没有必要摆弄 bash 脚本、cron 作业,lpadmincupsenable为了sudo重新激活不稳定的 CUPS 队列。

答案3

-E使用的打印机选项lpadmin应该可以做到这一点。

lpadmin [-U username ] [ -h server[:port] ] -p printer option(s)

正如下面的评论所指出的那样,请确保在打印机名称后添加-E,因为这是打印机选项,而不是选项lpadmin。请注意该页面的以下摘录man lpadmin

当在 -d、-p 或 -x 选项之前指定时,-E 选项会在连接到服务器时强制加密。

如果问题反复出现,您可能可以使用以下lpadmin命令创建 CRON 作业。每小时cron输入:

0 * * * * /usr/sbin/lpadmin -p your_printer -E

您可以通过运行来添加:

sudo crontab -e

答案4

ls /etc/cups/ppd/ |cut -d "." -f1 |grep -v VMware |xargs -i cupsenable {}

这列出了代表已安装打印机的所有 ppd 文件,切断了 ppd 扩展名,忽略了许多 VMware 服务器中包含的 VMware ppd(​​如果您不需要它,只需删除),并传递取消暂停所有打印机|grep -v VMware的其他名称。xargs

cron 作业应该可以使其正常工作。

相关内容