8-900-374-94-44
[email protected]
Slide Image
Меню

Openwrt принт сервер: Принт-сервер p910nd на OpenWrt — OSBoy notes

software:openwrt:printserver [Net Lab]

Table of Contents

  • Print server enterprise уровня на OpenWRT

    • Features

  • Установка

  • Настройка

    • Включение DHCP клиента

    • Фиксация MAC адреса

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

    • Скрипт 10-prnt-helper

      • Функционал

      • Установка

      • Установка прошивок

      • Автозапуск

      • Персистентность

    • p910nd

  • Обновление

  • Заключение

  • Источники

Эта инструкция по созданию сервера печати на базе OpenWRT.
Имеющиеся в продаже готовые решения примитивны и неоправданно дорого стоят.
Из всех имеющихся на рынке готовых решений только Zyxel Keenetic на старой прошивке версии 1 (возможно на новых тоже) может автоматически загружать прошивку в принтер, но это не сервер печати а WiFi роутер.

Features

  • Возможность получить и установить свежую прошивку

  • Широкий выбор аппаратной платформы

  • Поддержка IPv6, DHCPv6 и тп

  • Поддержка USB хабов

  • Поддержка WiFi (встроенного или через дополнительный PCI/USB адаптера)

  • Возможность одновременной работы с несколькими принтерами

  • Автоматическая загрузка прошивки в принтер при включении сервера печати или принтера

Лучше посмотреть инструкции по установки для выбранного устройства на сайте openwrt.
На NanoPi NEO установка сводится к:

  1. скачать ext4 образ

  2. с помощью dd залить его на MicroSD флешку

  3. вставить флешку в NanoPi NEO

Заходим в веб интерфейс, адрес по умолчанию: 192.168.1.1, логин root, пароля нет.

Включение DHCP клиента

Переключаем для работы в качестве DHCP клиента, это более предпочтительно для сервера печати.

  1. Переходим в Network->Interfaces

  2. Edit для LAN

  3. Вкладка General Settings, Protocol: выбираем DHCP Client и Switch protocol, Save, Save & Apply

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

Фиксация MAC адреса

Для NanoPi NEO требуется зафиксировать mac адрес, чтобы он не генерировал новый после каждой перезагрузки.

  1. Переходим в Network->Interfaces

  2. Edit для LAN

  3. Вкладка Advanced Settings, Override MAC address: вводим примерно тоже самое что там отображается и

    Save, Save & Apply

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

  1. Переходим в System->Software

  2. Update lists… (интернет должен быть уже настроен),

  3. В появившемся окне: Dismiss

  4. Устанавливаем: p910nd, luci-app-p910nd, kmod-usb-printer, kmod-lp

Либо через SSH вводим

opkg update
opkg install p910nd luci-app-p910nd kmod-usb-printer kmod-lp

Скрипт 10-prnt-helper

Функционал

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

  1. создаёт symlink /dev/PRINTER_SERIAL_NUMBER на /dev/usb/lpX — это нужно чтобы при наличии двух одинаковых принтеров они всегда получали один и тот же TCP порт, не зависимо от порядка включения/загрузки

  2. загружает прошивку с именем ${DEV_VID}-${DEV_PID}. dl из /etc/fw в принтер

  3. выводит информацию о своих действиях в Status->System Log

Установка

  1. Подключаемся по ssh:

    ssh [email protected]
  2. Создаём папку:

    mkdir -p /etc/hotplug.d/usbmisc/
  3. Скачиваем скрипт:

    wget -O /etc/hotplug.d/usbmisc/10-prnt-helper http://www.netlab.linkpc.net/download/software/openwrt/print_server/10-prnt-helper
  4. Устанавливаем права:

    chmod 0755 /etc/hotplug.d/usbmisc/10-prnt-helper
  5. Устанавливаем владельца:

    chown root:root /etc/hotplug.d/usbmisc/10-prnt-helper

Установка прошивок

  1. Переходим в Status->System Log и ищем строчки содержащие prnt-helper, если принтер подключён и всё сделано правильно они обязательно будут, как пример для HP 1018 будет примерно так:

    Sat Jan 16 00:26:07 2021 user. notice prnt-helper: Device /dev/usb/lp0 linked to /dev/DF32CGE
    Sat Jan 16 00:26:07 2021 user.notice prnt-helper: Attempt to load /etc/fw/03f0-4117.dl to /dev/usb/lp0
  2. Создаём папку:

    mkdir -p /etc/fw/
  3. Скачиваем прошивку для HP 1018:

    wget -O /etc/fw/03f0-4117.dl http://www.netlab.linkpc.net/download/software/openwrt/print_server/20051028_hp1018.dl

DF32CGE — Уникальный серийный номер принтера.
03f0-4117.dl — VID-PID для HP 1018.
20051028_hp1018.dl — прошивка к которой уже добавлены нужные заголовки.
Подробнее про прошивки и где/как их добывать можно прочитать тут Printer firmware uploder / converter

Автозапуск

На случай если принтер и принт сервер были обесточены а потом включены одновременно требуется чтобы при загрузке 10-prnt-helper запускался из стартовых скриптов, поскольку hotplug событие не отрабатывает такие ситуации.

  1. Переходим в System->Startup, вкладка Local Startup

  2. перед “exit 0” добавляем:

    for _UMDIR in `find /sys/devices/platform/ -type d -name 'usbmisc'`; do
    	_LPDIR_PATH=`find "${_UMDIR}" -maxdepth 1 -type d -name 'lp*'`
    	[ -z "${_LPDIR_PATH}" ] && continue;
    	_LPNAME=`basename "${_LPDIR_PATH}"`
    	[ ! -c "/dev/usb/${_LPNAME}" ] && continue;
    	_DEVPATH=`echo "${_LPDIR_PATH}" | sed -e 's|/sys||'`
    	echo "Force hotplug for: DEVNAME=usb/${_LPNAME}"
    	ACTION=add DEVNAME="usb/${_LPNAME}" DEVPATH="${_DEVPATH}" /etc/hotplug.d/usbmisc/10-prnt-helper
    done
  3. Save

Персистентность

Чтобы скрипт и файлы прошивок сохранялись в бэкапах конфигурации а так же при обновлении нужно проделать следующее:

  1. Переходим в System->Backup / Flash Firmware, вкладка Configuration

  2. Добавляем текст:

    /etc/hotplug. d/usbmisc/10-prnt-helper
    /etc/fw/*
  3. Save

p910nd

  1. Переходим в Services->p910nd — Printer server

  2. Включаем enable

  3. В поле Device вместо /dev/usb/lp0 можно прописать /dev/DF32CGE (то что было в Status->System Log)

  4. Остальное на своё усмотрение

  5. Save & Apply

  1. Через WebUI загрузить ext4 образ (для NanoPi NEO)

  2. Заново установить компоненты

  3. Перезагрузить

Не рассмотрена настройка фаервола, безопасности и прочих базовых возможностей OpenWRT.
Расширенные функции, такие как автоматическое обнаружение тоже не настраивались, возможно это будет сделано позже и данная заметка будет дополнена.

Ретроспективно, это четвёртая реализация сервера печати для HP 1018 за последние 14 лет:

  1. Сервер печати TL-PS110U + Printer firmware uploder / converter

  2. FreeBSD 9 на Equeleus 8132, самописный демон dprint и скрипт под devd для загрузки прошивки (почти не использовалось)

  3. Zyxel Keenetic Giga — проработал долго, пока роутер не вышел из строя, после него использовался опять первый вариант


Основная причина создания этого решения — необходимость автоматической загрузки прошивки в принтер, при этом более качественных и компактных принтеров, не прихотливых в обслуживании сейчас на рынке нет.


Возможности заменить плату на аналогичную с флешкой под прошивку и сетью — теоретически есть, но времени на реализацию уйдёт больше при не гарантированном результате.

В планах на будущее:

  • Добавить автоматическое обнаружение

  • Установить NanoPi NEO в металлический корпус

  • Подключить к NanoPi NEO сканер и настроить кнопки на нём для сканирования на сервер и копирования

p910nd Printer Server
Hotplug
Настройка Hotplug на OpenWRT
Printer firmware uploder / converter
GDI printer and net print server
usb_printerid

software, howto, linux, openwrt, print

Как сделать принт сервер своими руками?

Содержание

  • 1 Как сделать виртуальный принт сервер?
  • 2 Принт сервер usb своими руками
  • 3 Самодельный принт сервер: формирование образа

Итак, есть принтер Ecosys FS-1120D, подключенный к одному компьютеру. Все остальные компьютеры в сети используют его как сетевой. Но если этот компьютер сломается, все останутся без распечатки. Как убрать из цепи Компьютер-Компьютер-Принтер среднее звено? Первый вариант – купить принт-сервер, второй – приобрести принтер с сетевой картой. И то, и другое требует затрат, да и не интересно. Поэтому надо покопаться на пыльных полках.

Итого: латанная материнская плата на AM2, старенький блок питания, двухъядерный Celeron и два гигабайта оперативной памяти. Это – будущий usb принт сервер, который мы сделаем своими руками.

Как сделать виртуальный принт сервер?

Этап первый, система

Дальнейшее всё делается на виртуальной машине. В качестве операционной системы используется Ubuntu Server 16.04, в основном из-за широкого списка поддерживаемого оборудования.

Устанавливаем систему на виртуальную машину:

  1. 1. Задаём имя компьютера prints.
  1. 2. Задаём имя пользователя print_admin, устанавливаем пароль.
  1. 3. Разбиение диска оставим по умолчанию (это совершенно не важно).
  1. 4. Отключаем автоматическое обновление.
  1. 5. Убирается всё из списка пакетов – устанавливается необходимый минимум, всё остальное установится вручную. Чем меньше будет объем системы, тем лучше.
  2. 6. Перезагружаемся.

Получилась базовая система. В неё надо добавить пакеты:
sudo apt-get update
sudo apt-get install samba samba-common cups mc

Настраиваем samba (/etc/samba/smb.conf)

В стандартном конфиге редактируем (или добавляем, если отсутствует):

[global]
workgroup = Network
netbios name = prints
security = user
map to guest = bad user
Закомментировать строки:
#; interfaces =
#; bind interfaces only = yes
[printers]
guest ok = yes
browseable = yes
[print$]
guest ok = yes
read only = no

Настраиваем CUPS (/etc/cups/cupsd.conf)

Закомментировать строки:

#Listen localhost:631
#Browsing Off
Добавить строки:
ServerAdmin [email protected]
DefaultEncryption Never
Browsing on
Listen 631
Исправить:
# Restrict access to the server…
<Location />
Order allow,deny
Allow All
</Location>
# Restrict access to the admin pages…
<Location /admin>
Order allow,deny
Allow All
</Location>

В файл /etc/rc. local надо добавить строку (cups затыкается после запуска samba):

service cups restart

Теперь перезагрузить сервер.

Принт сервер usb своими руками

Этап второй, принтер

Добавляем принтер в CUPS.

  1. 1. Подключаем принтер.
  2. 2. Открываем web-интерфейс – http://prints:631/admin
  1. 3. Add printer, вводим логин и пароль (print_admin)
  2. 4. Выбираем подключенный принтер.
  1. 5. Вбиваем и запоминаем имя принтера.
  1. 6. Добавляем драйвер. Если принтер есть в списке поддерживаемых, его надо просто выбрать. Если нет – нужен файл драйвера (PPD). «Выберите файл» > PPD > «Add printer»
  1. 7. Открываем «Administration» > «Manage printers» > (Нужный принтер).
  2. 8. Выбираем из списка Print test page.
  3. 9. Ура, наш программный принт сервер работает!

Принтер подключается в Windows как сетевой по адресу \\prints\имя_принтера

Делаем лазейку для горячей настройки – добавляем в /etc/rc. local строку “/media/cdrom/cdrom/script.sh” (сюда автоматически монтируется флешка). Сценарий script.sh будет запускаться с правами root.

Самодельный принт сервер: формирование образа

Устанавливаем xresprobe и pinguybuilder
sudo wget https://launchpad.net/ubuntu/+source/xresprobe/0.4.24ubuntu9/+build/1274262/+files/xresprobe_0.4.24ubuntu9_amd64.deb

sudo wget http://downloads.sourceforge.net/project/pinguy-os/ISO_Builder/pinguybuilder_4.3-8_all-beta.deb
sudo dpkg -i xresprobe_0.4.24ubuntu9_amd64.deb
sudo dpkg -i pinguybuilder_4.3-8_all-beta.deb

Если есть неудовлетворённые зависимости, выполняется:

sudo apt-get –f install
Чистим систему
sudo apt-get -f install
sudo apt autoclean
sudo apt autoremove
Создаём образ
sudo PinguyBuilder backup

Если процесс был прерван, надо удалить временные файлы:

sudo PinguyBuilder clean

Программа создаст образ ISO (размером 500-600 Мб), который надо записать на флешку, флешку воткнуть в материнскую плату и всё это положить в коробку. Материнскую плату надо настроить на включение при подаче питания и запитать от одного выключателя вместе с принтером.

Результат: в любом свободном месте ставится принтер, подключенный к принт-серверу. Время готовности после включения – 2-2,5 минуты. Если что-то работает не так, как хотелось бы, это допиливается через сценарий script.sh, который пишется в корень флешки.

  • Автор: nix_u