Answers:
有cupsenable命令。
cupsenable printer
启动禁用的打印机(要查找打印机名称,可以使用lpstat -p
或列出打印机lpc status
)。
您可能必须以root用户或通过sudo运行命令。因此,如果必须在Shell脚本中启用打印机,则必须将Shell添加到root的crontab中,或编辑sudoers文件。
根据您所运行的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队列下去不正常。
JobRetryInterval 58
尝试每58秒尝试一次。其他可能的值是1w
(1周),3d
(3天),7h
(7小时)或4m
(4分钟)。
cupsd.conf
参数:http : //www.cups.org/documentation.php/doc-1.7/ref-cupsd-conf.html 。检查页面右侧每个参数的注释:它将告诉您哪个CUPS版本是第一个支持它的版本。快乐发现更多有用的参数!:-)
-E
与一起使用的打印机选项lpadmin
应该可以做到这一点。您可能只需要使用lpadmin
命令创建一个cron作业。
lpadmin [-U username ] [ -h server[:port] ] -p printer option(s)
每小时cron
输入:
0 * * * * /usr/sbin/lpadmin -p your_printer -E
您可以通过运行以下命令添加它:
sudo crontab -e
确保-E
在打印机名称后添加,因为此处是打印机选项,而不是lpadmin选项。请注意以下man lpadmin
注释中指出的页面摘录:
在-d,-p或-x选项之前指定时,-E选项在连接到服务器时强制加密。
error-policy
不能解决任何事情。cupsenable
没有解决任何问题。只lpadmin
对我有用。
我的打印机是HP CP1215,也有一个错误:打印机已暂停-“ / usr / lib / cups / backend / hp失败”
重新启动后两者cups
并avahi-daemon
和标识与打印机lpstat -p
和与启用cupsenable
,我能够再次打印。仅重新启动cups
并启用并不能解决问题。
我也将默认策略更改为retry-job,最后最终避免了以后使用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恢复打印机而无需登录。为此,请关闭杯子并编辑以下行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
指令,然后重新启动杯子。如果该指令出现在多个<Limit>
部分中,则可以将其从相关<Policy>
部分中删除或从所有部分中删除。现在,您无需从GUI登录就可以恢复打印机。我在macworld上看到了这一点,但它适用于所有杯子安装。
上面来自Janne的答案,例如:
* * * * * lpstat -p |grep "poissa käytöstä" && service avahi-daemon restart; service cups restart; cupsenable HP_Tuloostin
...将导致CUPS每分钟重新启动,而不管任何打印机处于什么状态。这是因为cups restart子句未与&&配对。
这是一个简短的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”,并用您所用语言的任何lpstat -p输出替换“ disabled”。
我用以下行更新cupsd.conf:
ErrorPolicy中止工作
然后我使用以下命令重新启动cupsd:/etc/init.d/cups restart
但是当我查看printers.conf文件时,ErrorPolicy没有更新。根据杯子的文档,“ ErrorPolicy abort-job”行必须出现在打印机部分。
我也尝试使用lpadmin更新ErrorPolicy。没有更改ErrorPolicy的任何内容,或者没有将其更改为printers.conf文件。
我想念什么?如何确保cupsd实际上因错误而中止工作?
这里的许多解决方案对我都不起作用(例如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打印机的“已启用”属性即可。(您需要先解锁)。
最后,为避免再次发生这种情况,请在上述打印机设置中(属性|策略下)将打印机的“策略”更改为“重试”。
为我修复它!
导致此问题的原因:如果在打印到CUPS打印机时我的wifi打印机已关闭电源,并且我的策略是“停止打印机”,那么我会收到一条消息,提示我无法打印并且打印机被禁用(未选中“启用”) 。仅当策略设置为“重试作业”时,才会取消选中“启用”。重新启动打印机后几分钟,您的作业将开始打印。
(关于此的我的其他帖子。)
在这里不得不处理相同的CUPS废话...对我来说,解决方案是每n分钟运行一次systemd脚本。
#!/bin/sh
for printer in $(lpstat -v | perl -pe 's/device for ([A-Za-z0-9_]+):.*/\1/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