OpenWRT.su

Open.Wireless.Super and LEDE

Принт-сервер p910nd OpenWRT на примере Samsung SCX-3400

Принт-сервер p910nd OpenWRT на примере Samsung SCX-3400

До недавних пор нам хватало обычного USB подключенного принтера Samsung SCX 3400 для всех наших нужд. Но с ростом количества компьютеров, ноутбуков и даже смартфонов, которые им пользуются, было принято решение сделать из обычного USB принтера беспроводной, а на помощь нам как раз подоcпела одна из моих любимых коробочек TP-Link MR3020 с OpenWRT на борту. Тем самым отпала необходимость держать свой ноутбук, к которому был подключен принтер ранее, постоянно включенным, дабы другие участники сети имели к нему доступ. Ну и, конечно, освободил USB порт на ноутбуке для других задач.

Устанавливаем необходимые пакеты

opkg update
opkg install kmod-usb-printer

Пакет kmod-usb-printer собственно обеспечивает нам поддержку самого USB принтера в OpenWRT.

opkg install p910nd

А пакет p910nd представляет собой небольшой демон сервера печати, который копирует любую информацию, которая поступает через указанный порт на принтер, работая в фоновом режиме.

Если будите настраивать все используя веб-интерфейс LuCI, то нужно еще установить:

opkg install luci-app-p910nd

Ну а если еще ваша душа желает, чтобы все было в настройках по-русски:

opkg install luci-i18n-p910nd-ru

Если ваш OpenWRT роутер жалуется, что у вас не хватает дисковой памяти, то можете ее расширить имея под рукой флешку и немного времени. 

Настройка Принт-сервера при помощи UCI

Настроить все можно из под встроенной командной оболочки BusyBox – Ash Shell. Актуально для тех, кто борется за размер прошивки и уже давно вырезал LuCI и настраивает все при помощи команд UCI. Сначала заходим по сетевому протоколу SSH на наш роутер при помощи, например, программы PuTTY. Вводим IP роутера, протокол SSH и жмем соединиться. Вводим логин root, пароль и получаем доступ к оболочке. Для начала втыкаем наш принтер в USB порт роутера и смотрим, определился ли он:

dmesg | grep printer

Если все хорошо, в ответ получаем что-нибудь типа этого:

usblp 1-1:1.1: usblp0: USB Bidirectional printer dev 4 if 1 alt  proto 2 vid 0x04E8 pid 0x344F

Таким образом OpenWRT видит наш USB принтер и назначило ему устройство usblp0. Далее

uci show p910nd

Получим список конфигов нашего демона принт-сервера, что-то типа такого:

p910nd.@p910nd[0]=p910nd
p910nd.@p910nd[0].device='/dev/usb/lp0'
p910nd.@p910nd[0].port='0'
p910nd.@p910nd[0].bidirectional='1'
p910nd.@p910nd[0].enabled='0'

Вторая строка гласит, что устройство определил он верно usb/lp0. Третья строка с параметром port=’0’ устанавливает на какой порт нашего роутера нужно будет отсылать команду на печать. IP адрес моего роутера 192.168.0.1, если параметр port установлен в 0 то доступен принт-сервер будет по адресу http://192.168.1.1:9100. Если установите в 1, то по адресу http://192.168.1.1:9101 и так далее.

4й параметр bidirectional указывает на то, что принтер может обмениваться информацией с инициатором печати, а 5й параметр enabled собственно и включает всю нашу сборную солянку в работу. Таким образом, нам надо было только изменить последний параметр, а сделать это можно следующей командой:

uci set p910nd.@p910nd[0].enabled=1

и подтвердить изменение в конфигах

uci commit

после чего запустить наш принт-сервер:

/etc/init.d/p910nd start

Ну и добавить его в автозагрузку:

/etc/init.d/p910nd enable

Дальше открываем любой браузер, в адресной строке вводим 192.168.1.1:9100 и наблюдаем как Samsung SCX – 3400 моргает нам зеленым глазком состояния. Перегружаем роутер чтобы закрепить результат:

reboot

Настройки межсетевого экрана OpenWRT в uCI для корректной работы Принт-сервера p910nd 

uci add firewall rule

uci show firewall

Смотрим порядковый номер правила, которое только что создалось:

У меня допустим это 10. Далее задаем собственно само правило, начнем с названия:

uci set firewall.@rule[10].name='PrintServer'

Потом указываем зз каких интерфейсов чтобы был доступен принтер, * - из любых, lan - только локальная сеть, wwan - только wifi и т.д.

uci set firewall.@rule[10].src='*'

Какой порт открыть для доступа

uci set firewall.@rule[10].dest_port='9100'

uci set firewall.@rule[10].target='ACCEPT'

Внести изменения в конфиги

uci commit

Перезагрузить конфиги в фаерволл

/etc/init.d/firewall reload

/etc/init.d/firewall restart

Настройка Принт-сервера при помощи веб-интерфейса LuCI

После установки необходимых пакетов, указанных в начале статьи, у нас появится пункт меню Сервисы – p910nd сервер печати. Открываем его и переходим к настройке:

Если бывает, что вас принт-сервер не отвечает после одной печати, можно отключить двунаправленный режим, бывает спасает от забитого порта. Ну и конечно, можно выбрать интерфейс с какого можно будет отправлять вам на печать документы, у меня например он не определен - документы на печать прилетают и из локальной сети, так же от устройств подключенных к Wi-Fi сети. Но для этого нужно открыть порт принтера в межсетевом экране OpenWRT.

Настройки межсетевого экрана OpenWRT в LuCI для корректной работы Принт-сервера p910nd 

Переходим в меню Сеть -> Межсетевой экран, вкладка Правила траффика и создаем правило:

Таким вот макаром отроем порт 9100 принтера всем из любой сети, кто захочет им воспользоваться. Незабываем сохраняться и применять правила межсетевого экрана.

Настройка сетевого принтера в Windows 10

Заходим в панель управления - > Оборудование и звук - > Устройства и принтеры - > Добавление принтера.  Windows поищет-поищет но не найдет, после чего нужно нажать пункт "Необходимый принтер отсутствует в списке". Далее в списке выбрать "Добавить принтер по его TCP/IP-адресу или имени узла".  Тип устройства - Устройство TCP/IP. Имя или IP-адрес - здесь указываем адрес нашего роутера в сети. у меня это 192.168.0.104. Имя порта он пишет автоматически не нужно его править. Затем начинается новый поиск порта нашего принтера. Опять выйдет сообщение что устройство не найдено. Далее ждем далее ничего не меняя, в следующем окне находим производителя и модель своего принтера или устанавливаем дрова с диска, далее использовать уже установленный драйвер, потом задаете имя принтера какое вашей душе угодно и пробуете печать пробной страницы. 

Комментарии  

salexa
+4 # salexa 09.02.2018 21:41
Цитата:
uci add firewall rule
Смотрим порядковый номер правила, которое только что создалось...
Дабы не следить за порядковыми номерами, удобнее давать секциям осмысленные имена:
uci set firewall.PrintServer=rule
- при этом будет создана секция firewall.PrintServer с типом rule (вместо безликой firewall.@rule[n]). Ну а делее - "по тексту":
uci set firewall.PrintServer.name='PrintServer'
uci set firewall.PrintServer.src='*'
uci set firewall.PrintServer.dest_port='9100'
...
Ответить | Ответить с цитатой | Цитировать
Wrtman
0 # Wrtman 10.02.2018 21:07
Спасибо за полезное дополнение :roll:
Ответить | Ответить с цитатой | Цитировать
alex
0 # alex 12.09.2018 21:40
Принтер samsung ml-1641 и роутер delink dir-320 ни как не могу подружит, рецепт описанный в статье не универсален.
Ответить | Ответить с цитатой | Цитировать
Wrtman
0 # Wrtman 12.09.2018 21:45
Никто не претендует на универсальность. В чем же проблема?
Ответить | Ответить с цитатой | Цитировать
salexa
+2 # salexa 10.07.2018 10:18
Кстати, если маршрутизатор используется не исключительно как принт-сервер, а принтер включен/подключен не постоянно, то имеет смысл и p910nd запускать только на время, пока включен принтер:
Цитирую /etc/hotplug.d/usb/20-printer:
#!/bin/sh
VID_PID="3f0/3817" # LaserJet P2015 series
SERVICE="/etc/init.d/p910nd"

[ "$VID_PID" = "$(echo $PRODUCT | cut -d/ -f1-2)" ] || exit 0
[ "$ACTION" = add ] && "$SERVICE" start
[ "$ACTION" = remove ] && "$SERVICE" stop
Ответить | Ответить с цитатой | Цитировать
NinjaNet
0 # NinjaNet 01.09.2018 23:29
То что нужно, спс!
Ответить | Ответить с цитатой | Цитировать

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

Если вы хотите получать сообщения c ответами на ваши комментарии - то укажите свой настоящий e-mail. Если же вы тут проездом, чтобы оставить комментарий укажите в поле email no@openwrt.su