如何从命令行恢复CUPS打印机?
我在CUPS里有一台打印机,由于驱动程序的问题(HP 1010),它时常会进入暂停状态,我想写一个shell脚本,每小时执行一次,恢复CUPS里的打印机。
我想写一个shell脚本,每小时执行一次来恢复CUPS中的打印机。但我在网上查了好几分钟,也不知道如何从shell命令行恢复打印机,我想写一个每小时执行一次的shell脚本,来恢复CUPS中的打印机。
我的打印机是HP CP1215也出现了错误。 Printer Paused - “/usr/lib/cups/backend/hp failed”
在重启cups
和avahi-daemon
,并用lpstat -p
识别打印机,并用cupsenable
启用后,我又可以打印了。只重启cups
并启用并没有起到作用。
我还将默认策略改为重试作业,最后用cronjob避免了以后出错:
* * * * * lpstat -p |grep "poissa käytöstä" && service avahi-daemon restart; service cups restart; cupsenable HP_Tuloostin
其中poissa käytöstä
是维护 “出错 "的芬兰本地化文本,HP_Tuloostin
是我的打印机名称。
根据我的经验,默认策略和当前打印机策略都应该配置为重试作业。默认策略是安装新打印机时得到的策略。
如果问题是由于GUI需要登录才能恢复打印机,那么另一个解决方案是允许通过GUI恢复打印机而无需登录。要做到这一点,请关闭Cups并编辑这行sudo vi /etc/cups/cupsd.conf
。
<Limit Pause-Printer Resume-Printer Enable-Printer Disable-Printer Pause-Printer-After-Current-Job Hold-New-Jobs Release-Held-New-Jobs Deactivate-Printer Activate-Printer Restart-Printer Shutdown-Printer Startup-Printer Promote-Job Schedule-Job-After Cancel- Jobs CUPS-Accept-Jobs CUPS-Reject-Jobs>
并删除Resume-Printer
指令,然后重新启动cups。如果该指令出现在多个<Limit>
部分,那么您可以从相关的<Policy>
部分删除它,或者从所有部分删除。现在你应该可以恢复打印机,而无需从GUI登录。我在macworld上看到这个,但它适用于任何杯子的安装。
上面Janne的答案,比如这个。
* * * * * lpstat -p |grep "poissa käytöstä" && service avahi-daemon restart; service cups restart; cupsenable HP_Tuloostin
… 会导致CUPS每分钟重启一次 不管任何打印机处于何种状态 这是因为cups重启子句没有与&&搭配。
下面是一个简短的BASH脚本,我用来使CUPS在检测到故障状态时重启是有条件的。
#!/bin/bash
DATE=$(date)
DS40=$(/usr/bin/lpstat -p |grep "DS40" |grep "disabled")
if [! -z "${DS40}"]; then
echo "${DATE} - Restarted avahi and cups" >> /var/log/cups/restart-cron-tim.log
/usr/sbin/service avahi-daemon restart
/usr/sbin/service cups restart
/usr/sbin/cupsenable Dai_Nippon_Printing_DS40
fi
将 “DS40 "替换为你要查找的打印机状态,将 "disabled "替换为你语言中lpstat -p的输出。
这里的很多解决方案对我来说都不适用,(例如:sudo cupsenable和lpadmin -E)。
如果你使用的是Debian 8.6,Cinnamon 2.2.16 (Linux),请从GUI开始菜单中进行操作。
Click Administration | Print Settings,
Then select your stalled CUPS printer,
Click Unlock (and give it your admin password),
Click Server | Settings,
In this click the blue "Problems?" link.
对于Ubuntu 16.04:
Click System Settings | Printers,
Then Server | Settings,
Click the blue "Problems?" link.
这将打开打印故障排除程序。它将告诉你下一步该怎么做。
也许你只需要在打印设置中检查CUPS打印机的Enabled属性。你需要先解锁)。
最后,为了避免这种情况再次发生,在上面提到的打印机设置中,将打印机的 “策略 "改为 "retry-job"(在属性|策略下)。
帮我解决了这个问题!
导致这个问题的原因:如果我的wifi打印机在打印到CUPS PRINTER时关闭了电源,而我的策略是 "停止打印机",那么我就会收到一条消息,说我无法打印,而且打印机被禁用了(Enabled是未选中的)。只有当策略设置为 "重试作业 "时,Enabled才不会被取消勾选。打印机重新启动几分钟后,您的作业就会开始打印。
(我的其他帖子中提到了这个问题。)
我也曾遇到过同样的CUPS废话。我的解决方法是每隔n分钟运行一个systemd脚本。
#!/bin/sh
for printer in $(lpstat -v | perl -pe 's/device for ([A-Za-z0-9_]+):.*//g')
do
echo "Forcely enabling printer: $printer"
# Enable:-E PrinterId:-p
/usr/bin/lpadmin -E -p "$printer"
done
[Unit]
Description = Forcely enable printer occassionally. Why CUPS disables printers in the first place has yet to be determined.
[Service]
Type = simple
ExecStart = /usr/local/cups/enable_cups_printers.sh
[Install]
WantedBy = multi-user.wants
[Unit]
Description=Run enable printers frequently to ensure connection difficulties are remedied.
[Timer]
OnBootSec=15min
OnUnitActiveSec=300
[Install]
WantedBy = timers.target