Next revision | Previous revisionLast revisionBoth sides next revision |
hardware:printer:gdi [2015/05/17 03:11] – создано root | hardware:printer:gdi [2022/02/05 04:48] – root |
---|
====== GDI printer and net print server ====== | ====== GDI printer and net print server ====== |
По форумам и на сайтах производителей пишут что GDI win принтеры, например HP LaserJet 1018, 1005 и им подобные, не работают через сетевые принт сервера такие как [[ru:hardware:dlink:ps_dp301u_to_dpr1020|D-Link DP-301U, DPR-1020]], TL-PS110U и им подобные.\\ | По форумам и на сайтах производителей пишут что GDI win принтеры, например HP LaserJet 1018, 1005 и им подобные, не работают через сетевые принт сервера такие как [[hardware:dlink:ps_dp301u_to_dpr1020|D-Link DP-301U, DPR-1020]], TL-PS110U и им подобные.\\ |
| |
**Это не так!!!**\\ | **Это не так!!!**\\ |
Работают!\\ | Работают!\\ |
Но с не большим костылём. | |
| |
[b]Как это работает[/b] | |
После включения принтера нужно залить в него прошивку. | |
Под виндой этим занимается драйвер принтера: скорее всего он ловит событие от юзби порта сразу после включения и первоначальной инициализации принтера, и сливает в него основную прошивку которая идёт с драйвером - обычный .img файл, который можно найти в архиве с драйвером, например для 1018 это hp1018.img. | |
Драйвер добавляет в начало служебную команду/заголовок, чтобы принтер отличил прошивку от очередного документа на печать. | |
Принт серверу совершенно безразлично что отправлять через себя на принтер, его волнует только обработка протоколов печати, чтобы извлечь от туда данные для отправки на принтер. | |
| |
На самом деле существует масса способов сделать это, есть даже варианты полностью автоматические. | ===== Устройство GDI принтеров ===== |
| После включения принтера нужно перед печатью загрузить в него прошивку. \\ |
| Под виндой этим занимается драйвер принтера: скорее всего он ловит событие от USB порта сразу после включения и первоначальной инициализации принтера, и загружает в него основную прошивку которая идёт с драйвером - обычный .img файл, который можно найти в архиве с драйвером, например для 1018 это hp1018.img.\\ |
| Драйвер добавляет в начало служебную команду/заголовок ELF, чтобы принтер отличил прошивку от очередного документа на печать.\\ |
| Принт серверу совершенно безразлично что отправлять через себя на принтер, его волнует только обработка протоколов печати, чтобы извлечь от туда данные для отправки на принтер.\\ |
| |
| |
[b]1. Залив прошивки по SMB[/b] | ===== Варианты загрузки прошивки ===== |
| |
| ==== Загрузка по SMB ==== |
Самое простое что можно сделать под виндой стандартными средствами и совершенно без особых прав в системе, это: | Самое простое что можно сделать под виндой стандартными средствами и совершенно без особых прав в системе, это: |
[code]copy c:\sihp1018.dl \\172.16.0.10\LP1[/code] | <code>copy c:\sihp1018.dl \\172.16.0.10\LP1</code> |
где: | **sihp1018.dl** - образ прошивки с добавленным служебным заголовком ELF/командой, без него принтер просто проигнорирует свою родную прошивку, можно либо найти в инете готовый, я нашёл тут: [[http://www.dd-wrt.com/phpBB2/viewtopic.php?p=423330|www.dd-wrt.com]] , [[http://oleg.wl500g.info/hplj/|oleg.wl500g.info]] либо сделать самостоятельно утилитой **arm2hpdl** из состава **foo2zjs**\\ |
sihp1018.dl - образ прошивки с добавленным служебным заголовком/командой, без него принтер просто проигнорирует свою родную прошивку, можно либо найти в инете готовый, я нашёл тут: [url=http://www.dd-wrt.com/phpBB2/viewtopic.php?p=423330]http://www.dd-wrt.com/phpBB2/viewtopic.php?p=423330[/url] , [url=http://oleg.wl500g.info/hplj/]http://oleg.wl500g.info/hplj/[/url] либо сделать самостоятельно утилитой arm2hpdl из состава foo2zjs | **\\172.16.0.10** - адрес принт сервера, можно использовать и имя: \\hwprintserver - какое в настройках задано в разделе SMB\\ |
\\172.16.0.10 - адрес принт сервера, можно использовать и имя: \\hwprintserver - какое в настройках задано в разделе SMB | **\LP1** - имя принтера, оно настраивается в принтсервере в разделе SMB, можно просто посмотреть если зайти проводником.\\ |
\LP1 - имя принтера, оно настраивается в принтсервере в разделе SMB, можно просто посмотреть если зайти проводником. | |
| |
Те в примитивном и ужасном случае добавляем юзеру ярлык в автозагрузку и на рабочий стол, пусть запускает после каждого включения принтера :) | Те можно добавить пользователю ярлык в автозагрузку и на рабочий стол, пусть запускает после каждого включения принтера.\\ |
| |
| |
[b]2. Залив прошивки через LPR[/b] | ==== Загрузка через LPR ==== |
В состав windows и др операционных систем входит утилита lpr предназначенная для отправки файлов на печать по одноимённому протоколу. | В состав windows и др операционных систем входит утилита **lpr** предназначенная для отправки файлов на печать по одноимённому протоколу.\\ |
Для windows коммандная строка будет выглядеть так: | Для windows командная строка будет выглядеть так: |
[code]lpr -S 172.16.0.10 -P lp1 -o l c:\sihp1018.dl[/code] | <code>lpr -S 172.16.0.10 -P lp1 -o l c:\sihp1018.dl</code> |
где все значения аналогичны значениям в предыдущем пункте. | где все значения аналогичны значениям в предыдущем варианте. |
подробнее о параметрах коммандной строки: [url=http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/lpr.mspx?mfr=true]http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/lpr.mspx?mfr=true[/url] | подробнее о параметрах командной строки: [[http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/lpr.mspx?mfr=true|www.microsoft.com/resources/documentation]]\\ |
или просто запустить lpr без аргументов. | или просто запустить **lpr** без аргументов.\\ |
Как и в предыдущем варианте, прошивка должна уже содержать заголовок/команду. | Как и в предыдущем варианте, прошивка должна уже содержать заголовок ELF/команду.\\ |
| |
| |
[b]3. Залив прошивки по TCP RAW[/b] | ==== Загрузка по TCP RAW ==== |
На принтсервере обычно открыт TCP порт 9100 для входящих подключений, всё что на него принимается пересылается прямиком на принтер. | На принтсервере обычно открыт TCP порт 9100 для входящих подключений, всё что на него принимается пересылается прямиком на принтер.\\ |
Без специальных утилит тут не обойтись. Во время тестирования я набросал простенькую программу [b]FWUploader[/b] на си, порядка 10 строк, которая открывала файл, читала в буфер, подключалась на указанный адрес и отправляла содержимое буфера. Я использовал прошивку с уже добавленный служебным заголовком во время первых тестов, позднее программа научилась сама добавлять всё что нужно. | Без специальных утилит тут не обойтись. Во время тестирования я набросал простенькую программу [[software:win:print:fw_uploader|Printer firmware uploder / converter]] на си, порядка 10 строк, которая открывала файл, читала в буфер, подключалась на указанный адрес и отправляла содержимое буфера. Я использовал прошивку с уже добавленный служебным заголовком во время первых тестов, позднее программа научилась сама добавлять всё что нужно. |
| |
| |
[b]4. Печать прошивки[/b] | ==== Печать прошивки ==== |
Ещё один способ залить прошивку в принтер - отправить её на печать :) | Ещё один способ отправить прошивку в принтер - отправить её на печать.\\ |
Я опять же написал небольшую программу [b]FWUploader[/b], скорее даже скопипастил большую часть - функция RawDataToPrinter [url=http://msdn.microsoft.com/en-us/library/dd162959%28VS.85%29.aspx]http://msdn.microsoft.com/en-us/library/dd162959%28VS.85%29.aspx[/url] , а открытие файла с прошивкой и чтение в буфер было как в варианте с отправкой. | Добавил в [[software:win:print:fw_uploader|Printer firmware uploder / converter]], скопировав большую часть - функция __RawDataToPrinter__ [[http://msdn.microsoft.com/en-us/library/dd162959%28VS.85%29.aspx|msdn.microsoft.com]].\\ |
Возможно есть способы заставить систему отправить файл на принтер без всяких обработок, или есть какая то системная утилита или утилита сторонних разработчиков которая делает тоже самое - мне было проще сделать это из программы, потому как найти в справке MSDN это дело нескольких минут, все возвращаемые ошибки можно посмотреть - когда делаешь впервые очень помогает, как луч света в тёмной комнате, и уж точно никаких тебе вирусов, инсталяторов и бесплатно. | |
| |
| |
Это не единственные способы, их гораздо больше - столько сколько протоколов печати поддерживает принт сервер. | Это не единственные способы, их гораздо больше - столько сколько протоколов печати поддерживает принт сервер.\\ |
Мою программу [b][url=http://www.netlab.linkpc.net/download/software/FWUploader/FWUploader.zip]FWUploader.zip[/url][/b] для п3 и п4 можно взять здесь, описание прилагается: [url=http://www.netlab.linkpc.net/forum/index.php?topic=182.0]http://www.netlab.linkpc.net/forum/index.php?topic=182.0[/url] | [[software:win:print:fw_uploader|Printer firmware uploder / converter]] - поддерживает вышеописанные способы, кроме lpr. |
| |
| |
[b]Автоматизация[/b] | ===== Автоматизация ===== |
Чтобы лишний раз не заливать прошивку в принтер и тем самым не переинициализировать его, но не не оставлять в не рабочем состоянии можно воспользоваться SNMP трапами. | Чтобы лишний раз не отправлять прошивку в принтер и тем самым не переинициализировать его, но не не оставлять в не рабочем состоянии можно воспользоваться __SNMP__ трапами.\\ |
В принтсервере настраиваем адрес компьютера куда отправлять SNMP трапы. | В принтсервере настраиваем адрес компьютера куда отправлять __SNMP__ трапы.\\ |
На компьютере должны быть запущена служба, которая эти трапы принимает и в зависимости от их содержимого либо ничего не делает либо заливает прошивку в принтер. | На компьютере должны быть запущена служба, которая эти трапы принимает и в зависимости от их содержимого либо ничего не делает либо заливает прошивку в принтер.\\ |
TL-PS110U шлёт трапы после перезагрузки, после включения принтера (не документировано), отключения сети (весьма остроумно), подключения сетевого интерфейса, неудачная аутентификация, я предполагаю что на события связанные с печатью могут быть трапы, сейчас проверять уже не охота. | TL-PS110U шлёт трапы: |
| * после перезагрузки |
| * после включения принтера (не документировано) |
| * отключения сети (весьма остроумно) |
| * подключения сетевого интерфейса |
| * неудачная аутентификация |
| Предполагаю что на события связанные с печатью тоже могут быть трапы. |
| |
| |
| **Опробовано на:** HP LaserJet 1018 + TL-PS110U / [[hardware:dlink:ps_dp301u_to_dpr1020|D-Link DP-301U, DPR-1020]] \\ |
| Драйвера для принтера брал самые последние с сайта, не смотря на то, что некоторые советовали брать как можно старее.\\ |
| |
| После загрузки прошивки принтер будет работать в любых ОС, с базовыми драйверами от HP, не смотря на заверения производителя - см **foo2zjs**.\\ |
| |
[b]Опробовано на: HP LaserJet 1018 + TL-PS110U / [url=http://www.netlab.linkpc.net/forum/index.php?topic=186.0]DP-301U[/url][/b] / DPR-1020 | Можно поискать встроенные в ОС **SNMP** ловушки/демоны, чтобы принимать трапы от принтсервера и отправлять прошивку автоматически.\\ |
Драйвера для принтера брал самые последние с сайта, не смотря на то, что некоторые советовали брать как можно старее. | |
| |
В инструкции есть описание работы с программой PSAdmin - возможно с её помощью и удастся добиться работы GDI принтеров, но copy от майкрософта я доверяю больше, работает она понятнее и уж точно не придётся искать новую версию при обновлении виндовс, смене архитектуры (х32 -> х64) или вообще отказе от виндовс. А свои программы я просто пересоберу/портирую. | |
Полагаю что после залива прошивки в принтер он будет работать и в других ОС, с базовыми драйверами от HP, не смотря на заверения производителя - см foo2zjs. | |
| |
| |
PS: позже появятся утилиты для добавления служебного заголовка к прошивке под винду, а также для заливки по TCP RAW. | {{tag>hardware article print}} |
SNMP автозаливалку прошивки под винду врядли буду писать, хотя и писать мало, скорее всего под фряху попробую реализовать её стандартными средствами. | |