Как возобновить принтер CUPS из командной строки?

У меня есть принтер в CUPS, который из-за проблем с драйвером (HP 1010) время от времени входит в паузу.

Я хотел бы записать сценарий оболочки, который выполнится однажды в час для возобновления принтера в CUPS. Но я понятия не имею после поиска с помощью Google в течение нескольких минут, как возобновить принтер из командной строки оболочки.

43
задан 13.02.2012, 13:04

0 ответов

Вашей проблемой можно было заняться по-разному, в зависимости от версии 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 я рекомендовал бы взглянуть на 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, спускающиеся беспорядочно.

25
ответ дан 07.12.2019, 08:39

Существует cupsenable команда.

cupsenable printer

запускает отключенный принтер (для обнаружения printername, с которым можно перечислить принтеры lpstat -p или lpc status).

Вам, вероятно, придется выполнить команду как корень или через sudo. Таким образом, если бы необходимо включить принтер в сценарии оболочки, необходимо было бы добавить оболочку к crontab корня или отредактировать sudoers файл.

66
ответ дан 07.12.2019, 08:39

-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 опция вызывает шифрование при соединении с сервером.

8
ответ дан 07.12.2019, 08:39

Как другие уже сказали, 'cupsenable' или 'lpadmin-E' должен добиться цели.

Связанной проблемой является IIRC, который CUPS по умолчанию настраивает принтер, таким образом, что при печати задания перестал работать так или иначе, принтер отключен. Можно изменить это для прерывания задания вместо этого.

-1
ответ дан 07.12.2019, 08:39

Я обновил cupsd.conf со строкой:

Задание аварийного прекращения работы ErrorPolicy

Затем я перезапустил использование cupsd: перезапуск/etc/init.d/cups

Но когда я смотрю на printers.conf файл, ErrorPolicy не обновляется. Согласно документации чашек, строка "задание аварийного прекращения работы ErrorPolicy" должна появиться в разделе принтера.

Я также пытался lpadmin обновить ErrorPolicy. Ничто не изменяет ErrorPolicy, или он не добирается до printers.conf файла.

Что я пропускаю? Как я удостоверяюсь, что cupsd на самом деле прерывает задание на ошибке?

0
ответ дан 07.12.2019, 08:39

Теги

Похожие вопросы