Парсер Хабра
HP LaserJet 1000 — отличная рабочая лошадка, быстрый и безотказный принтер с USB интерфейсом с низкой стоимостью отпечатка. В статье я опишу сложности и тонкости настройки софт-принтеров HP для работы через роутер по сети на примере своего LJ1000. Велкам под кат!
Статей по подключению принтеров через роутеры в сети много, суть большинства сводится к общему алгоритму — установить на роутер альтенативную прошивку (например OpenWrt), установить поддержку USB, принтеров и демон p910nd, после чего прописать конфиги демона и дополнительные настройки.
Особенность софт-принтеров HP моделей 1000, 1005, 1006, 1007, 1007, 1018, 1020, 1505 в том, что на «борту» у них нет полноценной управляющей микропрограммы, она загружается драйвером при каждом включении принтера. Данная статья должна подойти для любого из перечисленных принтеров, однако проверена только на HP LJ1000.
Основная сложность при подключении такого принтера через роутер — загрузить в него «прошивку», чего не умеет делать практически ни один роутер с поддержкой принтеров «из коробки», а также специализированные «принтсерверы», хотя допускаю что существуют модели, которые это умеют, однако мне не удалось их найти вживую.
Усиленное изучение вопроса дало два метода решения задачи загрузки прошивки в роутер — на стороне клиента, либо на стороне роутера. В первом варианте роутер настраивается как для обычного принтера, «прошивку» нужно засылать на печать перед первым использованием принтера с компьютера:
1. Пуск-Выполнить-CMD 2. В окне консоли COPY ДИСК:\Путь_к_файлу\ИмяФайла.prn \\dnsXXXX\lp (пример: COPY c:\tmp\sihp1020.prn \\dns323\lp)
Считаю этот способ несостоятельным, ибо неудобно. Принтер должен работать без дополнительных телодвижений.
Второй метод решения задачи — заливка прошивки самим роутером. Причем, желательно чтобы прошивка загружалась не только по включению роутера, но и по хотплагу принтера.
Теперь опишу процесс настройки на имеющемся у меня железе. В моем случае используется роутер D-Link DIR-620 Rev A1. С этим роутером я уже пробовал множество прошивок, очень удобной оказалась Zyxel Keenetic v1, однако именно HP LJ1000 с Keenetic не работает, танцы с бубнами не помогли. Что подтверждается техподдержкой Zyxel: http://ift.tt/1KiByOW
Я использовал последнюю доступную версию OpenWrt: 14.07.
В качестве основы для настройки я использовал статью в вики OpenWrt. Скрипт переделан для нормального хотплага и устойчивого старта демона p910nd.
После перепрошивки роутера меняем дефолтный пароль, активируем работу по SSH, настраиваем сетевые интерфейсы. Все дальнейшие настройки удобнее всего делать через терминальный клиент, я использовал Putty. Настройки предполагают, что роутер имеет доступ в Интернет.
- Установить нужные для работы принтера пакеты, плюс простой редактор:
opkg update opkg install kmod-usb-printer usbutils p910nd nano
cd /usr/lib/ wget http://ift.tt/1KiByOZ
nano /etc/hotplug.d/usb/20-printer
#!/bin/sh FIRMWARE="/usr/lib/sihp1000.dl" DEVICE=/dev/usb/lp0 if [ "$PRODUCT" = "3f0/517/120" ] then case "$ACTION" in add) /etc/init.d/p910nd stop echo "`date`: Sending firmware to printer." >> /tmp/hl1000 cat $FIRMWARE > $DEVICE sleep 15 echo "`date`: hl1000 added" >> /tmp/hl1000 /etc/init.d/p910nd start echo "Done." >> /tmp/hl1000 ;; remove) echo "`date`: hl1000 removed" >> /tmp/hl1000 /etc/init.d/p910nd stop echo "Done." >> /tmp/hl1000 ;; esac fi
Немного о настройке скрипта: для начала нужно убедиться что ваш принтер находится именно по пути /dev/usb/lp0: команда ls /dev/usb должна дать список устройств, среди которых будет lp0. Некоторые прошивки могут создавать дексриптор принтера по адресу /dev/lp0. Далее нужно прописать путь к файлу «прошивки», и указать VID/PID принтера. Смотрим что есть на USB:
Bus 001 Device 004: ID 03а0:0517 Hewlett-Packard LaserJet 1000 bcdUSB 1.20
Если запись для принтера уже есть, то нужно убедиться что путь к дескриптору принтера верен. Если нет, то копируем этот текст:
config p910nd option device /dev/usb/lp0 option port 0 option bidirectional 0 option enabled 1
Tue Feb 4 02:29:43 2014 lpr.err p9100d[1207]: bind: Cannot assign requested address Tue Feb 4 02:29:43 2014 lpr.err p9100d[1207]: accept: Bad file descriptor
Sending firmware to printer. hl1000 added Done.
root@OpenWrt:~# ps | grep p910nd 1597 root 780 S /usr/sbin/p9100d -b -f /dev/usb/lp0 0 1849 root 1492 S grep p910nd
Дальше настраиваем подключение со стороны клиентов. В моем случае это были компьютеры с Windows XP, где уже были установлены драйвера нужного принтера.
Открываем свойства принтера:
Добавляем новый порт -> Standard TCP/IP Port -> Новый порт -> Далее -> вводим IP адрес роутера -> generic Network Card-> Готово.
Обязательно нужно снять галочку «двунаправленный обмен». Об этом мало где пишут. Другие модели принтеров кроме 1000 нормально работают с установленной, но именно с моим 1000 печать не работала, пока я не снял галку и не перезагрузился (важно, без перезагрузки не будет работать).
Точно также настраивается печать из Windows 7, тоже обязательно нужно снять галочку «двунаправленный обмен». На более новых не проверял, но не вижу препятствий, чтобы не заработало.
PS: Настройка двунаправленного обмена в p910nd (bidirectional) на работу не влияет, в отличии от настройки двунаправленного обмена на стороне клиента. Я пробовал и с включенным и с выключенным флагом, поведение принтера не менялось. Поэтому важно соблюдать отключенность только на стороне клиента.
Keenetic и HP LJ 1000
Печать из Mac OS по WiFi на GDI-принтер
Чудные win-принтеры вообще железки капризные при попытках их использовать под *NIX и по сети, а тут возникла необходимость подключить HP LaserJet 1000 к конструктору ***** DIR-320 для печати без проводов. Принт-сервер из коробочки вроде эту возможность не поддерживает, комплект от йота-самоделкиных не проверял.
Мой рецепт под катом.
Принтер требует загрузки прошивки, это можно осуществить на рутере при подключении принтера к USB. Сервер печати нужно выбрать такой, который выставит наружу RAW-интерфейс, по которому с клиентов будут приходить полностью подготовленные задания. Для поддержки загрузки прошивки и запуска принт-сервера необходима прошивка рутера с поддержкой USB, а также включение поддежки USB, дополнительной памяти и печати в его настройках.
Есть вариация на эту тему — загружать прошивку с клиентского компьютера. Но она похоже не работает, т.к. чтобы удалённо можно было загрузить прошивку, нужно сначала расшарить принтер, а для этого нужно загрузить прошивку 😉
Установка прошивки рутера. В данном случае, dd-wrt.v24-13577_NEWD_mini_usb.bin от eko. Инструкции можно посмотреть тут
Настройка рутера. Не забываем устанавливать пароль и настраивать mac-адрес, выход в интернет и маршрутизацию. После чего включаем на вкладке Администрирование в разделе USB поддержку JFFS2, Core USB Support, USB 1.1 Support, USB 2.0 Support, USP Printer Support. Затем включаем сервис SSHd в разделе сервисов и опцию доступа к рутеру по SSH.
Принтер и сервер печати. Подключаем принтер к рутеру, ребутим рутер, заходим на него рутом по ssh (192.168.1.1). Готовим прошивку:
mkdir -p /jffs/usr/share/foo2zjs/firmware
cd /jffs/usr/share/foo2zjs/firmware
wget oleg.wl500g.info/hplj/sihp1000.dl
Устанавливаем принт-сервер для печати по протоколу JetDirect:
ipkg update
ipkg install p910nd
По идее, в правильной прошивке рутера уже должны быть модули kmod-usb-core, kmod-usb-uhci, kmod-usb-ohci, kmod-usb2, kmod-usb-printer, которые мы включали в настройках для загрузки.
Модифицируем (с помощью vi или cat) скрипт для подключения:
Файл /jffs/etc/config/usb.startup должен содержать загрузку прошивки и старт сервера
cat /jffs/usr/share/foo2zjs/firmware/sihp1000.dl > /dev/usb/lp0
/jffs/usr/sbin/p910nd -b -f /dev/usb/lp0 0
Он также должен быть исполняемым — делаем права с +x и запускаем. В принципе, просто выполнения этих комманд вручную достаточно, если не планируется отключать ни рутер, ни принтер. Проверить статус подключения принтера можно dmesg | grep USB, сервер на порту 9100 netstat -na. Всё можно сделать и без ssh выполнением комманд через веб-админку, но это неудобно, особенно для редактирования файлов.
Настройка клиентов. В Linux просто ставим foo2zjs и gplgs из пакетов. В Mac OS ставим dmg
foo2zjs
foomatic + ghostscript
При создании принтера выбираем сетевой принтер HP LaserJet 1000 с драйвером foo2zjs по протоколу JetDirect по адресу 192.168.1.1 на порту 9100.
Заключение, открытые вопросы
Возможно, будет работать и с виндового клиента. Для Mac видимо работа и установка проще, чем локальное подключение. Минус такой, что по факту драйвер foo2zjs хуже, чем драйвера hplip (опыт использования на локальной машине под Ubuntu 9.x). Возможно, можно установить hplips + cups, но далеко не факт.
Прошу помощи в сборке необходимых пакетов.
И разъяснить по поводу путей у нас «jffs» необходимо заменить на «system»?