Canon LBP 2900B + Kubuntu 24.04 и 26.04


Ранее я уже писал про подлючение принтера Canon LBP 2900B к Linux Mint 17. Пролетают годы, сменяются операционные системы, а принтер всё бодр и отлично справляется со своей задачей. Вот теперь опишу процесс подключения в Kubuntu 24.04. Дело в том, что производители железа постарались значительно лучше производителей софта. По моим наблюдениям, частая история. Произодителю интереснее выпустить ещё 100500 новых моделей принтеров (по сути ничем не отличающихся), чем обновить драйвера, чтобы старые модели подерживались в современных операционных системах. Очень неэкологичное, безответственное поведение, на мой взгляд.

⚠️ Если у вас Ubuntu / Kubuntu 26.04 — старый способ с проприетарным драйвером Canon CAPT (ccpd) больше не работает. Я потратил полдня, чтобы это выяснить. Рабочий вариант для 26.04 — переход на открытый драйвер captdriver, всё подробно расписано ниже в блоке «Дополнено 05.07.2026.». Инструкция в основной части статьи актуальна для 24.04 и ранее. 

В Kubuntu (равно как и во всех прочих родственных ОС) потребуется установить специальный драйвер CAPT, так как стандартные драйверы в Linux для этого принтера не работают. Canon LBP2900B использует проприетарную систему печати CAPT.

Старые драйверы CAPT несовместимы с новыми версиями CUPS в Kubuntu 24.04. В современных дистрибутивах используется система печати от OpenPrinting, но драйвер CAPT для него больше не поддерживается (из обсуждения "My Canon LBP2900 printer isn’t printing").

Для установки рабочего драйвера можно было бы использовать автоматизированный скрипт ubuntu_canon_printer. Но он разрабатывался давно и уже не поддерживает овременные ОС. Поэтому я чуть доработал этот скрипт в своём форке. Вот как можно установить мой вариант:

1. Устанавливаем git

sudo apt update
sudo apt install git

2. Клонируем репозиторий и переходим в ветку с доработкой

git clone https://github.com/XOlegator/ubuntu_canon_printer.git
cd ubuntu_canon_printer
git checkout ubuntu24

3. Запускаем пошаговую установку

./canon_lbp_setup.sh

Основное изменение в скрипте-установщике — переименование пакета libpango1.0-0:i386 в libpango-1.0-0:i386 (добавился дефис). Решение вдохновлено обсуждением "Installation fails on Ubuntu 24.04 (dependency issue : libpango 1.0.0 i386 )".

После установки драйвера принтер появился в системном управлении принтерами и работал.

Но мне нужно было ещё расшарить принтер, чтобы можно было посылать на печать с соседнего компьютера (тоже Kubuntu 24.04). Тут оказалось мало встроенных настроек ОС, пришлось заходить в админку CUPS — http://localhost:631/admin. Тут находится галочка "Share printers connected to this system", которая делает возможным управление локальными принерами из сети. Это перепишет конфиг /etc/cups/cupsd.conf. Чтобы найти эту волшебную галочку расшаривания принтера — потребовалось некоторое время. Я изначально предполагал, что галочка должна быть у конкретного принтера, а окаазалось, что она сначала у всей системы печати, а потом уже у принетра. В этом процесе настройки у меня всё завелось далеко не с первой попытки. В ходе экспериментов я делал также:

sudo ufw allow CUPS
sudo ufw allow ssh
sudo ufw allow 631/tcp
sudo systemctl restart cups cups-browsed

Запуск проверки с соседнего компьютера, есть ли доступ к системе CUPS основного компьютера (мой локальный IP):

telnet 192.168.88.250 631

Добавление принтера на втором компьютере делается по пути вида ipp://192.168.88.250/printers/LBP2900 (тут название принтера должно совпадать с названием принтера на компе 192.168.88.250). Сам IP 192.168.88.250 — это то, что нужно подставить ваше персональное. Драйвер принетра при установке я выбирал первый из "Canon LBP2900 CAPT ver.1.5 (en)" — почему-то их 2 в списке.

Дополнено 11.05.2026. Полезно знать: если принтер перестал печатать через некоторое время.

Иногда после обновлений/перезагрузок Canon LBP2900 снова “пропадает”: задания уходят, но физически печати нет, а после неудачной попытки печати принтер может подвиснуть до выключения/включения кнопкой.

Симптомы:

  • lpstat -t показывает очередь LBP2900, но печати нет.
  • После перезагрузки нет /dev/canonLBP2900.
  • lsmod | grep usblp ничего не выводит.
  • Появляется лишняя очередь LBP2900-2 (USB), которая может путать приложения. 

Причина. Часто это из-за отключенного модуля usblp (в системе может быть blacklist usblp). Для CAPT-драйвера Canon этот модуль нужен.

Быстрое восстановление:

sudo sed -i 's/^blacklist[[:space:]]\+usblp/# blacklist usblp/' /etc/modprobe.d/blacklist-usblp.conf
echo usblp | sudo tee /etc/modules-load.d/usblp.conf
sudo modprobe usblp
sudo systemctl restart ccpd cups

Проверка после перезагрузки:


lsmod | grep '^usblp'
ls -l /dev/canonLBP2900
systemctl is-active cups ccpd
lpstat -t

Должно быть:

  • usblp загружен,
  • есть /dev/canonLBP2900 -> usb/lpX,
  • cups и ccpd в active,
  • основной принтер — LBP2900 (CAPT, ccp://localhost:59787). 

Практический совет. Даже если в системе сам появляется LBP2900-2, печатайте на LBP2900 (CAPT-очередь), при необходимости явно:

lp -d LBP2900 файл.pdf

Дополнено 05.07.2026.

Сегодня обновился с Kubuntu 24.04 до 26.04 — и принтер снова перестал печатать. Но на этот раз рецепт из блока «Дополнено 11.05.2026.» не помог, и я довольно долго не мог понять, почему. Сначала я убедился, что дело НЕ в том, в чём обычно. Всё, что раньше ломалось, оказалось на месте:

  • модуль usblp загружен, blacklist уже закомментирован;
  • принтер виден по USB (lsusb показывает 04a9:2676);
  • симлинк /dev/canonLBP2900 → /dev/usb/lp2 на месте, udev-правило цело;
  • демон ccpd запущен, порт 59787 слушается;
  • пакеты cndrvcups-capt / cndrvcups-common установлены.

При этом captstatusui -P LBP2900 упорно показывал ошибку «Check the DevicePath of /etc/ccpd.conf», а задания уходили в «выполнено» мгновенно, ничего не печатая.

Ключевая проверка, которая всё расставила по местам, — попробовать записать в устройство напрямую, минуя ccpd:

sudo bash -c 'printf "\f" > /dev/usb/lp2'; echo "код возврата: $?"

Код возврата — 0. То есть само устройство, USB и права полностью исправны, принтер спокойно принимает данные. Проблема целиком внутри ccpd: этот бинарник 2017 года (собран ещё под ядро 2.4/2.6) на ядре и CUPS из 26.04 просто отказывается открывать устройство — тихо, без внятной ошибки в логах. dmesg при печати пуст, fuser /dev/usb/lp2 показывает, что ccpd вообще не прикасается к устройству. Никакие перерегистрации через ccpdadmin, циклы питания принтера и перезапуски в правильном порядке его не оживили.

Вывод: проприетарный Canon CAPT на 26.04 — тупик. Хорошая новость в том, что есть открытый драйвер captdriver (реверс-инженерный CAPT-фильтр), который печатает напрямую через usb:// вообще без демона ccpd. Именно на него давно ушло сообщество, потому что он работает на новых ядрах и CUPS. Ниже — как я его поставил.

1. Ставим зависимости для сборки:


sudo apt update
sudo apt install -y build-essential autoconf automake libtool pkg-config \
libcups2-dev cups-filters ghostscript git

(если libcups2-dev не найдётся из-за t64-перехода — поставьте libcups2t64-dev)

2. Клонируем и собираем (внимание: в этом форке нет autogen.sh, бутстрап делается через autoreconf):


cd ~
git clone https://github.com/mounaiban/captdriver.git
cd captdriver
autoreconf -i
./configure
make
make ppd

После make появится фильтр src/rastertocapt, а make ppd сгенерирует PPD-файлы, в том числе нужный ppd/CanonLBP-2900-3000.ppd.

3. Устанавливаем фильтр в CUPS. Важный момент: rastertocapt обязан принадлежать root и иметь права 755, иначе CUPS откажется его запускать:


sudo install -o root -g root -m 755 \
~/captdriver/src/rastertocapt /usr/lib/cups/filter/rastertocapt

4. Удаляем старые нерабочие очереди и глушим мёртвый ccpd, чтобы он больше не мешал и не стартовал при загрузке:


sudo lpadmin -x LBP2900
sudo lpadmin -x LBP2900-2
sudo systemctl stop ccpd
sudo systemctl disable ccpd
sudo systemctl mask ccpd

5. Узнаём USB-адрес принтера (у вас будет свой серийный номер):


lpinfo -v | grep -i canon

Строка вида usb://Canon/LBP2900?serial=XXXXXXXX — это и есть адрес.

6. Создаём новую очередь на captdriver (подставьте свой usb://-адрес из предыдущего шага):


sudo lpadmin -p LBP2900 \
-v "usb://Canon/LBP2900?serial=XXXXXXXX" \
-P ~/captdriver/ppd/CanonLBP-2900-3000.ppd \
-E
sudo lpadmin -d LBP2900
sudo systemctl restart cups

7. Печатаем тест:


echo "captdriver test $(date)" | lp -d LBP2900

Из принтера выходит страница — готово. Теперь печать идёт по цепочке rastertocapt → usb://, и проприетарный ccpd в ней вообще не участвует.

Пара замечаний на будущее:

  • Не удаляйте каталог ~/captdriver — если после очередного обновления ядра или CUPS печать отвалится, драйвер пересобирается оттуда за минуту (шаги 2–3).
  • Очередь LBP2900-2 иногда возвращается сама при переподключении принтера по USB (её создаёт встроенный hotplug CUPS). Если начнёт мешать — просто удалите её: sudo lpadmin -x LBP2900-2.
  • Если печать не пошла, смотрите tail -30 /var/log/cups/error_log — в отличие от молчаливого ccpd, rastertocapt пишет в лог человекочитаемые ошибки.

Комментарии

  1. Этот комментарий был удален автором.

    ОтветитьУдалить
  2. Огромное спасибо тебе, добрый человек!!!!!! Перепробывал множество подсказок по теме, выручила только ваша.

    ОтветитьУдалить
  3. В Ubuntu 26 опять принтер отвалился и опять нашёлся вариант его заставить работать. В очередной раз удивляюсь, как корпорациям (Canon в данном случае) плевать на своих клиентов. Для устройства нет никаких технических причин не работать, а поддержки от вендора - ноль, - типа выбрасывайте этот принтер и покупайте новый. Очень экологично!

    ОтветитьУдалить

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

Популярные сообщения из этого блога

Bitrix24 API - разбор демо приложения третьего типа

Пропорциональное распределение суммы

Socks5 proxy на CentOS 7