Author Topic: CUPS автоматическая смена статуса принтера  (Read 6013 times)

0 Members and 1 Guest are viewing this topic.

Offline Xray_Linux_Root

  • Sr. Member
  • ****
  • Posts: 296
  • Karma: +2/-0
Что имеем:
1. Принтсервер на базе Linux. Система печати CUPS.
2. Принтера подключённые  по USB.

Совершаемые действия (имитация проблемы):
1. Обесточиваем принтер.
2. Отправляем пару документов на принтсервер на порт выключенного принтера.
3. Подаём питание на обесточенный принтер.

Результат:
Результат печальный. Задания отправленные на печать в момент отключения принтера остаются в спуле и ничего не происходит, т.к. CUPS оставляет состояние принтера в режиме ожидания.
1. Если после этого всего перезагрузить сервер печати состояние принтера в CUPS не изменится.
2. Если состояние принтера в CUPS изменить вручную (в вэб-интерфейсе нажать кнопку "Start Printer"), то он без проблем отпечатает все задания находящиеся на тот момент в спуле системы печати.
3. Если запретить изменение файла /etc/cups/printers.conf, то принтер возвращается в рабочий режим после перезагрузки демона cups.

Выводы:
При каждом отключении питания принтеров приходится вручную менять статус всех принтеров, что не есть хорошо.

Требуется:
Система должна работать полностью автономно (без какого либо вмешательства пользователя или администратора).

Вопрос:
Как можно средствами CUPS сделать, чтобы статус принтера (в системе печати CUPS) менялся автоматически на рабочий при изменении состояния самого принтера?
« Last Edit: September 22, 2006, 14:20:44 by Xray_Linux_Root »
Mandrake, ASPLinux, Slackware, RedHat, Fedora, Debian
Зачем M$ Exchange? Есть eGroupware!
-j MASQUERADE + друзья в других сетях помогут построить мир независимо от желания вашего провайдера ;)

Offline stranger

  • Hero Member
  • *****
  • Posts: 922
  • Karma: +0/-0
    • http://
Самый простой вариант - не выключать принтеры вообще  
Если принтеры типа HP 24xx и подобные - они могут переходить в спящий режим и предназначены для постоянного включения.
Вариант второй - можно попробовать покапаться в реализации горячего включения по USB и ловить моменты отключения и включения устройств соответственно (об этом должно в логах писаться) и в момент включения делать переинициализацию устройств и cups, а в момент отключения корректное отключение устройства.
Ну и полседний вариант, если принтеры могут держать lpt, то можно взять JetDirect rfrой-нибудь и посдить их на них (хотя сейчас возможно есть usb-шные JetDirectы)
[span style='font-family:Geneva'][span style='font-size:8pt;line-height:100%'][span style='color:gray']Единственное условие, от которого зависит успех, есть терпение.   Л.Н.Толстой
[/span][/span][/span]

Offline Xray_Linux_Root

  • Sr. Member
  • ****
  • Posts: 296
  • Karma: +2/-0
Quote from: stranger
Самый простой вариант - не выключать принтеры вообще  
Если принтеры типа HP 24xx и подобные - они могут переходить в спящий режим и предназначены для постоянного включения.
Если принтера гасились раньше, они по инерции будут гасится и дальше. Ну и плюс сюда же внештатное отключение электроэнергии (т.к. фазы разные и один выбитый автомат обесточит принтера, но не клиентов - к примеру).

Quote from: stranger
Вариант второй - можно попробовать покапаться в реализации горячего включения по USB и ловить моменты отключения и включения устройств соответственно (об этом должно в логах писаться) и в момент включения делать переинициализацию устройств и cups, а в момент отключения корректное отключение устройства.
Этот вариант тоже изучаю.

Quote from: stranger
Ну и полседний вариант, если принтеры могут держать lpt, то можно взять JetDirect rfrой-нибудь и посдить их на них (хотя сейчас возможно есть usb-шные JetDirectы)
А теперь самый смешной ответ! Принтсервер на базе Linux был установлен (планируется ещё n-цать поставить) на смену принтсерверу D-Link DP-300+ в виду постоянного переполнения буфера портов принтсервера (и соответсвенно постоянных отказов последнего). Всё это включая покупку DP-300+ и установку и настройку принтсервера на базе Linux в организации сделали в целях экономии денег, и для развлечения IT-подразделений
Так что я думаю JetDirect в этой конторе вряд ли когда появится.

Временное решение
Пока повесил в cron скрипт, на время разбирательства, вида:
Code: [Select]
#!/bin/sh
#
# Константы
# # # #
CUPS_ENABLE="/usr/bin/enable"
CUPS_LPSTAT="/usr/bin/lpstat"
LPSTAT_OPT="-a"
AWK="/bin/awk"

#
# Динамические переменные
# # # #
CUPS_PRINTERS=`$CUPS_LPSTAT $LPSTAT_OPT | $AWK '{print $1}'`

#
# Вычисления
# # # #
for all_prn in $CUPS_PRINTERS; do
    $CUPS_ENABLE $all_prn
done

Прочтение документации по адресу http://printserver:631/documentation.html пока особых результатов не принесло.

Так что вопрос по прежнему в силе
Mandrake, ASPLinux, Slackware, RedHat, Fedora, Debian
Зачем M$ Exchange? Есть eGroupware!
-j MASQUERADE + друзья в других сетях помогут построить мир независимо от желания вашего провайдера ;)

Offline Xray_Linux_Root

  • Sr. Member
  • ****
  • Posts: 296
  • Karma: +2/-0
Проблема решилась.

Дело в том, что принтера создавались при помощи вэб-интерфейса, а работает он очень интересно. Если принтера были подключены до запуска демона CUPS то мастер подставляет в поле не путь_имя_устройства, а имя принтера.
Т.е. вместо секции конфигурации принтера вида:

Code: [Select]
<Printer Canon_LBP-810>
Info Canon LBP-810
Location Бухгалтерия
DeviceURI usb:/dev/usb/lp0
State Idle
Accepting Yes
JobSheets none none
QuotaPeriod 0
PageLimit 0
KLimit 0
</Printer>


мы имеем:

Code: [Select]
<Printer Canon_LBP-810>
Info Canon LBP-810
Location Бухгалтерия
DeviceURI usb://Canon/LBP-810e�
State Idle
Accepting Yes
JobSheets none none
QuotaPeriod 0
PageLimit 0
KLimit 0
</Printer>

Отредактировав все конфигурации вручную приведя их к виду:
Code: [Select]
.   .   .
DeviceURI usb:/dev/usb/lp0
.   .   .
я попробовал имитировать описанную в самом начале проблему. У меня этого не получилось, т.е. принтера так ни разу и не остановились. После выключения принтера и отправки на него тестовых страниц он нормально начинал работать, стоило его только включить.
« Last Edit: September 23, 2006, 10:19:19 by Xray_Linux_Root »
Mandrake, ASPLinux, Slackware, RedHat, Fedora, Debian
Зачем M$ Exchange? Есть eGroupware!
-j MASQUERADE + друзья в других сетях помогут построить мир независимо от желания вашего провайдера ;)

Offline stranger

  • Hero Member
  • *****
  • Posts: 922
  • Karma: +0/-0
    • http://
Хм... Интересно было об это узнать - сам с таким не сталкивался, хотя один принтер у нас дурит (правда админом не я там на линухе). Теперь буду знать в случае чего...
[span style='font-family:Geneva'][span style='font-size:8pt;line-height:100%'][span style='color:gray']Единственное условие, от которого зависит успех, есть терпение.   Л.Н.Толстой
[/span][/span][/span]