Принт-сервер с автоматическим включением принтера на Raspberry PI

Задача — сделать из USB-принтера сетевой. Ну и т. к. нам лень каждый раз включать принтер перед печатью, а после выключать, сделаем автоматическое включение/выключение принтера.


И так, имеется принтер без Ethernet интерфейса. Также в наличии Raspberry PI первого поколения, которая для ресурсоемких задач не подходит, а в качестве принт-сервера можно использовать в самый раз.

После установки Raspbian, ставим необходимый софт для работы принт-сервера.
sudo apt-get update
sudo apt-get upgrade
sudo apt install cups cups-tea4cups samba

Разрешаем пользователю pi управление принтерами:
sudo usermod -a -G lpadmin pi

Настройка принтера
1. Отрываем в браузере адрес https://IP_адрес_raspberry:631/ и устанавливаем принтер.
2. Устанавливаем принтер на клиентах, проверяем, что печать работает.
3. Настраиваем печать через tea4cups.

Зачем нужен tea4cups? С помощью tea4cups мы сможем выполнить скрипт для включения принтера перед печатью (prehook) и скрипт выключения после окончания печати (posthook).
Для того чтобы задания печати проходило через tea4cups отредактируем конфигурационный файл /etc/cups/printer.conf.
Находим строку DeviceURI и перед usb:// добавляем tea4cups://.
Например, у нас такая строка:
DeviceURI usb://Xerox/WorkCentre%20PE16e?serial=1771-04021415481
добавляем tea4cups://, чтобы получилось так:
DeviceURI tea4cups://usb://Xerox/WorkCentre%20PE16e?serial=1771-04021415481

Перезапускаем cups и проверяем работает ли печать. Если все в порядке, то переходим к аппаратной части.

Управление электропитанием принтера
Управлять включением принтера мы будем через реле, которое включено в разрыв кабеля питания принтера. Я использовал готовый модуль реле для arduino.

Удобно подключить управление реле к 14 пину GPIO, т. к. рядом есть GND и 5V для запитки модуля реле.

Проверим, что реле работает и принтер включается и выключается.
Активируем 14 пин, назначаем его выходом и присваиваем низкий уровень.
echo "14" > /sys/class/gpio/export
echo "out" > /sys/class/gpio/gpio14/direction
echo "0" > /sys/class/gpio/gpio14/value

Эти же 3 строки необходимо добавить в скрипт /etc/rc.local для, того чтобы после перезагрузки присваивался нужный статус GPIO. Добавить команды надо перед строкой
exit 0.

Для включения реле выполняем:
echo "1" > /sys/class/gpio/gpio14/value
После этого реле должно замкнуть контакты и на принтер пойдет питание.

Проверим выключение:
echo "0" > /sys/class/gpio/gpio14/value

Приступаем к настройке tea4cups
Теперь нам необходимо, чтобы команда на включение реле подавалась при получении документа на печать, а через 5 минут выполнялась команда на отключение реле. Для этого укажем команды для prehook и posthook в файле /etc/cups/tea4cups.conf.

prehook_0 : echo "1" > /sys/class/gpio/gpio14/value
posthook_0: echo "$(date +%M' '%H -d '+5 min') * * * echo \"0\" > /sys/class/gpio/gpio14/value" > /etc/cron.d/printer_off | crontab /etc/cron.d/printer_off

С командой prehook все понятно, posthook чуть сложнее. Все дело в том, что если мы в posthook просто укажем echo "0" > /sys/class/gpio/gpio14/value, то принтер отключится еще в процессе печати первого листа, так как posthook выполняется сразу, как данные отправлены на принтер. Также у лазерных принтеров после печати некоторое время работает вентилятор для охлаждения фьюзера. Таким образом, нам необходимо выключать через некоторое время после того, как принтер получил данные на печать (например, через 5 минут). Для этого мы и используем пользовательский cron. Командой в posthook создается задание cron, в котором время увеличивается на 5 минут от времени выполнения команды.

Если все настроено верно, то при получении документа на печать принтер должен включиться, а через 5 минут после последнего задания выключиться.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *