Есть у меня в загашнике, помимо струйного, ещё и старый чёрно-белый лазерный принтер Canon i-SENSYS LBP3000. Чтобы он работал в Linux’е, необходим драйвер Canon CAPT Driver, установка которого (по крайней мере, на 64-разрядной системе) имеет, скажем так, некоторые особенности, увы, не задокументированные вендором надлежащим образом. Дабы избегать каждый раз долгой возни с установкой и прыганий по граблям, решил записать тут для себя работоспособную инструкцию, прям по горячим следам. Может, ещё кому сгодится. 😺
Разумеется, в интернете можно найти кучу инструкций, как можно завести этот драйвер под различные версии ОС Ubuntu (в т.ч. и более старые), существуют даже какие-то пользовательские скрипты и т.п. — но во-первых, проверять их все просто нет времени и смысла, в во-вторых, у меня тут гарантированно работоспособный вариант для моей системы, с официальным драйвером Canon и безо всяких левых скриптов, притом с минимальным количеством «танцев с бубном» в принципе. 😺
И конечно, этот драйвер (ну, в теории 😺) подойдёт не только для принтера LBP3000, но и для других моделей этого ряда (типа LBP1120, LBP1210, LBP2900, LBP3050, LBP3150, LBP3200, LBP3210, LBP3300, LBP3310, LBP3500 и т.д. и т.д. — а также для LBP-810, см. update внизу поста)
Итак, моя ОС:
~$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION=»Ubuntu 16.04.4 LTS»
~$ uname -a
Linux *** 4.9.89-040989-lowlatency #201803220931 SMP PREEMPT Thu Mar 22 09:35:17 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
На самом деле, у меня Lubuntu 16.04.4 LTS 64-bit — не самая свежая версия, но ждём релиз 18.04 LTS 😺
* * *
I. Заходим и выкачиваем драйвер с официального сайта Canon, только с азиатского подразделения: http://support-asia.canon-asia.com. Почему именно отсюда? А по старой памяти: когда-то там вроде бы была размещена более свежая версия драйвера для этой линейки принтеров, нежели та, что лежала на европейских сайтах; как с этим сейчас, не знаю, но на всякий случай качаем оттуда, чтобы время не терять. 😺
Принтер выглядит как-то так. Картинка — из интернета
Проходимся по менюшкам и выбираем нужный принтер; нас интересует опция драйверов для Linux-x64. Как видим, наиболее свежая на данный момент версия драйвера: 2.71. Соглашаемся с текстом лицензионного соглашения, выкачиваем.
Сам файл называется linux-capt-drv-v271-uken.tar.gz; довольно увесистый (ок. 128 Mb), там содержится комплект и для 32-х разрядной версии в т.ч. — всё скопом, в общем.
II. Оттуда, из папки 64-bit_Driver/Debian, распаковываем отдельно куда-нибудь два deb-пакета: cndrvcups-common_3.21-1_amd64.deb и cndrvcups-capt_2.71-1_amd64.deb.
Далее устанавливаем их оба:
~$ sudo dpkg -i ~/path-to-that/*.deb
Всё, больше из скаченного архива linux-capt-drv-v271-uken.tar.gz ничего не нужно. Разработчики положили туда ещё мануал в формате html — в принципе, юзабельный, но там некоторые важные нюансы, без которых принтер попросту не заведётся, не описаны.
Так вот, у меня оба пакета встали сразу и без ошибок, ничего дополнительно доставлять не потребовалось.
III. После чего — перезапускаем службу печати cups:
~$ sudo systemctl stop cups
~$ sudo systemctl start cups
Далее, регистрируем принтер:
~$ sudo /usr/sbin/lpadmin -p LBP3000 -P /usr/share/cups/model/CNCUPSLBP3000CAPTK.ppd -v ccp://localhost:59687 -E
Конкретно для моего принтера требуется файл CNCUPSLBP3000CAPTK.ppd — а так, прежде чем выполнять команду, список всех доступных моделей смотрим вот тут:
~$ ls /usr/share/cups/model
Зарегистрировали — проверяем наличие файла LBP3000.ppd в нужной папке с прочими принтерами:
~$ ls /etc/cups/ppd
Если он там появился, всё ок.
IV. Далее подсоединяем usb-кабель и включаем принтер. Проверяем наличие замонтированного в /dev/usb необходимого девайсового файла принтера lp0:
~$ ls -al /dev/usb/lp0
Регистрируем принтер Canon’овской утилитой ccpdadmin:
~$ sudo /usr/sbin/ccpdadmin -p LBP3000 -o /dev/usb/lp0
В выхлопе должно быть что-то типа такого:
CUPS_ConfigPath = /etc/cups/
LOG Path = None
UI Port = 59787
Entry Num : Spooler : Backend : FIFO path : Device Path : Status
—————————————————————————-
[0] : LBP3000 : ccp : //localhost:59687 : /dev/usb/lp0 : New!!
Видно, что наш принтер Canon’овская утилита подцепила успешно.
Далее стартуем Canon’овский процесс(-ы) ccpd:
~$ sudo /etc/init.d/ccpd start
Да, при установке драйверов скрипт управления этим демоном добавляется в init.d — а ежели надо, чтобы оно запускалось при автозагрузке, нужно писать собственную службу в systemd. Есть ещё вариант стартовать через udev при подключении принтера. Как это всё красиво организовать, можно посмотреть в интернете — мне же всё это не особо требуется, потому как принтер используется чисто «по требованию», в качестве резервного раз в полгода. 😺
Так вот, по выполнении:
~$ ps -ale | grep ccpd
— мы должны увидеть два запущенных процесса ccpd, наподобие:
1 S 0 14841 1 0 80 0 — 38785 — ? 00:00:00 ccpd
1 S 0 14842 14841 0 80 0 — 20618 — ? 00:00:11 ccpd
( кстати, для ручного перезапуска ccpd использую:
~$ sudo killall ccpd
~$ sudo /etc/init.d/ccpd start
)
Так вот, убеждаемся, что cups и два процесса ccpd запущены.
V. Ну всё, казалось бы, можно открывать нужный файл (какой-нибудь, скажем, PDF’ник с билетом или талоном к врачу), жать Ctrl+P, выбрать принтер LBP3000 из списка и печатать… Как бы не так! 😈 При отправке на печать ничего вразумительного не происходит, а напротив статуса принтера висит крамольное ccp send_data error, exit.
А это потому, оказывается, что для работы 64-разрядного драйвера необходимы некоторые 32-разрядные библиотеки! И об этом в инструкции Canon — ни звука! 😺
Что ж, доставляем нужные пакеты:
~$ sudo apt-get install libatk1.0-0:i386 libcairo2:i386 libgtk2.0-0:i386 libpango1.0-0:i386 libstdc++6:i386 libxml2:i386 libpopt0:i386
Список взял у французов, слава им. 😺 Впрочем, у меня некоторые пакеты уже были установлены, но не все.
После — грохаем ccpd:
~$ sudo killall ccpd
Тормозим и включаем назад cups:
~$ sudo systemctl stop cups
~$ sudo systemctl start cups
Запускаем снова ccpd:
~$ sudo /etc/init.d/ccpd start
На всякий случай убеждаемся, что оба процесса ccpd на месте:
~$ ps -ale | grep ccpd
Опционально — включаем/выключаем сам принтер, но по-моему, этого не делал.
Voilà, после всех этих манипуляций принтер весело зашуршал и распечатал мне талончик, снова затем отправившись пылиться на дальнюю полку. 😺
P.S. 1. Периодически в окне печати, напротив принтера, может мелькать «ccp send_data error, exit», но на деле принтер всё равно печатает.
2. Если в логах по-прежнему «ccp send_data error, exit», а очередь печати предательски зависла на статусе «Processing» и ничего не происходит, проверяем через Canon’овскую консоль ошибок:
~$ captstatusui -P LBP3000
Как видно, на этом принтере случилось что-то с датчиком бумаги — сам же драйвер не при чём! Стоило пошевелить лоток — и печать запустилась.
3. Бывает, зависают (остаются в памяти), дублируются и не дают печатать canon’овские процессы captmon, captmon2, captfilter — перед очередным запуском ccpd их следует прихлопнуть вручную, иногда может потребоваться параметр -9. Но это редкий случай — в основном, прихлопывание ccpd тянет по цепочке остальное.
Дальше, в принципе, можно не читать — по клику пойдут разнообразные не столь существенные апдейты
{update 23/10/2021}
Настройка принтера Canon LBP-810 на Ubuntu Focal Fossa 64-bit
Точно таким же способом можно настроить и принтер Canon LBP-810 — чего буквально только что, собственно, и добился. На сей раз для разнообразия решил действовать, правда, чуть по-другому.
Драйвер capt (абсолютно тот же самый, не апгрейдил) уже стоит в системе, так что скачивать и дополнительно устанавливать не придётся. Кстати, операционная система уже чуть посвежей 🙂:
~$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION="Ubuntu 20.04.3 LTS"
Тоже 64-bit, разумеется. При этом помянутые в посте необходимые 32-битные библиотеки стоят.
При подключении принтера через usb-шнур внезапно появляется окошко с уведомлением об обнаружении нового принтера. Притом модель отображается верная:
Что ж. Может, и правда в системе появился новый инструментарий, и настроить принтер теперь легко можно через gui (спойлер: не совсем 🙂)? Любопытство взяло верх, и я нажал на «Search».
Далее я решил выбрать опцию «предоставить PPD-файл», потому что заранее ясно, что в системе он уже должен быть (тем более, canon’овский драйвер-то установлен).
Один нюанс: для Canon LBP 810 файл называется CNCUPSLBP1120CAPTK.ppd. Путь к файлу: /usr/share/cups/model. Название для принтера я выбрал «Canon-LBP810-CAPT-English».
Однако через этот диалог я не нашёл опции указать соединение через порт 59687, как требуется для корректной работы через Canon’овский драйвер. Поэтому далее решил отредактировать настройки принтера через стандартный интерфейс CUPS. Достучаться дотуда можно прямо в браузере, по адресу http://127.0.0.1:631
Нужный принтер оказался первый в списке:
Выбираем «Редактировать», далее отмечаем «CAPT Printer»:
Тут уже можно руками вбить нужное нам соединение: ccp://localhost:59687
Вроде всё. Но что интересно, при переподключении usb-шнура всё равно каждый раз выскакивает уведомление об обнаружении нового принтера, будто и настроек никаких не делали. Его можно благополучно игнорировать, однако всё равно странно 🙂 (upd — а можно, пройдясь по диалогу по нажатии Search, выбрать предложенный стандартный драйвер и повесить т.о. левый принтер на этот Device URI)
Подчеркну, всего вышеперечисленного можно не делать, вместо чего попытаться зарегистрировать принтер напрямую через командную строку с помощью стандартной утилиты lpadmin, как указано в п. III поста.
Далее по описанному в посте алгоритму регистрируем принтер Canon’овской утилитой:
~$ sudo ccpdadmin -p Canon-LBP810-CAPT-English -o /dev/usb/lp0
Получаем:
UPS_ConfigPath = /etc/cups/
LOG Path = None
UI Port = 59787
Entry Num : Spooler : Backend : FIFO path : Device Path : Status
----------------------------------------------------------------------------
[0] : LBP3000 : ccp : //localhost:59687 : /dev/usb/lp0 :
[1] : Canon-LBP810-CAPT-English : ccp : //localhost:59687 : /dev/usb/lp0 : New!!
Т.е. на одном и том же порту (FIFO path) сидят два принтера. И после старта ccpd процессов возникает не два, как положено, а три. В принципе, принтер печатает, но крайне нестабильно, приходится часто перезапускать ccpd и cups.
Так что следы принтера LBP-3000 надо бы вычистить; тем паче, у меня его больше нет 🙂:
~$ sudo ccpdadmin -x LBP3000
Итого, остался только желаемый LBP-810:
UPS_ConfigPath = /etc/cups/
LOG Path = None
UI Port = 59787
Entry Num : Spooler : Backend : FIFO path : Device Path : Status
----------------------------------------------------------------------------
[0] : Canon-LBP810-CAPT-English : ccp : //localhost:59687 : /dev/usb/lp0 :
{update 25/03/2023}
Настройка принтера Canon LBP-810 на Ubuntu Jammy Jellyfish 22.04 64-bit
Для новой версии Ubuntu 22.04 (точнее, у меня Lubuntu) изменений нет, принтер Canon LBP-810 пашет исправно аки конь. Что даже удивительно — на той же Windows поддержка этого старья давно дропнута. 🙂 Систему обновил «на горячую», capt-драйверов от Canon никаких не переставлял и не обновлял — в этом смысле никаких телодвижений.
~$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=22.04
DISTRIB_CODENAME=jammy
DISTRIB_DESCRIPTION="Ubuntu 22.04.2 LTS"
Упомянутые в посте необходимые 32-битные библиотеки как стояли, так и стоят, или штатно обновлены из стандартных убунтовских репозиториев для актуального релиза.
Испробовал Ваш способ.К сожалению-не не помог.Принтер не печатает…В чем причина-не могу понять, хотя все, что вы писали, я чётко получал на экране.Без ошибок.
Здравствуйте!
А драйверы новые ставили с сайта Canon?
Скорее всего принтер сел не на lp0.
Включив принтер сперва посмотрите куда он сел: ls /dev/usb
У меня два принтера: Canon LBP-1120 и Canon LBP-810. Если их включить в такой последовательности как я их написал то Canon LBP-1120 встает на lp1 а Canon LBP-810 на lp2. Соответственно в стороке:
~$ sudo /usr/sbin/ccpdadmin -p LBPваш_принтер -o /dev/usb/lp(нужно указать верный)
У меня сейчас другая проблема. Если принтеры включены до загрузки системы то они так же встают как положено Canon LBP-1120 встает на lp1 а Canon LBP-810 на lp2. Но если например загрузить систему без включенных принтеров а потом захочется напечатать на Canon LBP-810 и включить его не включая Canon LBP-1120 он встает на место Canon LBP-1120 на lp1. И как это побороть я пока не пойму.
Пробовал подключать вместо /dev/usb/lp1 или /dev/usb/lp2 как: /dev/lp/by-id/usb-Canon_Canon_CAPT_USB_Device_(здесь то что записано в ATTRS{serial}==).
Сейчас у меня так:
mikhail@MMM-HOME ~ $ sudo ccpdadmin
Usage:
ccpdadmin [-p Printer-name -o Printer-dev-path]
ccpdadmin [-x Remove-Printer-name]
CUPS_ConfigPath = /etc/cups/
LOG Path = None
UI Port = 59787
Entry Num : Spooler : Backend : FIFO path : Device Path : Status
—————————————————————————-
[0 ] : Canon-LBP-1120 : ccp : //localhost:59687 : /dev/lp/by-id/usb-Canon_Canon_CAPT_USB_Device_5818R3 :
[1 ] : Canon-LBP-810 : ccp : //localhost:59687 : /dev/lp/by-id/usb-Canon_Canon_CAPT_USB_Device_60183EF7
Все равно если принтеры включены в другой последовательности система их путает.
~$ sudo /usr/sbin/ccpdadmin -p LBP3000 -o /dev/usb/lp1
вот так заработало
Спасибо огромное! Canon lbp5050 завелся. Что и как только не перепробовал я. Причем раньше спокойно устанавливал,без проблем. накатил новый минт, и никак. .. Спасибо!
У меня Runtu (Ubuntu 18), Canon LPB1120 — по вашей блестящей статье всё заработало, но после перезагрузки отключается — выдаёт диагностику «ccp send_data error, exit» и не печатает. Чтобы печатало надо набрать ~$ sudo /etc/init.d/ccpd start , тогда всё снова работает.
Я пробовал эту команду установить в Автозагрузки, но пока никак не получается.
я бы в качестве первой команды ввел: sudo apt purge system-config-printer-udev
и тогда при подключении принтера в USB-разъем не будет появляться новый принтер, дублирующий. Последние мои команды-sudo systemctl daemon-reload
sudo systemctl reenable ccpd.service
(Последняя команда срабатывает если не работает команда «sudo systemctl enable ccpd.service»)
После выполнения этих команд дэмон ccpd (если он, конечно есть и не нуждается в редактировании), будет запущен и не будет нуждаться в повторном запуске после перезагрузки системы. И все точно пойдет, как по маслу
ТОЛЬКО по вашей статье все и заработало . Автор- вам дикий респект !я 5 дней курил мануалы с разных сайтиков . Помог только ваш .
заводил на Xubuntu 23.10 принтер LBP 6310dn
Спасибо огромное !