Прелюдия
Всё началось с того, что мне понадобился принтер. Лазерный, потому что струйный принтер съест все деньги на чернилах, при более менее регулярной печати. Да и ЛУТ хочется попробовать. И с двусторонней печатью, потому что я ленивый, а бумагу бы не помешало экономить. Ну а так как я не дочь миллионера, то ещё и дешёвый. Ах, да, и обязательно поддерживающий 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 ).