Прелюдия

Всё началось с того, что мне понадобился принтер. Лазерный, потому что струйный принтер съест все деньги на чернилах, при более менее регулярной печати. Да и ЛУТ хочется попробовать. И с двусторонней печатью, потому что я ленивый, а бумагу бы не помешало экономить. Ну а так как я не дочь миллионера, то ещё и дешёвый. Ах, да, и обязательно поддерживающий Linux.

Что? Много требований? Вот я тоже так думал пока мне на глаза не попался действительно дешёвый принтер Brother HL2240DR. И даже с заявленной поддержкой Linux от производителя (и с двусторонней печатью, да за такие деньги? Берём!).

Грабли

Тут лежали грабли первые - принтер оказался не Postscript/PCL совместимым. Что это значит для обычного пользователя? Что дело не окончится простой подстановкой ppd-файла, а понадобится драйвер.

Ну да, я не посмотрел, что у него собственный язык описания страниц.

Кратко проглядываем описание на сайте производителя, и идём качать линуксовые драйвера. Тут натыкаемся на грабли вторые: с первого взгляда драйвера к этому принтеру просто нет. Ну вообще нет. Есть для Brother HL2240 и есть для Brother HL2240D. Опытным путём выясняется, что нужен именно для HL2240D.

Установка

Brother, CUPS-овских драйверов не даёт, а даёт только LPR-драйвер и обёртку для него в CUPS. В общем - ещё один подарочный набор граблей при настройке. Ну делать нечего, ставим CUPS и psutils. Последние нужны драйверу, но почему-то не указаны ни в его зависимостях, ни в инструкциях от Brother:

sudo apt-get install cups cups-bsd psutils

Не забываем, что нам абсолютно не нужны предлагаемые пакеты:

  • hpijs - это для поддержки принтеров от HP, да и вообще он только рекомендованный.
  • min12xxw - это поддержка принтеров ?KonikaMinolta, опять же - у нас Brother.
  • pnm2ppa - это тоже для принтеров HP
  • cups-driver-guttenprint - нам это не нужно, драйвер у нас свой собственный.

Если у вас 64-хбитный дистрибутив, то так же не забываем поставить ia32-libs или lib32stdc++.

Теперь делаем symlink с /etc/init.d/cups на /etc/init.d/lpd (я говорил, что драйвера даны только для lpr? Вот первое подтверждение). Так же нужно создать рабочий каталог для драйверов. Он потребуется для работы фильтров, преобразующих задания для печати, в язык понятный принтеру:

sudo ln -s /etc/init.d/cups /etc/init.d/lpd
sudo mkdir -p /var/spool/lpd

Теперь качаем и ставим драйвера. Брать их нужно отсюда.

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

После этого ставим LPR драйвер:

sudo dpkg --install hl2240dlpr-2.1.1-1.i386.deb

После этого проверяем, что он установился:

user@host:/tmp$ cat /etc/printcap 
HL2240D:\
        :mx=0:\
        :sd=/var/spool/lpd/HL2240D:\
        :sh:\
        :lp=/dev/usb/lp0:\
        :if=/usr/local/Brother/Printer/HL2240D/lpd/filterHL2240D:

При необходимости корректируем строчку с :lp=/dev/usb/lp0 на нужное устройство.

Ставим драйвер обёртки для CUPS:

sudo dpkg --install cupswrapperHL2240D-2.0.4-2.i386.deb

Теперь можно открыть браузер и перейти по ссылке http://localhost:631/printers/ и проверить, что в списке появился принтер HL2240D. Для него должен быть указан параметр Connection, похожий на: usb://Brother/HL-2240D%20series.

Осталось протестировать принтер, и удостоверится что он нормально работает.

Выводы

  • Читайте инструкции, они рулят. У меня с первого раза, при беглом просмотре инструкций проделать данный процесс не получилось.
  • Если принтер внезапно оказался не на /dev/usb/lp0, приходится править /etc/printcap. Причём из документации на сайте Brother это нигде не находится.
  • Не всегда в инструкциях на официальном сайте указаны все зависимости (смотри psutils, откуда используется pstops).
  • Если что-то не работает, OpenPrinting.org говорит, что ваш принтер это груз для засолки капусты, а производитель утверждает обратное - не надо паниковать. Может быть прав производитель, а вы просто не правильно следовали его инструкциям (или не читали между строк/не обновили библиотеку libastral :) ).