Как происходит "заливка" прошивки?
В современном Linux события о появлении новых устройств обрабатывает специальная служба udev. Правила обработки событий, т.е. что будет происходить при обнаружении новой железки, находятся в /etc/udev/rules.d/. В Ubuntu правила для принтеров обсуждаемых в данной статье находятся в файле /etc/udev/rules.d/85-hplj10xx.rules (пример для Ubuntu).
Если правила в udev есть, почему принтер не работает?
Дело в том, что правила есть, а самих прошивок нет. Причины этого не понятны, но и не особо интересны. Мы можем скачать их сами и положить туда, где udev, в соответствии с правилами, их найдёт.
Как скачать прошивки?
В Ubuntu по умолчанию установлен пакет foo2zjs, которые содержит необходимые нам утилиты:
- getweb - утилита которая "сливает" прошивки с foo2zjs.rkkda.com (вызывается следующим образом: getweb 1020 - скачает прошивку для HP LaserJet 1020)
- arm2hpdl - утилита, которая добавляет необходимые заголовки для принтера HP к бинарному файлу arm (смотрите man arm2hpdl), после добавления заголовков прошивку можно заливать в принтер (этим и занимается udev)
Куда их положить?
Положить нужно в /usr/share/foo2zjs/firmware/
А теперь готовое решение в виде скрипта
Код: Выделить всё
#!/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