пятница, 11 июля 2014 г.

HP LaserJet P1102 vs. CubieTruck: печатаем в Debian без hplip

Когда я покупал CubieTruck, я планировал сразу использовать его на всю катушку как домашний сервер для всего: печати, музыки, файлохранилища и так далее. Интересным аспектом настройки софта на нём является то, что архитектура отлична от привычной всем x86 (благо, большинство никсового софта в Debian портировано на ARM).

Принтер у меня стоит довольно простой: HP LaserJet Professional P1102, чем-то похожий внешне на легендарный LaserJet 1020.

До недавних пор всё это нагромождение работало практически безукоризненно. Но пару дней назад мои шаловливые ручки полезли чинить долгую печать больших PDF-файлов, что закончилось, увы, эпичным фейлом: печатать оно перестало совсем.

Несколько дней подряд я перековыривал cups, hplip и всё остальное. Дело уже шло к тому, чтобы сносить почти полностью настроенную операционку и поднимать всё заново. На такие жертвы ради принтера я не готов, поэтому сел внимательно разбираться.

И разобрался! Теперь сохраню ценные указания для грядущих поколений.



Итак, первой идеей была установка hplip и раскатывание драйвера по инструкциям от авторов hplip. Однако, для работы HP LaserJet Professional P1102 требуется проприетарный плагин от hp. На обычных PC он ставится без особых проблем. Но, как выяснилось, в силу своей проприетарности, он поставляется в виде бинарника, причём строго для IA-32 aka x86.

Для того, чтобы до этого дойти, мне потребовалось довольно много времени. Увы. Бился головой в одно и то же, постоянно читая в описании задачи на печать: /usr/lib/cups/filter/hpcups failed. Иногда имя фильтра варьировалось, но всё упиралось в одну и ту же запись в логе ошибок CUPS:

prnt/hpcups/HPCupsFilter.cpp 443: m_Job initialization failed with error = 48STATE: -media-empty-error,media-jam-error,hplip.plugin-error,cover-open-error,toner-empty-error,other

Ошибка 48 есть ошибка подключения к принтеру. Поэтому поначалу я нюхал со стороны udev, проверял права доступа к устройству (очень многие на форумах рекомендовали это сделать). Права вычистил, но вот только это, разумеется, не помогло.

Очевидно, что если проприетарный плагин не работает, есть два пути:
  1. Поговорить с ребятами из HP и попросить собрать нужный мне плагин для ARM;
  2. Поискать альтернативный свободный драйвер для принтера.
На первый вариант я не решился (на самом деле, даже и не подумал, когда речь зашла об этом), а стал искать альтернативу.

И нашёл! Драйвер называется foo2zjs, он обеспечивает работу в Linux некоторых устройств на базе протокола ZjStream, к которым относится и мой принтер.

Теперь осталось только установить этот драйвер и всё проверить. В Debian/Cubian есть соответствующий пакет foo2zjs. Устанавливаем. Затем в настройках CUPS-сервера (я использую web-интерфейс, https://myserver:631/) добавляем наш принтер. Замечание: внимательно смотрим на имя принтера, там не должно быть слова HPLIP, которое означает, что принтер будет работать через hp-шный бэкенд. Выбираем принтер, описываем имя и комментарии, затем выбираем ppd (файл драйвера): HP LaserJet Pro P1102 Foomatic/foo2zjs-z2. Выбираем настройки по умолчанию. Теперь можно пробовать печатать.

Чисто субъективно, на печать ушло немного больше времени, чем обычно с hp-шным плагином, но оно стало печатать, и это здорово!

Комментариев нет:

Отправить комментарий