MyTetra Share
Делитесь знаниями!
Настройка принтера HP LaserJet 1020 в Linux
Время создания: 08.02.2010 16:15
Текстовые метки: linux, принтер
Раздел: Компьютер - Linux - Принтер
Запись: xintrea/mytetra_syncro/master/base/0000001406/text.html на raw.github.com

Преамбула


Принтеры HP LaserJet 1000, 1005, 1018 и 1020 сразу после включения питания не имеют в себе прошивку (firmware, arm binary). Операционная система, при обнаружении принтера, должна "залить" в него необходимую прошивку и после этого работать как с обычным принтером. (Именно этим объясняется тот факт, что если не выключая принтер перезагрузиться из известной нам операционной системы от MS в Linux, то принтер будет работать, так как подсистема печати Windows зальет прошивку в принтер).



Как происходит "заливка" прошивки?


В современном Linux события о появлении новых устройств обрабатывает специальная служба udev. Правила обработки событий, т.е. что будет происходить при обнаружении новой железки, находятся в каталоге /etc/udev/rules.d/. В Ubuntu правила для принтеров, обсуждаемых в данной статье, находятся в файле /etc/udev/rules.d/85-hplj10xx.rules (пример для Ubuntu Gutsy).



Если правила в udev есть, почему принтер не работает?


Дело в том, что правила есть, а самих прошивок нет. Причины этого не понятны, но и не особо интересны. Мы можем скачать их сами и положить туда, где udev, в соответствии с правилами, их найдёт.



Как скачать прошивки?


В Ubuntu по умолчанию установлен пакет foo2zjs, которые содержит необходимые нам утилиты:


  • getweb - утилита которая "сливает" прошивки с foo2zjs.rkkda.com (вызывается следующим образом: getweb 1020 - скачает прошивку для HP LaserJet 1020)
  • arm2hpdl - утилита, которая добавляет необходимые заголовки для принтера HP к бинарному файлу arm (смотрите man arm2hpdl), после добавления заголовков прошивку можно заливать в принтер (этим и занимается udev)


Для проверки можно залить прошивку вручную следующим образом:


cat sihp1020.dl > /dev/usb/lp0


или


#!/bin/bash

printers="1000 1005 1018 1020"

cd /tmp

for prn in $printers; do

img="sihp${prn}.img"

dl="sihp${prn}.dl"

getweb $prn

if [ -f $img ]; then

arm2hpdl $img > $dl

sudo cp $dl /usr/share/foo2zjs/firmware/$dl

rm $img $dl

fi;

done


cat /usr/share/foo2zjs/firmware/sihp1020.dl > /dev/usb/lp0


где /dev/usb/lp0 - нода устройства принтера (т. е. файл устройства). Нода может быть и другой, например /dev/usblp0, чтобы узнать наверняка, можно посмотреть


dmesg | tail -20


после включения принтера. Хотя, если в выводе dmesg есть строка вида


usblp0: USB Bidirectional printer dev 6 if 0 alt 0 proto 2 vid 0x03F0 pid 0x2B17


то это не начит, что устройство принтера является /dev/usblp0. Надо пробовать разные варианты. В момент залития прошивки принтер должен немного погудеть, покрутить валиком, помигать лампочками.



Куда положить прошивки?


Положить нужно в каталог /usr/share/foo2zjs/firmware/.



А теперь готовое решение в виде скрипта. Проверено в Ubuntu 7.04 и 7.10:


#!/bin/bash

printers="1000 1005 1018 1020"

cd /tmp

for prn in $printers; do

img="sihp${prn}.img"

dl="sihp${prn}.dl"

getweb $prn

if [ -f $img ]; then

arm2hpdl $img > $dl

sudo cp $dl /usr/share/foo2zjs/firmware/$dl

rm $img $dl

fi;

done


Чем данное решение лучше других, которые можно найти в интернет? Другие решения, помимо основной задачи, а именно, установки прошивок, выполняют другие лишние действия. Например, заново устанавливают foo2zjs (который уже есть в системе), но не из deb-пакета, а из исходных кодов. Это не даёт преимуществ, но может создать проблемы при обновлении системы.


Так же в этом разделе:
 
MyTetra Share v.0.60
Яндекс индекс цитирования