Делаем из HP LJ1000 сетевой принтер

от автора

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://forum.zyxmon.org/topic160-keenetic-i-hp-lj-1000.html

Я использовал последнюю доступную версию OpenWrt: 14.07.

В качестве основы для настройки я использовал статью в вики OpenWrt. Скрипт переделан для нормального хотплага и устойчивого старта демона p910nd.

После перепрошивки роутера меняем дефолтный пароль, активируем работу по SSH, настраиваем сетевые интерфейсы. Все дальнейшие настройки удобнее всего делать через терминальный клиент, я использовал Putty. Настройки предполагают, что роутер имеет доступ в Интернет.

Итак, поехали:

  1. Установить нужные для работы принтера пакеты, плюс простой редактор:
    opkg update opkg install kmod-usb-printer usbutils p910nd nano 

  2. Записать в файловую систему роутера прошивку для нужного принтера. Проще всего скачать прошивку у Олега:http://oleg.wl500g.info/hplj. В моем случае нужна прошивка для HP LJ1000 — ее и загружаем:
    cd /usr/lib/ wget http://oleg.wl500g.info/hplj/sihp1000.dl 

  3. Создаем скрипт обработки события hotplug, чтобы прошивка в принтер отправлялась при каждом его подключении:
    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:

    lsusb -v | grep "ID\|bcdUSB" 

    Ответ:

    Bus 001 Device 004: ID 03а0:0517 Hewlett-Packard LaserJet 1000   bcdUSB               1.20 

    3f0/517 — это VID и PID принтера HP LJ 1000 (Первые нули удаляются 03f0). 120 — это BCD версия без точки.

  4. Открываем файл конфигурации p910nd:
    nano /etc/config/p910nd 

    Если запись для принтера уже есть, то нужно убедиться что путь к дескриптору принтера верен. Если нет, то копируем этот текст:

     config p910nd       option device        /dev/usb/lp0       option port          0          option bidirectional 1       option enabled       1 

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

  5. В моем случае демон печати стартуется скриптом после загрузки прошивки в принтер, поэтому убедимся что он не стартует сам при включении роутера:
    /etc/init.d/p910nd disable 

    Иначе запущенный слишком рано демон падал со следующей ошибкой:

    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 

Перезагружаем роутер. Если все настроено правильно, то с загрузкой роутера переинициализируется принтер (слышно как он перезапускается). На всякий случай убеждаемся что в System Log нет ошибок, связанных с p9100, подключаемся по SSH, проверяем работу скрипта hotplug:

nano /tmp/hl1000 

Должен быть такой лог:

Sending firmware to printer. hl1000 added Done. 

Проверяем что демон стартовал:

ps | grep p910nd 

В списке процессов по команде должен быть p910nd:

root@OpenWrt:~# ps | grep p910nd  1597 root       780 S    {p910nd} /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, тоже обязательно нужно снять галочку «двунаправленный обмен». На более новых не проверял, но не вижу препятствий что-бы не заработало.

ссылка на оригинал статьи http://habrahabr.ru/post/267029/


Комментарии

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

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