Site Tools


hardware:printer:gdi

GDI printer and net print server

По форумам и на сайтах производителей пишут что GDI win принтеры, например HP LaserJet 1018, 1005 и им подобные, не работают через сетевые принт сервера такие как D-Link DP-301U, DPR-1020, TL-PS110U и им подобные.

Это не так!!!
Работают!

Устройство GDI принтеров

После включения принтера нужно перед печатью загрузить в него прошивку.
Под виндой этим занимается драйвер принтера: скорее всего он ловит событие от USB порта сразу после включения и первоначальной инициализации принтера, и загружает в него основную прошивку которая идёт с драйвером - обычный .img файл, который можно найти в архиве с драйвером, например для 1018 это hp1018.img.
Драйвер добавляет в начало служебную команду/заголовок ELF, чтобы принтер отличил прошивку от очередного документа на печать.
Принт серверу совершенно безразлично что отправлять через себя на принтер, его волнует только обработка протоколов печати, чтобы извлечь от туда данные для отправки на принтер.

Варианты загрузки прошивки

Загрузка по SMB

Самое простое что можно сделать под виндой стандартными средствами и совершенно без особых прав в системе, это:

copy c:\sihp1018.dl \\172.16.0.10\LP1

sihp1018.dl - образ прошивки с добавленным служебным заголовком ELF/командой, без него принтер просто проигнорирует свою родную прошивку, можно либо найти в инете готовый, я нашёл тут: www.dd-wrt.com , oleg.wl500g.info либо сделать самостоятельно утилитой arm2hpdl из состава foo2zjs
\\172.16.0.10 - адрес принт сервера, можно использовать и имя: \\hwprintserver - какое в настройках задано в разделе SMB
\LP1 - имя принтера, оно настраивается в принтсервере в разделе SMB, можно просто посмотреть если зайти проводником.

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

Загрузка через LPR

В состав windows и др операционных систем входит утилита lpr предназначенная для отправки файлов на печать по одноимённому протоколу.
Для windows командная строка будет выглядеть так:

lpr -S 172.16.0.10 -P lp1 -o l c:\sihp1018.dl

где все значения аналогичны значениям в предыдущем варианте. подробнее о параметрах командной строки: www.microsoft.com/resources/documentation
или просто запустить lpr без аргументов.
Как и в предыдущем варианте, прошивка должна уже содержать заголовок ELF/команду.

Загрузка по TCP RAW

На принтсервере обычно открыт TCP порт 9100 для входящих подключений, всё что на него принимается пересылается прямиком на принтер.
Без специальных утилит тут не обойтись. Во время тестирования я набросал простенькую программу Printer firmware uploder / converter на си, порядка 10 строк, которая открывала файл, читала в буфер, подключалась на указанный адрес и отправляла содержимое буфера. Я использовал прошивку с уже добавленный служебным заголовком во время первых тестов, позднее программа научилась сама добавлять всё что нужно.

Печать прошивки

Ещё один способ отправить прошивку в принтер - отправить её на печать.
Добавил в Printer firmware uploder / converter, скопировав большую часть - функция RawDataToPrinter msdn.microsoft.com.

Это не единственные способы, их гораздо больше - столько сколько протоколов печати поддерживает принт сервер.
Printer firmware uploder / converter - поддерживает вышеописанные способы, кроме lpr.

Автоматизация

Чтобы лишний раз не отправлять прошивку в принтер и тем самым не переинициализировать его, но не не оставлять в не рабочем состоянии можно воспользоваться SNMP трапами.
В принтсервере настраиваем адрес компьютера куда отправлять SNMP трапы.
На компьютере должны быть запущена служба, которая эти трапы принимает и в зависимости от их содержимого либо ничего не делает либо заливает прошивку в принтер.
TL-PS110U шлёт трапы:

  • после перезагрузки
  • после включения принтера (не документировано)
  • отключения сети (весьма остроумно)
  • подключения сетевого интерфейса
  • неудачная аутентификация

Предполагаю что на события связанные с печатью тоже могут быть трапы.

Опробовано на: HP LaserJet 1018 + TL-PS110U / D-Link DP-301U, DPR-1020
Драйвера для принтера брал самые последние с сайта, не смотря на то, что некоторые советовали брать как можно старее.

После загрузки прошивки принтер будет работать в любых ОС, с базовыми драйверами от HP, не смотря на заверения производителя - см foo2zjs.

Можно поискать встроенные в ОС SNMP ловушки/демоны, чтобы принимать трапы от принтсервера и отправлять прошивку автоматически.

hardware/printer/gdi.txt · Last modified: 2022/02/17 05:21 by root