Как возобновить работу принтера CUPS из командной строки?
У меня есть принтер в CUPS, который из-за проблем с драйверами (HP 1010) время от времени переходит в паузу.
Я хотел бы написать сценарий оболочки, который будет выполняться раз в час, чтобы возобновить работу принтера в CUPS. Но я не знаю после нескольких минут поиска, как возобновить работу принтера из командной строки оболочки.
Есть команда cusenable.
запускает отключенный принтер (чтобы узнать имя принтера, вы можете перечислить свои принтеры с помощью lpstat -p или lpc status ).
Возможно, вам придется выполнить команду как root или через sudo. Поэтому, если вам нужно включить принтер в сценарии оболочки, вам нужно будет добавить оболочку в корневой каталог root или отредактировать файл sudoers.
Ваша проблема может быть решена по-разному, в зависимости от версии CUPS, которую вы используете.
Более свежие версии CUPS (версии 1.2 и выше) поставляются со встроенной функциональностью, которая может помочь здесь. Это называется «ErrorPolicy». Его настройка по умолчанию выбрана в cupsd.conf и определяет, как cupsd должен обрабатывать очереди печати, которые ведут себя не так, как ожидалось. У вас есть 3 варианта пометить каждую очередь в отдельности:
Объяснение:
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 Handler . beh это обертка, которая может быть применена к любому бэкэнду CUPS.
Предполагая, что ваша очередь печати в настоящий момент определила серверную часть socket://192.168.1.111:9100 , и она ведет себя так, как вам не нравится (время от времени она отключается cupsd из-за проблем с сетевым подключением). С этим beh вы бы изменили свой бэкэнд следующим образом:
Это будет повторять задание 20 раз с двухминутным интервалом и отключать очередь только в том случае, если она по-прежнему не выполняется. Или вы могли бы сделать это:
Это повторяет задание 3 раза с 5-секундными задержками между попытками. Если задание все еще не выполнено, оно отбрасывается, но очередь не отключается. Вы хотите, чтобы cupsd пытался бесконечно подключаться к устройству? Хорошо, попробуйте это:
Попробуйте бесконечно, пока принтер не вернется. Интервалы между попытками подключения составляют 30 секунд. Задание не теряется при выключении принтера. Вы можете намеренно задержать печать, просто выключив принтер. Хорошая конфигурация для настольных принтеров и / или домашних пользователей.
В целом, нет необходимости возиться с Баш сценариев, хрон рабочих мест, lpadmin , cupsenable или sudo для того , чтобы повторно активировать CUPS очереди спускаясь хаотично.
Источник
Как возобновить работу CUPS-принтера из командной строки?
У меня есть принтер в CUPS, который из-за проблем с драйверами (HP 1010) время от времени переходит в паузу.
Я хотел бы написать сценарий оболочки, который будет выполняться один раз в час, чтобы возобновить работу принтера в CUPS. Но я понятия не имею, после того, как пару минут запустил поисковый процесс, как возобновить работу принтера из командной строки.
11 ответов
Есть команда с чашечкой.
запускает отключенный принтер (чтобы узнать имя принтера, вы можете перечислить свои принтеры с помощью lpstat -p или lpc status ).
Возможно, вам придется запустить команду с правами root или через sudo. Поэтому, если вам нужно включить принтер в сценарий оболочки, вам придется добавить оболочку к корневому файлу root или отредактировать файл sudoers.
Ваша проблема может быть решена по-разному, в зависимости от версии CUPS, которую вы используете.
Дополнительные последние версии CUPS (версия 1.2 и выше) имеют встроенную функциональность, которая может помочь здесь. Это называется «ErrorPolicy». Это значение по умолчанию выбрано в cupsd.conf и определяет, как cupsd должен обрабатывать очереди печати, которые не ведут себя так, как ожидалось. У вас есть 3 варианта для каждой отдельной очереди:
Объяснение:
abort-job
— Прервать это задание и продолжить следующее задание в той же очереди
retry-job
— Повторите это задание после ожидания N секунд (где N определяется директивой cupsd.conf «JobRetryInterval»).
retry-this-job
— Повторить текущее задание немедленно и неопределенно.
stop-printer
— Остановить текущую очередь печати и сохранить работу для будущей печати. Это по-прежнему значение по умолчанию, если вы не указали иначе в соответствии с вышеупомянутыми альтернативами. Это также было по умолчанию + только возможное поведение для всех очередей в предыдущих версиях CUPS (тот, который вы хотите избавиться от вашего вопроса).
Кроме того, вы можете установить отдельные ошибки в каждой отдельной очереди печати. Этот параметр будет отмечен в файле printers.conf. (Установите его из командной строки с помощью lpadmin -p printername -o printer-error-policy=retry-this-job ).
Для старых версий CUPS я бы рекомендовал посмотреть beh , CUPS BackEnd Handler . beh — это оболочка, которая может быть применена к любому серверу CUPS.
Предполагая, что ваша очередь печати в настоящее время определила бэкэнд socket://192.168.1.111:9100 , и он ведет себя так, как вам не нравится (отключается от cupsd время от времени из-за проблем с сетевым подключением). С помощью beh вы повторно определяете свой бэкэнд следующим образом:
Это повторит задание 20 раз с двухминутными интервалами и отключит очередь только тогда, когда все еще не будет выполнено. Или вы можете сделать это:
Это повторяет задание 3 раза с 5-секундными задержками между попытками. Если задание все еще не удается, оно отбрасывается, но очередь не отключена. Вы хотите, чтобы cupsd пытался бесконечно подключаться к устройству? Хорошо, попробуйте следующее:
Попробуйте бесконечно, пока принтер не вернется. Интервалы между попытками подключения 30 секунд. Задание не теряется при выключении принтера. Вы можете намеренно отложить печать, просто отключив принтер. Хорошая конфигурация для настольных принтеров и /или домашних пользователей.
В общем, нет необходимости возиться с скриптами bash, заданиями cron, lpadmin , cupsenable или sudo , чтобы повторно активировать очереди CUPS с ошибкой.
Параметр -E , используемый с lpadmin должен сделать это. Возможно, вы просто можете создать задание cron с помощью команды lpadmin .
Почасовая запись cron :
Вы можете добавить это, выполнив:
Убедитесь, что после имени принтера вы добавили -E , потому что здесь параметр принтера, а не параметр lpadmin. Обратите внимание на следующую выдержку из страницы man lpadmin , которая указана в комментарии ниже:
При указании перед параметрами -d, -p или -x параметр -E заставляет шифрование при подключении к серверу.
После перезапуска и cups и avahi-daemon и идентификация принтера с помощью lpstat -p и включение с помощью cupsenable , я смог снова распечатать. Перезапуск только cups и включение не делали трюк.
Я также изменил политику по умолчанию для повторной работы и, наконец, в конечном итоге избежал ошибок в будущем с помощью cronjob:
где poissa käytöstä — финский текст локализации для обслуживания «не в порядке» и HP_Tuloostin — это имя моего принтера.
По моему опыту, политики по умолчанию и текущие политики принтера должны быть настроены на повторную работу. Политика по умолчанию — это только политика, которую вы получаете при установке нового принтера.
В этом списке перечислены все файлы ppd, которые представляют собой установленный принтер, отключает расширение ppd, игнорирует ppp VMware, включенную на большое количество серверов VMware (если вам это не нужно, просто удалите |grep -v VMware ), а остальные имена — на xargs , что не позволяет все принтеры.
Задача cron должна сделать эту работу хорошо.
Если проблема сводится к тому, что графический интерфейс требует входа в систему для возобновления работы принтера, то другим решением является разрешение возобновления работы принтера через графический интерфейс без входа в систему. Чтобы сделать это, выключите чашки и отредактируйте эту строку sudo vi /etc/cups/cupsd.conf :
И удалите директиву Resume-Printer , а затем перезапустите чашки. Если директива отображается в более чем одном разделе
, вы можете удалить ее из соответствующего кода
или удалить из всех. Теперь вы можете возобновить работу принтера без входа в GUI. Я видел это на macworld , но он применим к любым установкам чашек.
Я обновил cupsd.conf с помощью строки:
Ошибка отмены команды
Затем я перезапустил cupsd, используя: Перезапуск /etc/init.d/cups
Но когда я смотрю файл printers.conf, ErrorPolicy не обновляется. В соответствии с документацией чашек в разделе принтера должна появиться строка «Ошибка abc-job» ErrorPolicy.
Я также попытался с lpadmin обновить ErrorPolicy. Ничего не меняет ErrorPolicy или не попадает в файл printers.conf.
Что мне не хватает? Как я могу убедиться, что cupsd фактически отменяет задание при ошибке?
lpadmin -p p-go-avtom2 -v p-go-avtom2 -E
Ответ от Janne выше, например. это:
. приведет к перезапуску CUPS каждую минуту, независимо от того, в каком состоянии находится какой-либо принтер. Это связано с тем, что предложение перезапуска cups не сопряжено с & & amp ;.
Вот короткий скрипт BASH, который я использовал для перезапуска CUPS при обнаружении состояния сбоя.
Замените «DS40» на любой принтер, который вы ищете, и «отключен» с любыми выводами lpstat -p на вашем языке.
Куча решений здесь не работала для меня (например, sudo cupsenable и lpadmin -E).
Если вы используете Debian 8.6, Cinnamon 2.2.16 (Linux) сделайте это в меню запуска графического интерфейса пользователя:
Для Ubuntu 16.04:
Откроется средство устранения неполадок печати. Он расскажет вам, что делать дальше.
Вероятно, вам просто нужно проверить свойство Enabled для вашего принтера CUPS в настройках печати. (Сначала вам нужно разблокировать).
Наконец, чтобы это не повторилось, измените политику «принтеры» на «повторное задание» в описанной выше настройке принтера (в соответствии с политиками свойств).
Исправлено это для меня!
Что вызывает эту проблему: Если мой принтер wifi отключен, когда я печатаю на CUPS PRINTER, а моя политика — «остановить принтер», тогда я получаю сообщение, которое я не мог распечатать и принтер отключен (Enabled не установлен). Только если для параметра политики задано «повторное задание», значение «Включено» не будет отменено. Через несколько минут после того, как принтер будет включен, ваши задания начнут печатать.
(Мой другой сообщение о это.)
Как уже говорили другие, «cupsenable» или «lpadmin -E» должны делать трюк.
Связанная с этим проблема — это IIRC, которая по умолчанию CUPS настраивает принтер таким образом, что если печать задания терпит неудачу, принтер отключается. Вы можете изменить это, чтобы прервать работу вместо этого.
Источник
Сервер печати CUPS
Содержание
Сервер печати CUPS
Первичный (основной) механизм для печати и сервисов печати в Ubuntu — это Общая система печати UNIX (Common UNIX Printing System — CUPS). Данная система печати — это свободный, доступный и переносимый слой, который стал новым стандартом печати для большинства дистрибутивов Linux.
CUPS управляет заданиями печати и обеспечивает сетевую печать с использованием стандарта IPP (интернет протокол печати), поддерживая огромный список принтеров от матричных до лазерных и любых других. CUPS также поддерживает PostScript описание принтеров (PPD) и автоопределение сетевых принтеров, а также простую настройку и администрирование через web интерфейс.
Установка
Для установки CUPS на ваш Ubuntu компьютер просто используйте sudo для выполнения команды apt-get, передав ей названия пакетов в качестве параметра. Полная установка CUPS содержит много зависимостей, но они все могут быть определены в одной команде. Введите следующее в терминале для установки CUPS:
После аутентификации вас по паролю, пакеты должны загрузиться и установиться без ошибок. В заключении установки сервер CUPS будет запущен автоматически.
При необходимости решения проблем, вы можете получить доступ к ошибкам сервера CUPS через файл журнала /var/log/cups/error_log. Если журнал ошибок не дает достаточно информации для решения какой-либо проблемы, уровень журналирования CUPS можно повысить изменением директивы LogLevel в файле настроек (описывается ниже) до debug или даже debug2 со стандартного info, что будет сохранять в журнал абсолютно все. Если вы проведете такое изменение, не забудьте вернуть все обратно после решения проблемы, чтобы избежать излишнего разрастания файла журнала.
Настройка
Прежде чем редактировать файл настроек, вам стоит сделать копию оригинального файла и защитить ее от записи, чтобы у вас были оригинальные настройки в качестве руководства, которые можно восстановить при необходимости.
Скопируйте и защитите от записи файл /etc/cups/cupsd.conf.original с помощью следующих команд в терминале:
1. ServerAdmin: Для настройки email адреса назначенного администратора CUPS сервера, просто откройте на редактирование файл /etc/cups/cupsd.conf с помощью своего любимого текстового редактора, и добавьте или измените строку ServerAdmin соответствующим образом. Например, если вы администратор CUPS сервера и ваш email адрес ‘bjoy@somebigco.com’, вам следует изменить строку ServerAdmin следующим образом:
2. Listen: В Ubuntu по умолчанию установленный CUPS сервер слушает только интерфейс обратной петли по адресу 127.0.0.1. Чтобы заставить CUPS сервер прослушивать актуальный IP адрес сетевого адаптера, вы должны указать сетевое имя или пару IP адрес/порт добавочной директивой Listen. Например, если ваш сервер находится в локальной сети с IP адресом 192.168.10.250 и вы хотите сделать его доступным для других систем в этой подсети, отредактируйте /etc/cups/cupsd.conf, добавив директиву Listen, как показано ниже:
В приведенном примере вы можете закомментировать или удалить ссылки на адрес обратной петли (127.0.0.1), если вы не хотите, чтобы cupsd прослушивал этот интерфейс, а только Ethernet интерфейсы локальной сети. Чтобы разрешить прослушивать все сетевые интерфейсы, назначенные определенному сетевому имении, включая обратную петлю, вы можете создать такую запись Listen для имени (например) socrates:
или опустить директиву Listen и использовать вместо нее Port:
Для дополнительных примеров по директивам в файле настройки CUPS, смотрите ассоциированную страницу системного руководства, введя в терминале следующую команду:
Web интерфейс
Чтобы выполнить административную задачу через web интерфейс, вы должны либо разрешить учетную запись root на своем сервере, либо авторизоваться как пользователь из группы lpadmin. По соображениям безопасности CUPS не авторизует пользователей с пустыми паролями.
Чтобы добавить пользователя в группу lpadmin, выполните в терминале следующую команду:
Дальнейшая документация доступна через закладку Documentation/Help web интерфейса.
Источник