====== Почему принтеры HP LaserJet 10xx не работают в Linux и как это исправить ====== **OUTDATED**: для современных версий Ubuntu данная информация не актуальна, т.к. прошивки теперь скачиваются автоматически. ===== Преамбула ===== Принтеры HP LaserJet 1000, 1005, 1018 и 1020 сразу после включения питания не имеют в себе прошивку (firmware, arm binary). Операционная система при обнаружении принтера должна "залить" в него необходимую прошивку и после этого работать как с обычным принтером. (Именно этим объясняется тот факт, что если не выключая принтер перезагрузиться из известной нам операционной системы от MS в Linux, принтер будет работать). ===== Как происходит "заливка" прошивки? ===== В современном 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, где /dev/usb/lp0 нода устройства принтера. Нода может быть и другой, например /dev/usblp0, чтобы узнать наверняка, можно посмотреть dmesg|tail -20 после включения принтера. ===== Куда их положить? ===== Положить нужно в /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 Для **Ubuntu 14.04** для прошивок используется другая директория /lib/firmware/hp и решение ещё проще: sudo getweb 1000 1005 1018 1020 ===== Чем данное решение лучше других, которые можно найти в интернет? ===== Другие решения помимо основной задачи, а именно, установки прошивок, выполняют другие лишние действия, например, заново устанавливают foo2zjs (который уже есть в системе), но не из deb-пакета, а из исходных кодов. Это не даёт преимуществ, но может создать проблемы при обновлении системы. {{tag>printing hp ubuntu}}