Принтер Canon LBP3000 на Ubuntu 16.04 64-bit

Есть у меня в загашнике, помимо струйного, ещё и старый чёрно-белый лазерный принтер 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. Периодически в окне печати, напротив принтера, может мелькать «ccp send_data error, exit», но на деле принтер всё равно печатает.

P.P.S. Бывает, зависают (остаются в памяти), дублируются и не дают печатать canon’овские процессы captmon, captmon2, captfilter — перед очередным запуском ccpd их следует прихлопнуть вручную, иногда может потребоваться параметр -9

{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 :

Запись опубликована в рубрике компьютерное с метками , , , , , . Добавьте в закладки постоянную ссылку.

Внимание! Администрация сайта adlersky.top не имеет отношения и не несёт никакой ответственности за публикуемые ниже, т.е. под оригинальными записями и внизу страниц сайта, комментарии, не отвечает за их содержание. Все права на комментарии (и всё бремя ответственности за публикацию) принадлежат их авторам.

7 комментариев на «Принтер Canon LBP3000 на Ubuntu 16.04 64-bit»

  1. Александр говорит:

    Испробовал Ваш способ.К сожалению-не не помог.Принтер не печатает…В чем причина-не могу понять, хотя все, что вы писали, я чётко получал на экране.Без ошибок.

    • Vsevolod Adlersky говорит:

      Здравствуйте!

      А драйверы новые ставили с сайта 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

      Все равно если принтеры включены в другой последовательности система их путает.

  2. Andrei говорит:

    ~$ sudo /usr/sbin/ccpdadmin -p LBP3000 -o /dev/usb/lp1
    вот так заработало

  3. Влад говорит:

    Спасибо огромное! Canon lbp5050 завелся. Что и как только не перепробовал я. Причем раньше спокойно устанавливал,без проблем. накатил новый минт, и никак. .. Спасибо!

  4. Иван говорит:

    У меня Runtu (Ubuntu 18), Canon LPB1120 — по вашей блестящей статье всё заработало, но после перезагрузки отключается — выдаёт диагностику «ccp send_data error, exit» и не печатает. Чтобы печатало надо набрать ~$ sudo /etc/init.d/ccpd start , тогда всё снова работает.
    Я пробовал эту команду установить в Автозагрузки, но пока никак не получается.

Добавить комментарий

Публикуя здесь что-либо, вы обязуетесь строго следовать российскому законодательству и несёте ответственность за свои комментарии самостоятельно. Ваши персональные данные здесь не обрабатываются и не хранятся. Администрация сайта adlersky.top не имеет отношения и не несёт никакой ответственности за публикуемые под записями и страницами сайта комментарии.
☝ По нажатию "Отправить" комментарий автоматически уйдёт на модерацию

Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.