我的 CUPS 中有一台打印机(HP 1010),由于驱动程序问题,有时会暂停。
我想编写一个每小时执行一次的 shell 脚本来恢复 CUPS 中的打印机。但是在谷歌搜索了几分钟后,我还是不知道如何从 shell 命令行恢复打印机。
答案1
有 cupsenable 命令。
cupsenable printer
启动已禁用的打印机(要找出打印机名称,您可以使用lpstat -p
或列出您的打印机lpc status
)。
您可能需要以 root 身份或通过 sudo 运行该命令。因此,如果您必须在 shell 脚本中启用打印机,则必须将 shell 添加到 root 的 crontab,或编辑 sudoers 文件。
答案2
根据您所运行的 CUPS 版本,您可以用不同的方法来解决您的问题。
更多的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
)。为了旧版本的 CUPS我建议你看一下
beh
CUPS后端处理程序.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 作业,lpadmin
或cupsenable
为了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 作业应该可以使其正常工作。