У меня есть принтер в CUPS, который из-за проблем с драйвером (HP 1010) время от времени входит в паузу.
Я хотел бы записать сценарий оболочки, который выполнится однажды в час для возобновления принтера в CUPS. Но я понятия не имею после поиска с помощью Google в течение нескольких минут, как возобновить принтер из командной строки оболочки.
Вашей проблемой можно было заняться по-разному, в зависимости от версии 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 BackEnd. 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 секунд. Задание не теряется, когда принтер выключен. Можно намеренно задержать печать просто путем выключения принтера. Хорошая конфигурация для настольных принтеров и/или домашних пользователей.
В целом, нет никакой потребности бездельничать со сценариями удара, заданиями крона, lpadmin
, cupsenable
или sudo
чтобы повторно активировать очереди CUPS, спускающиеся беспорядочно.
Существует cupsenable команда.
cupsenable printer
запускает отключенный принтер (для обнаружения printername, с которым можно перечислить принтеры lpstat -p
или lpc status
).
Вам, вероятно, придется выполнить команду как корень или через sudo. Таким образом, если бы необходимо включить принтер в сценарии оболочки, необходимо было бы добавить оболочку к crontab корня или отредактировать sudoers файл.
-E
параметр принтера, используемый с lpadmin
должен сделать это. Можно, вероятно, просто создать задание крона с lpadmin
команда.
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 опция вызывает шифрование при соединении с сервером.
Как другие уже сказали, 'cupsenable' или 'lpadmin-E' должен добиться цели.
Связанной проблемой является IIRC, который CUPS по умолчанию настраивает принтер, таким образом, что при печати задания перестал работать так или иначе, принтер отключен. Можно изменить это для прерывания задания вместо этого.
Я обновил cupsd.conf со строкой:
Задание аварийного прекращения работы ErrorPolicy
Затем я перезапустил использование cupsd: перезапуск/etc/init.d/cups
Но когда я смотрю на printers.conf файл, ErrorPolicy не обновляется. Согласно документации чашек, строка "задание аварийного прекращения работы ErrorPolicy" должна появиться в разделе принтера.
Я также пытался lpadmin обновить ErrorPolicy. Ничто не изменяет ErrorPolicy, или он не добирается до printers.conf файла.
Что я пропускаю? Как я удостоверяюсь, что cupsd на самом деле прерывает задание на ошибке?