Як відновити принтер CUPS з командного рядка?


42

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

Я хотів би написати сценарій оболонки, який буде виконуватися раз на годину для відновлення роботи принтера в CUPS. Але я не маю уявлення після того, як гуглити кілька хвилин, як відновити принтер з командного рядка оболонки.


Що є причиною цього: Одним із випадків, коли мій принтер Wi-Fi вимкнено, видаляється прапор включеним. Навіть при включенні резервного копіювання принтера прапор включеного не відновлюється для перевірки. .. --- Роботи потім накопичуватимуться у черзі друку. Повідомлення про помилку - "фільтр не вдався". Якщо я встановив прапорець у налаштуваннях принтера, принтер знову почне друкувати.
Еліптичний вигляд

Відповіді:


66

Є команда cupsenable.

cupsenable printer

запускає відключений принтер (щоб дізнатися ім'я принтера, ви можете перелічити свої принтери за допомогою lpstat -pабо lpc status).

Можливо, вам доведеться запустити команду як root або через sudo. Отже, якщо вам потрібно ввімкнути принтер у скрипті оболонки, вам доведеться додати оболонку до коронного крота або редагувати файл судорів.


1
+1 ця відповідь на відміну від "використовувати конфігурацію перекритих чашок" (як у superuser.com/a/280400/160771 ) справді допомогла. Крім того, це ще більше до речі, оскільки ОП хотіло дізнатися командний рядок
людство, і

25

Вашу проблему можна вирішити різними способами, залежно від версії 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 визначається директивою "JobRetryInterval" cupsd.conf ).

    • 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, і вона веде себе так, як вам не подобається (час від часу відключається чашкою через проблеми з мережевим зв’язком). Якщо 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 черзі спускаючись хаотично.


Як ми можемо встановити інтервал повтору для новіших версій CUPS?
Сеперо

@Sepero: Так. Наприклад: ви можете JobRetryInterval 58пробувати кожні 58 секунд. Інші можливі значення - це 1w(1 тиждень), 3d(3 дні), 7h(7 годин) або 4m(4 хвилини).
Курт Пфайфл

@Sepero: Усі можливі cupsd.confпараметри до CUPS v1.7 задокументовані тут: http://www.cups.org/documentation.php/doc-1.7/ref-cupsd-conf.html . Перевірте примітки до кожного параметра в правому краю сторінки: він підкаже, який випуск CUPS був першим, хто його підтримав. Щасливого відкриття більш корисних парам! :-)
Курт Пфайфл

8

Параметр -Eпринтера, який використовується, lpadminповинен робити це. Можливо, ви можете просто створити завдання cron за допомогою 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 примушує шифрувати під час підключення до сервера.


2
Це неправильно. -E в цьому контексті - це варіант принтера, і він повинен пройти ПІСЛЯ назви принтера, інакше ви просто вмикаєте шифрування зв'язку. developer.apple.com/library/mac/documentation/Darwin/Reference/… - Якщо вказано перед параметрами -d, -p або -x, опція -E примушує шифрувати під час підключення до сервера.
скрагар

Це єдине рішення, яке працює для мене. чашки продовжують паузувати принтер без будь-якої причини досить часто. error-policyНічого не виправити. cupsenableнічого не виправляє. Тільки lpadminдля мене.
λuser

6

У мого принтера HP CP1215 була також помилка: принтер призупинено - "/ usr / lib / чашки / бекенд / к.с. не вдалося"

Після перезавантаження 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ім'я мого принтера.

На мій досвід, як політику за замовчуванням, так і поточну політику принтера повинні бути налаштовані на повторну роботу. Політика за замовчуванням - це лише політика, яку ви отримуєте під час встановлення нового принтера.


2
ls /etc/cups/ppd/ |cut -d "." -f1 |grep -v VMware |xargs -i cupsenable {}

Тут перераховані всі файли ppd, які представляють встановлений принтер, відсікає розширення ppd, ігнорує VMware ppd, включений на багато серверів VMware (якщо вам це не потрібно, просто видаліть |grep -v VMware), та передає інші імена, на xargsякі відміняє всі друкарі.

Робота з хроном повинна зробити цю роботу добре.


1

Якщо проблема зводиться до того, що для відновлення принтера потрібен логін, то іншим рішенням є дозволити відновлення принтера через 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, але це стосується будь-якої установки чашок.


1

Відповідь від Janne вище, наприклад така:

* * * * * lpstat -p |grep "poissa käytöstä" && service avahi-daemon restart; service cups restart; cupsenable HP_Tuloostin

... призведе до того, що 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" будь-яким принтером, де ви шукаєте статус, і "відключено" будь-якими виводами lpstat -p вашою мовою.


0

Я оновив cupsd.conf рядком:

ErrorPolicy припиняє роботу

Потім я перезапустив cupsd, використовуючи: /etc/init.d/cups перезапуск

Але коли я переглядаю файл printers.conf, ErrorPolicy не оновлюється. Відповідно до документації на чашки, у розділі принтера повинен з'являтися рядок "ErrorPolicy abort-job".

Я також намагався з lpadmin оновити ErrorPolicy. Ніщо не змінює ErrorPolicy або не вносить його до файлу printers.conf.

Що я пропускаю? Як переконатися, що cupsd насправді припиняє роботу помилково?


редагувати printers.conf
KawaiKx

0

lpadmin -p p-go-avtom2 -v p-go-avtom2 -E

Джерело


5
Хочете пояснити, що саме це робить? Будь ласка, додайте трохи більше контексту.
slhck

0

Купа рішень тут не спрацювала для мене (наприклад, 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. 

Це відкриває засіб усунення неполадок друку. Це підкаже, що робити далі.

Ймовірно, вам просто доведеться перевірити властивість Enabled для свого принтера CUPS у налаштуваннях друку. (Вам потрібно буде розблокувати спочатку).

Нарешті, щоб цього не повторилося, змініть "політику" принтерів на "Повторити роботу" у згаданій вище налаштуваннях принтера (під властивостями | політики).

Виправлено це для мене!

Що спричиняє цю проблему: Якщо мій принтер Wi-Fi вимкнено під час друку на КІНСЬКИЙ ПРИНТЕР, і моя політика - «зупинити принтер», то я отримую повідомлення про те, що я не можу надрукувати, а принтер вимкнено (Увімкнено не відмічено) . Тільки якщо для політики встановлено значення "повторна робота", увімкнено не буде знято прапорець "Увімкнено". Через кілька хвилин після повернення живлення принтера ваші завдання почнуть друкувати.

(Мій інший пост про це.)


0

Доводилося мати справу з тими ж дурнями CUPS тут ... Рішенням для мене був системний скрипт, який працює кожні n хвилин.

/usr/local/cups/enable_cups_printers.sh

#!/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

cup.enable.printers.service

[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

cup.enable.printers.timer

[Unit]
Description=Run enable printers frequently to ensure connection difficulties are remedied.

[Timer]
OnBootSec=15min
OnUnitActiveSec=300

[Install]
WantedBy = timers.target

-1

Як уже говорили інші, "cupsenable" або "lpadmin -E" повинні зробити свою справу.

Пов'язана проблема - IIRC, що за замовчуванням CUPS налаштовує принтер таким чином, що якщо друк завдання якимось чином завершився, принтер вимкнений. Ви можете змінити це, щоб замінити роботу.


-1 як -E - для шифрування.
Еліптичний вигляд

Дізнайтеся, як правильно використовувати -E як варіант принтера, а не як параметр lpadmin, в іншій відповіді вище.
Еліптичний вигляд
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.