Установка принтеров Canon серии LBP в Ubuntu

Здравствуйте. После выхода в свет Ubuntu 12.04 в состав ее сборки вошли пакеты драйверов для принтеров Canon серии LBP. Но, все же при установке принтера в системе, драйвер отказывается работать корректно.

Всем заинтересованным данной проблемой прошу ознакомиться с инструкцией, в ходе выполнения которой все же удалось заставить фунционировать принтер модели Canon LBP 3010.

Инструкция так же будет справедлива и для других принтеров Canon следующих моделей:

LBP-1120, LBP-1210, LBP2900, LBP3000, LBP3050/LBP3018/LBP3010, LBP3150/LBP3108/LBP3100, LBP3200, LBP3210, LBP3250, LBP3300, LBP3310, LBP3500, LBP5000, LBP5050, LBP5100, LBP5300, LBP6018/LBP6000, LBP6300dn, LBP7200C, LBP9100Cdn.

Шаг 1. Прежде всего нужно скачать драйвер со страницы загрузки Canon.

Шаг 2. Распакуйте скачанный архив. Установите содержащиеся в нем пакеты в указанной последовательности:

sudo dpkg -i cndrvcups-common_2.40-1_i386.deb

udo dpkg -i cndrvcups-capt_2.40-1_i386.deb

Шаг 3. Перезапуск CUPS

sudo service cups restart

Шаг 4. Регистрация принтера в спулере печати:

sudo /usr/sbin/lpadmin -p [название принтера] -m [название файла PPD] -v ccp://localhost:59687 -E

Например, для принтера LBP-1120 строка будет выглядеть так:

sudo /usr/sbin/lpadmin -p LBP3010 -m CNCUPSLBP3050CAPTK.ppd -v ccp://localhost:59687 -E

Названия соответствующих файлов PPD:

LBP-1120: CNCUPSLBP1120CAPTK.ppd
LBP-1210: CNCUPSLBP1210CAPTK.ppd
LBP2900: CNCUPSLBP2900CAPTK.ppd
LBP3000: CNCUPSLBP3000CAPTK.ppd
LBP3050/LBP3018/LBP3010: CNCUPSLBP3050CAPTK.ppd
LBP3150/LBP3108/LBP3100: CNCUPSLBP3150CAPTK.ppd
LBP3200: CNCUPSLBP3200CAPTK.ppd
LBP3210: CNCUPSLBP3210CAPTK.ppd
LBP3250: CNCUPSLBP3250CAPTK.ppd
LBP3300: CNCUPSLBP3300CAPTK.ppd
LBP3310: CNCUPSLBP3310CAPTK.ppd
LBP3500: CNCUPSLBP3500CAPTK.ppd
LBP5000: CNCUPSLBP5000CAPTK.ppd
LBP5050 series: CNCUPSLBP5050CAPTK.ppd
LBP5100: CNCUPSLBP5100CAPTK.ppd
LBP5300: CNCUPSLBP5300CAPTK.ppd
LBP6018/LBP6000: CNCUPSLBP6018CAPTK.ppd
LBP6300dn: CNCUPSLBP6300CAPTK.ppd
LBP7200C series: CNCUPSLBP7200CCAPTK.ppd
LBP9100Cdn: CNCUPSLBP9100CCAPTK.ppd

Шаг 5. Регистрация принтера в демоне ccpd

sudo /usr/sbin/ccpdadmin -p [название принтера] -o [путь к печатающему устройству]

Например, для принтера LBP3010 строка будет выглядеть так:

sudo /usr/sbin/ccpdadmin -p LBP3010 -o /dev/usb/lp0

Если подключаем сетевой принтер, то нужно указать IP-адрес, например:

sudo /usr/sbin/ccpdadmin -p LBP3010 -o net:172.168.0.1

Шаг 6. Разрешение загрузки модуля usblp, установка пакета

kdesudo

sudo apt-get install kdesudo

kdesudo kate /etc/modprobe.d/blacklist-cups-usblp.conf

Комментирование строки blacklist usblp:

sudo gedit /etc/modprobe.d/blacklist-cups-usblp.conf

Устанавливаем в начале строки #, после этого выполняем:

modprobe usblp

Шаг 7. После этого следует запустить демон ccpd

sudo service ccpd start

После этого принтер должен заработать.

Шаг 8. Если принтер печатает нормально, то добавим демон ccpd в автозагрузку, чтоб не запускать каждый раз вручную:

sudo update-rc.d ccpd defaults 20

Затем прописываем в /etc/rc.local:

kdesudo kate /etc/rc.local

Перед exit 0 добавляем строку /etc/init.d/ccpd restart
Если все команды выполнены успешно, принтер должен работать.
Share post

Comments 34

    +1

    Вы в инструкции используете явно KDE, это видно по редактору) Не лишним тогда уже будет упомянуть, если уж указываете команды, что всё то же самое делается и из консоли (sudo vim/emacs/nano/editor...), и из GTK+ (тот же gksudo gedit). А то ещё начитаются и пойдут кеды ставить)

      +2

      Пройдусь небольшой критикой:


      Шаг 3. Перезапуск CUPS
      sudo service cups restart

      Wrong! Правильно использовать в зависимости от системы инициализации вашей системы, соответственно:
      systemd: sudo systemctl restart cups.service
      upstart: sudo initctl start cups или sudo start cups
      SysV: sudo /etc/init.d/cups restart


      sudo apt-get install kdesudo
      kdesudo kate /etc/modprobe.d/blacklist-cups-usblp.conf
      комментирование строки blacklist usblp
      sudo gedit /etc/modprobe.d/blacklist-cups-usblp.conf

      Тут какая-то злобная копипаста, лучше бы прямо указали, что в kde используйте kdesudo вместо sudo. А то кто-нибудь слепо поведется и затянет себе метров на 200 пакетов в не-kde DE устанавливая kdsudo.


      Конечно на вкус и цвет все фломастеры разные, но если от консоли кровь не идет из глаз, то для комментирования 1 строки всяко лучше использовать:
      sudoedit /etc/modprobe.d/blacklist-cups-usblp.conf или sudo -e /etc/modprobe.d/blacklist-cups-usblp.conf


      Шаг 7. После этого следует запустить демон ccpd
      sudo service ccpd start

      см.выше


      sudo update-rc.d ccpd defaults 20
      Затем прописываем в /etc/rc.local
      kdesudo kate /etc/rc.local
      перед exit 0 добавляем строку /etc/init.d/ccpd restart

      Wrong! Мы и так добавили в автозапуск update-rc.d. Зачем еще прописывать в /etc/rc.local? Ну и как вариант, может стоит посмотреть в сторону upstart или systemd ?


      Если не секрет какая у вас версия Ubuntu?

        +3
        > sudo service cups restart
        Случайно это не является ли универсальным способом, не зависимым от системы инициализации?

        А если и нет, то уж по крайней мере в Ubuntu «sudo service» является предпочтительным способом по сравнению с «/etc/init.d/…» (по крайней мере, в определённых версиях Ubuntu оно ругалось при попытке манипулировать некоторыми скриптами вторым способом и прямым текстом советовало первый — к сожалению, не знаю, с чем это связано).
          0

          Да, service — это лишь обёртка, которая дёргает upstart, SysV или systemd в зависимости от того, что установлено. В этом легко убедиться, если посмотреть содержимое /usr/sbin/service. Впрочем, в Ubuntu уже перешли с upstart на systemd, так что можно просто systemctl писать. Команда service осталась лишь для совместимости.

        +1
        Случайно это не является ли универсальным способом, не зависимым от системы инициализации?

        Короткий ответ нет. Более длинный кроется в man service


        man service
        service(8)                System Managers Manual                 service(8)
        NAME
               service - run a System V init script
        DESCRIPTION
               service runs a System V init script or upstart job in as predictable an
               environment as possible, removing most environment variables  and  with
               the current working directory set to /.

        Правильно будет использовать ту систему инициализации, которая является основной в Вашей системе. Если говорим про Ubuntu, то для 15.04+ то это systemd, если ранние версии то upstart. Конечно отдельное спасибо надо сказать мейнтейнерам Debian, которые так и не осилили переписать скрипты на соответствующие системы инициализации.

        • UFO just landed and posted this here
            0

            service в Ubuntu — угадай что надо запустить SysV или upstart, а может и не угадать и тогда нас ждет веселье. И такой он был сделан на "переходный период" в Ubuntu. В RHEL\Centos 6 пошли другим путем и service используется только для запуска SysV, для upstart используется initctl.


            В итоге в Ubuntu мы имеем:
            /etc/init.d/ — SysV
            initctl — upstart
            service — "общая команда" для SysV и upstart
            systemctl — systemd

            • UFO just landed and posted this here
                0
                Хоть это в man'е и не отражено, service поддерживает systemd.
                Так что таки универсальная в Ubuntu.
                  0
                  Upstart в RHEL6 хоть кто-то использует?
                  На SO пишут, что оно unsupported и вообще плохое, мне тоже скрипты для EL6 под него не попадались.
                    0

                    Используют, очень редко, но используют. Минусы upstart в RHEL, что версия уж очень древняя, некоторые вещи сделать нетривиально и легче делать через SysV чем городить костыли, ну и в конечном итоге на смену в семерке ему пришел systemd


                    Однако основной мой посыл был в том, что поведение service более предсказуемое в RHEL, чем в Ubuntu

                0
                https://habrahabr.ru/post/312228/#comment_9851838
                  0
                  Centos 6.8: системы инициализации upstart и SysV
                  $ lsb_release -i -r
                  Distributor ID: CentOS
                  Release:    6.8
                  
                  $ service --version
                  service ver. 0.91
                  
                  $ init --version
                  init (upstart 0.6.5)
                  Copyright (C) 2010 Canonical Ltd.
                  
                  This is free software; see the source for copying conditions.  There is NO warranty; not even
                  for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
                  
                  $ ls -l /etc/init/tomcat6.conf 
                  -rw-r--r--. 1 root root 493 Sep 13 00:07 /etc/init/tomcat6.conf
                  
                  $ sudo service tomcat6 restart
                  tomcat6: unrecognized service
                  
                  $ sudo initctl restart tomcat6
                  tomcat6 start/running, process 9679
                  
                  $ sudo restart tomcat6 
                  tomcat6 start/running, process 9729
                  
                    0
                    То есть в CentOS service неправильно работает?
                    Но речь-то про Ubuntu.

                    $ lsb_release -a
                    No LSB modules are available.
                    Distributor ID: Ubuntu
                    Description: Ubuntu 16.04.1 LTS
                    Release: 16.04
                    Codename: xenial

                    $ service --version
                    service ver. 0.91-ubuntu1

                    $ ls -l /etc/init.d/tomcat8
                    -rwxr-xr-x 1 root root 7993 вер 16 16:12 /etc/init.d/tomcat8

                    $ sudo service tomcat8 restart

                    $ sudo initctl restart tomcat8
                    sudo: initctl: command not found

                    $ sudo restart tomcat8
                    sudo: restart: command not found
                      0
                      То есть в CentOS service неправильно работает?

                      В CentOS — ванильная версия service от Red Hat которая используется только для запуска SysV скриптов, однако в Ubuntu используется модифицировання версия от Canonical которая запускает SysV и\или Upstart


                      $ sudo initctl restart tomcat8
                      sudo: initctl: command not found
                      $ sudo restart tomcat8
                      sudo: restart: command not found

                      Во-первых судя по тому, что command not found у Вас не установлен upstart: apt list --installed upstart
                      Во-вторых непонятно что вы хотите получить, запуская initctl или restart — эти комманды запустят только upstart job-ы которые расположены в /etc/init/

                        0
                        > которая запускает SysV и\или Upstart
                        или systemd
                          0

                          Это недокументированная возможность, хотя в коде это есть


                          Выдержка из /usr/sbin/service
                          is_systemd=
                          if [ -d /run/systemd/system ]; then
                             is_systemd=1
                          fi
                          
                          # When this machine is running systemd, standard service calls are turned into
                          # systemctl calls.
                          if [ -n "$is_systemd" ]
                          then
                             UNIT="${SERVICE%.sh}.service"
                             # avoid deadlocks during bootup and shutdown from units/hooks
                             # which call "invoke-rc.d service reload" and similar, since
                             # the synchronous wait plus systemd's normal behaviour of
                             # transactionally processing all dependencies first easily
                             # causes dependency loops
                             if ! systemctl --quiet is-active multi-user.target; then
                                 sctl_args="--job-mode=ignore-dependencies"
                             fi
                          
                             case "${ACTION}" in
                                restart|status)
                                   exec systemctl $sctl_args ${ACTION} ${UNIT}
                                ;;
                                start|stop)
                                   # Follow the principle of least surprise for SysV people:
                                   # When running "service foo stop" and foo happens to be a service that
                                   # has one or more .socket files, we also stop the .socket units.
                                   # Users who need more control will use systemctl directly.
                                   for unit in $(systemctl list-unit-files --full --type=socket 2>/dev/null | sed -ne 's/\.socket\s*[a-z]*\s*$/.socket/p'); do
                                       if [ "$(systemctl -p Triggers show $unit)" = "Triggers=${UNIT}" ]; then
                                          systemctl $sctl_args ${ACTION} $unit
                                       fi
                                   done
                                   exec systemctl $sctl_args ${ACTION} ${UNIT}
                                ;;
                                reload)
                                   _canreload="$(systemctl -p CanReload show ${UNIT} 2>/dev/null)"
                                   if [ "$_canreload" = "CanReload=no" ]; then
                                      # The reload action falls back to the sysv init script just in case
                                      # the systemd service file does not (yet) support reload for a
                                      # specific service.
                                      run_via_sysvinit
                                   else
                                      exec systemctl $sctl_args reload "${UNIT}"
                                   fi
                                   ;;
                                force-stop)
                                   exec systemctl --signal=KILL kill "${UNIT}"
                                   ;;
                                force-reload)
                                   _canreload="$(systemctl -p CanReload show ${UNIT} 2>/dev/null)"
                                   if [ "$_canreload" = "CanReload=no" ]; then
                                      exec systemctl $sctl_args restart "${UNIT}"
                                   else
                                      exec systemctl $sctl_args reload "${UNIT}"
                                   fi
                                   ;;
                                *)
                                   # We try to run non-standard actions by running
                                   # the init script directly.
                                   run_via_sysvinit
                                   ;;
                             esac
                          fi

                          По сути, если есть папка /run/systemd/system то дальнейшая работа передается systemd


                          В любом случае в системе с systemd взаимодействовать со скриптами инициализации стоит все же через systemctl.


                          P.S.: Еще есть возможность запуска OpenRC.

                0
                Читал несколько аналогичных статей, надеясь оживить принтер LBP2900 в Linux Mint 17, 17.2. Всё бесполезно. Линь его как бы почти видит, то есть значок есть, как бы даже в значок что-то отправляется, даже без ошибок, но принтер не оживает.
                В чём отличие этой статьи от остальных, которыми забит инет за последние лет 5?
                Не уверен, что делал шаг 6, у меня вероятно не KDE. Возможно делал что-то аналогичное.
                Я встречал мнение, что из-за особенностей CAPT драйверов от Canon — эти принтеры в принципе не могут работать в линуксе. И, к сожалению, мой случай пока это подтверждает.

                Есть кто-то, у кого именно Canon LBP2900 заработал в Ubuntu или Mint?
                  0
                  Есть. Скажу даже больше — завелся как сетевой принтер с ubuntu server в качестве хоста (одно но — я что-то перемудрил с samba, в итоге по сети оно печатало только с linux машин). В общем, у Вас просто что то пошло не так, драйвера ставятся — принтер заводится и печатает
                    0
                    У вас рецепт действий совпадает с этой статьёй или что-то делали по-другому?
                      0
                      +-. Точно не скажу (давненько было), но делал по стандартному мануалу вида «скачать драйвера с canon сайта и завести cups»
                    0
                    Было почти тоже самое только с LBP3010, помогало при включенной системе и принтере, перетыкнуть USB провод, чудно но работало.
                      0
                      Перетыкнуть нужно было один раз? (если да — то в какой момент относительно установки и настройки дров?) Или после каждого рестарта без перетыка не работало?
                        0
                        Каждый раз, после рестарта. Не знаю почему так, если не перетыкать устройства как бы нет.
                      0

                      Под арчем отлично работает. Когда был похожий диагноз, что вроде видит но ничего не печатает — проблема была в том что путь /dev/usb/lp0 не постоянный, привязал по имени устройства вида /dev/lp/by-id/usb-Canon_Canon_CAPT_USB_Device_0000A475R21u. https://wiki.archlinux.org/index.php/udev#Printers

                      0
                      Ради LBP 1120 держу виртуалку с Windows XP + GhostScript + RedMon. В сеть он раздаётся, как PostScript принтер. Экономлю на печати за счёт ресурсов принтера (мне его ещё лет на 5 хватит для дома) и нечипованных картриджей.
                      Можно ли теперь то же самое сделать на Linux? Предполагаю, что безопаснее и экономичнее сделать такой же вариант, но на Linux. Что-то типа необслуживаемого Print Server-а.
                      Вопрос: у кого-нибудь LBP 1120 вообще из под Debian/Ubuntu печатает, в сеть раздаётся?
                        +1
                        LBP 1120 элементарно настраивается в web-интерфейсе CUPS'a. Во всяком случае в Арче элементарно.
                        Главное — поставить драйвера, которые упомянуты в статье.
                        А как заставить его работать через консоль я написал еще в 2010 году

                        В сеть не раздаю — нет необходимости.
                        Но, как подсказали, можно создать виртуальный принтер, расшарить его и перенаправлять все его задания на реальный.
                        0
                        Респектище автору. Настроил по этой статье LBP2900 в CentOS 7, всё работает, пользователь вроде доволен. Причём я эту статью нагуглил, ещё когда она то ли в песочнице лежала, то ли в чулане, то ли где
                          0
                          Ссылка на драйвера Canon не работает.
                            0

                            Вам удалось в конечном итоге запустить ваш LBP2900?

                              0

                              Нет. Бросил эту затею. Починил старый samsung ml1012 — он без проблем сходу заработал и решил проблему.

                                +1

                                В общем у меня получилось (для Linux Mint 18).
                                Установить драйвера.
                                Затем нужно ВЫКЛЮЧИТЬ принтер.
                                Потом удалить все уже установленные принтеры(из гуи)
                                потом, учитывая что принтер висит на 0 usb порту:


                                sudo /etc/init.d/cups restart
                                sudo lpadmin -p LBP2900 -m CNCUPSLBP2900CAPTK.ppd -v ccp://localhost:59687 -E
                                sudo ccpdadmin -p LBP2900 -o /dev/usb/lp0
                                sudo update-rc.d ccpd defaults

                                Включить принтер.
                                Перегрузить.
                                У меня в результате получилось два принтера LBP2900, и LBP2900-2(который автоматически создает система, и если его удалить или отключить тоже не работает).


                                В общем мрак.

                            0
                            Большое спасибо автору. Настроил Canon LBP-810 в Mint 17.3, потом сделал его сетевым через Ubuntu Server 14.04.
                              0
                              Есть замечательный скрипт на help.ubuntu.ru. Всё заработало с первого раза, до этого пытался несколько раз настроить вручную, ничего не выходило.

                              Only users with full accounts can post comments. Log in, please.