Если у вас есть принтер Canon LBP(что-нибудь), и вы хотите его заставить работать в linux, то приключения вам обепечены. Да, принтер старый, сто лет в обед, но работает, печатает и тонер неплохо подходит для изготовления печатных плат Сложность с этими принтерами заключается в том, что они относятся к так называемым win-принтерам. То есть всю обработку задания на печать выполняет драйвер, а сам принтер - просто коробочка с моторчиками, которая печатает. Ну, не совсем уж так тупо, но для целей дальнейшего повествования сойдёт.
Смысл в том, что драйвер необходим, без него принтер - куча железа. И драйвер есть - но под Windows. Есть, правда, на сайте Canon официальные драйверы под Ubuntu, но ставить их не на debian-based - те ещё танцы с бубном. Я как-то раз пробовал - не работало.
Для тех, кто в танке в арче и его деривативах - есть два способа заставить эту адову машину работать. Один из них зовётся capt-src, а второй - captdriver. Я попробовал оба, и могу, кажется, сделать некоторые замечания.
Первым я поставил capt-src. Это, если мне память не изменяет, те же официальные дрова, но перепакованные под арч. Пакет элементарно подтягивается с AUR:
yay capt-src
В процессе установки он выдаст в терминале инструкции о том, как прописать принтер. Инструкции эти состоят из двух частей. Первая включает в себя команду lpadmin и нужна она, чтобы указать службе печати cups, где у нас принтер:
sudo lpadmin -p LBP2900 -m CNCUPSLBP2900CAPTK.ppd -v ccp://localhost:59687 -E
Обратите внимание, принтер у нас якобы в сети. Это потому что cups взаимодействует со службой ccpd, а не непосредственно с железом. Эту часть можно проделать с таким же успехом не в терминале, а например в настройках принтеров KDE. Или в настройках cups, через веб (localhost:631). Тот же самый эффект. Да, ppd файл для каждой модели принтера свой - вот тут можно посмотреть, какой подойдёт. Вторая часть - настройка службы ccpd, собственно той, что выполняет всю работу. Она принимает от cups задание, переваривает его и отрыгивает в принтер:
sudo ccpdadmin -p LBP2900 -o /dev/usb/lp0
Вот тут важно правильно указать, где у нас принтер уже физически. Выяснить это можно командой:
ls /dev/usb
Там должно быть устройство lpX, где X - какая-то цифра. Если нету, то передёрните и забудьте питание принтера.
Дальше запускаем и включаем в автозагрузку службу ccpd:
sudo systemctl start ccpd sudo systemctl enable ccpd
После этого, должно заработать. На случай, если я вдруг что-то забыл, оставьте в окошке терминала инстукции по установке, делайте по ним. У меня принтер тут же ожил, зашуршал и начал печатать. И печатал замечательно до какого-то момента. Чем определяется момент я не знаю, но через некоторое время печатать принтер перестал. Помогла только переустановка всего этого дела заново. И снова на какое-то время. Иногда, после перезагрузки принтер садится на другое устройство и, снова же, не печатает. Про это написано на форуме по вышеприведённой ссылке. Ещё одна интересная штука состоит в том, что установленный принтер имеет свойство размножаться. Со временем в окне выбора принтера при печати моих LBP2900 становилось всё больше и больше. Откуда они там брались мне неведомо. Решение то же - всё удалить и поставить заново. После очередных танцев с бубном я решил попробовать вариант второй.
captdriver - это опенсорсный драйвер для LBP2900/3000 созданный путём реверс-инжиниринга. По заявлению автора он сыроват, не весь функционал реализован. Но работает. И не требует ccpd, работает прямо в cups. Тоже есть пакет в AUR:
yay captdriver
У меня, правда, по какой-то причине он так просто вставать не захотел и пришлось собирать руками. Сначала тянем исходники с git:
git clone https://github.com/agalakhov/captdriver.git
Переходим в директорию с исходниками и колдуем сборку:
cd captdriver/ aclocal autoconf automake --add-missing ./configure make sudo make install sudo cp src/rastertocapt /usr/lib/cups/filter/ mkdir /usr/share/ppd/custom cp Canon-LBP2900.ppd /usr/share/ppd/custom/
Оговорки: /usr/lib/cups/filter - в каких-то системах это может быть /usr/libexec/cups/filter. Файл /usr/libs/cups/filter/rastertocapt должен иметь владельцем и группой root, и права 755. Это важно, без этого cups не станет его запускать; /usr/share/ppd/custom/ - у меня этой директории не было, пришлось создать.
Дальше добавляем принтер в cups любым доступным способом. При добавлении принера нужно выбрать или указать вручную правильный ppd, тот что мы положили в /usr/share/ppd/custom/
Всё, готово, можно печатать. Но есть нюанс. Принтер печатает только одно задание. На последующие не реагирует. (cмотрите update внизу). Драйвер рапортует завершение обработки задания, но печать не происходит. В чём причина, не знает даже автор драйвера, о чём он и пишет вот тут, и тут же нашлось решение. Я так понимаю, проблема состоит в том, что принтер передёргивает USB по завершении печати, чем вводит cups в когнитивный диссонанс. Сделать нужно следующее:
lsusb
В выводе команды находим наш принтер, выглядит это так, примерно:
... Bus 003 Device 011: ID 04a9:2676 Canon, Inc. LBP2900 ...
Нам отсюда понадобится ID. Далее, выясняем, где лежит конфигурация cups:
cups_config --datadir
У меня это /usb/share/cups. И вот здесь, в поддиректории usb/ создаём файлик org.cups.usb-quirks следующего содержания:
0x04a9 0x2676 no-reattach
Этот хак заставляет cups твёрдо верить, что принтер никуда не подевался и с ним можно дальше работать. Насколько я это понимаю. Принтер переподключаем, или перезапускаем. теперь он печатает задания без передёргивания. Правда один раз при повторной печати он умудрился выдать пустую страницу.
В моём случае этот драйвер ощутимо дольше обдумывает задание, чем первый, но печатает, и принтеры в системе не плодятся почём зря. Теперь нужно попробовать приделать его к домашнему серверу и потыкать по сети
Вывод по результатам всего эксперимента: заставить принтер печатать пока ещё можно, но для постоянной работы с бумагой ни один из двух драйверов не годится. И у того и у другого случаются глюки той или иной степени. Если нужно время от времени распечатать какую бумажку, то с ними можно жить. Для частой печати лучше заменить принтер на какой-нибудь более совместимый, как это не прискорбно. Говорят, HP хорошо работают.
update: проблему с печатью нескольких заданий подряд решили в форке драйвера вот по этому адресу. Процедура установки такая же, только usb-quirk городить не надо. И для того, чтобы сгенерировать файлы .ppd нужно дать следующую команду:
ppdc -v -d . src/canon-lbp.drv
update2: сетевая печать с captdriver тоже завелась без проблем. На сервере ставится captdriver. Ещё нужен ghostscript. На десктопе он, вероятно был уже подтянут чем-то как зависимость, а на сервере пришлось ставить руками:
sudo pacman -S ghostscript
Для того, чтобы настроить cups на сервере можно воспользоваться командной строкой, а можно дать доступ к веб-интерфейсу cups и настроить там.
Дальше, по инструкции настраиваем сетевое обнаружение. В случае с Manjaro оно уже было настроено. И, любопытный момент, при включенном сетевом обнаружении вообще не надо прописывать принтер в cups на стороне клиента, он и так видит. Проверил так же сетевую печать из mac os x - принтер определяется, добавляется и печатает без проблем.