Делаем из 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 0
          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, тоже обязательно нужно снять галочку «двунаправленный обмен». На более новых не проверял, но не вижу препятствий, чтобы не заработало.

PS: Настройка двунаправленного обмена в p910nd (bidirectional) на работу не влияет, в отличии от настройки двунаправленного обмена на стороне клиента. Я пробовал и с включенным и с выключенным флагом, поведение принтера не менялось. Поэтому важно соблюдать отключенность только на стороне клиента.
Поделиться публикацией
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама

Комментарии 33

    +1
    Спасибо за статью!
    Чтобы исключить возможные разночтения прокомментируйте пожалуйста вот что:
    вы приводите строчку option bidirectional 1
    но говорите про необходимость отключения этого режима на клиентских машинах. Насколько мне известно, p9100d это всего лишь что-то типа транспорта для задачи вывода на печать.
    Если не сложно, проверьте что будет если выставить «option bidirectional 0»
      0
      Спасибо, дополню сейчас статью.
        0
        Хабр — торт! Спасибо за статью.
          –1
          1000, 1005, 1006, 1007, 1007, 1018, 1020, 1505

          Есть еще HP LJ P1005. Он отличается от этих — прикрутить нормально к openSuSe несколько лет назад не удалось.
            0
            А ещё есть HP LJ 1010, который работает в p910nd, но иногда пишет unsupported personality: pcl и вырубается.
            Рассказал бы кто, как побороть на openwrt.
              0
              Вот бы такую статейку про софтовые Сanon-ы, например LBP6020
              • НЛО прилетело и опубликовало эту надпись здесь
                  0
                  Гиблое дело. Одно время товарищи с LOR пытались писать CAPT-драйвер, уж не знаю, заработал ли. Проприетарные драйверы от Canon собраны только для x86 и на MIPS не поднимутся. Вариант с установкой на MIPS-роутер QEMU в usermode и установку туда CUPS и проприетарных драйверов считаю слишком медленным для реального использования и имеющим чисто академический интерес.
                    0
                    И не заработает (. Дело тут вот в чем — все принтеры, кроме LBP, доступны ОС в виде двунапрвленного порта. В linux это /dev/usb/lp0, в в Windows — USB001 на вкладке «Порты» в свойствах принтера. Эти порты работают так: драйвер принтера принимает задание в формате EMF/PDF, переводит его в картинку (растеризует) и тупо записывает в порт. Это делает возможным «мостик» в виде TCP <---> USB, а также не требует наличия драйвера принтера на удаленном хосте, достаточно, чтобы хост просто определял принтер как /dev/usb/lp0.

                    CAPT работает по-другому: запись информации в порт происходит не сразу, а частями, при этом драйвер должен контролировать, что принтер уже напечатал текущий кусок и хочет еще. Это приводит к тому, что на удаленном хосте должен работать демон, который будет «вручную» контролировать процесс обмена данными с принтером. С демоном проблемы — Canon не хочет открывать протокол и поэтому создание демона силами сообщества затруднительно, а сам Canon пишет работающее через раз проприетарное УГ.
                    • НЛО прилетело и опубликовало эту надпись здесь
                        0
                        Интересно, хватит ли мощности CPU, чтобы CUPS мог быстро растеризовать postscript в capt? У меня даже 2-х ядерный Atom при растеризации postscript в zjs тормозит.
                  0
                  Долго маялся с подключением 1020 к ASUS RT-N16, пробуя как стандартную прошивку, так и Tomato. Проблема: то печатает, то нет (при отправке документа принтер просто молчит), проявлялась и исчезала сама собой, логику понять не сумел.

                  В итоге плюнул и просто подключил к компьютеру с Win7, расшарив по сети, так работает безотказно.

                  Но любопытство осталось: почему не работает с роутером?
                    0
                    Нужно анализировать логи и понять несколько вещей: доходит ли до роутера задание на печать, принимает ли его демон p910nd, отправляется ли задание демоном в принтер. Так будет яснее что происходит.
                    Ваш принтер запросто мог уходить в сон, после чего его нужно было пробуждать отдельной командой либо повторной загрузкой прошивки. Это предположение.
                      0
                      1020 — самый глючный из всей линейки, что под виндой, что без нее.
                    • НЛО прилетело и опубликовало эту надпись здесь
                        0
                        Вам явно стоит написать по этому поводу статью, FreeBSD на роутерах я еще не встречал.
                        Я не спец в *nix, поэтому варианты «написать свое» у меня работают только под win. Насчет кинетика я в статье указал, что первая версия прошивки именно с 1000 принтером не работает, с другими — нормально. С чем связано — не знаю, но есть подтверждение что это так.
                          0
                          3. Перед заливкой прошивки к ней нужно добавлять ELF заголовок иначе принтер её не понимает.
                          Я всегда брал немодифицированные из hplip — проблем вроде не было.
                            0
                            с 1018 и у меня небыло. а с 1020 в эпоху его актуальности выли все. ну то есть да, воткнуть его хвост в *nix было чуть ли не единственным осмысленным способом заставить его печатать всё и всегда, а не как захочется родным драйверам на винде, которые вдобавок еще и диспетчер печати выносили периодически.
                            • НЛО прилетело и опубликовало эту надпись здесь
                                0
                                я там не зря написал — «в эпоху актуальности», тобишь ХР/2003, откуда там винапдейтные драйверы?

                                у меня самый основной косяк был в завешивании спулера где получится — то на клиенте, то на сервере…



                                а может стоит уйти с хп на ту же киосеру с бразерами? хпшные аппараты и правда чем дальше тем больше производят впечатление что людей с головой там уже не осталось.
                                  0
                                  Впервые вижу этот сайт.
                                  Ну что вы, это же официальные драйвера HP для Linux :) Поддерживается все, даже такая экзотика, как сканирующая «голова» от HP LJ 1200 или сканирование по сети с МФУ.

                                  Говнодел начался примерно когда 1018 заменили на p1005: HP решило что лучше грести бабло чем делать хорошие принтеры. И потом с низовых оно докатилось до малого бизнеса и те же 2050 заменить не на что.
                                  Мы на Kyocera перешли и горя не знаем. Прямой аналог 2050 — Kyocera 1320DN — большая туба с тонером вместо картриджа, дуплесный модуль, сеть, PostScript/PCL.
                              0
                              Для богатых хабровчан рекомендую x86 роутер lxbox3+ ath9k wifi адаптер + толковый дистрибутив Linux. Большинство задач, вроде озвученной в этой теме, будет решаться в пол-тычка + 100500 возможностей при наличии прямых рук.
                                +1
                                Мне кажется богатый хабровчанин просто купит принтер с сетью на борту :) Роутер дороже принтера
                                0
                                Насколько мне помнится, LJ1000 не умеет дружить с системами W7 x64 и последующими, те на W7 х32 драйвер от XP встает, а на x64 уже такой фокус не прокатывает. Вопрос как подружить современные ос и этот чудо агрегат.
                                  0
                                    0
                                    а почитать что там написано перед тем как постить ссылки из выдачи?

                                    > Картинки не печатаются, если из ворда печатать текст на странице альбомной ориентации — то принтер все равно упорно выводит обрезанную страницу на книжной А4, работает только для принтеров раздаваемых по сети, подключенных к x32 <= 7
                                      0
                                      Штатный телепат в отпуске. Какой вопрос — такой ответ. А прозвучало оно так: «не нашел дрова для Вин х64».
                                        0
                                        написано четко, «LJ1000 не умеет дружить с системами W7 x64 и последующими», нет ни слова про то что не нашел дрова. И кстати их действительно не найти, тк их в природе не существует. Единственный выход дружить этот принтер с линем и ему подобными (чем и является ддврт) и на самом лине делать какую-то эмуляцию стандартного принтера, который будет принимать на печать и через штатный драйвер засылать полученные данные на этот принтер, но гемор имхо, да и не встречал нигде такого, проще выкинуть и поставить что-то из более современных аналогов.
                                          0
                                          For installation of the LaserJet 1000 in a W7 64 bit system, using XP Mode, please see the following link. It also contains information about how to install XP Mode in W7 Home.

                                          h30434.www3.hp.com/t5/Printer-All-in-One-Software/Windows-7-and-HP-Laserjet-1000/td-p/129513… (post of 04-17-2012)

                                          «Не умеет» и «у меня не получается» — разные вещи.
                                            0
                                            те вы считаете что нормально на рабочем компе держать виртуалку с windows xp ради принтера? особенно на офисных c2d с 2гб? Про вариант с виртуалкой я давно в курсе, не открыли вселенную, форумы hp давно все излазил на этот предмет. Тогда уж реально проще поставить вин7 x32, в общем тема исчерпана, не умеет он дружить с 7-кой х64.
                                              0
                                              Чтобы закрыть тему:

                                              Windows 2003 Server x64, драйвера от LJ 1018 x64
                                              всё, печатает без проблем. Расшариваем принтер.
                                              Подключаемся с 7-ки (х64), находим принтер, ставим дрова.
                                              Меняем порт напрямую.
                                                0
                                                да я все понимаю. если предлагаете w2003, вместо нее можно поставить w7 х32 и родные дрова встанут и машину можно будет как-то худо-бедно использовать, но вам не кажется что держать отдельную машину или виртуальную машину для принтера, мягко говоря, не целесообразно, в парке более 1000 таких принтеров, тк винду xp перестали поддерживать, задание перейти на W7 x64.
                                                  0
                                                  Вы не поняли. 2003-я нужна только на время. Потом — напрямую.

                                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                Самое читаемое