Здравствуйте. После выхода в свет 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
Если все команды выполнены успешно, принтер должен работать.
Поделиться с друзьями
-->

Комментарии (29)


  1. ElegantBoomerang
    11.10.2016 01:46
    +1

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


  1. Taragolis
    11.10.2016 01:46
    +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?


    1. sasha1024
      11.10.2016 04:24
      +3

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

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


      1. masai
        11.10.2016 13:12

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


  1. Taragolis
    11.10.2016 08:29
    +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 /.


    1. KlimovDm
      11.10.2016 08:34

      По версиям с upstart — рекомендую к прочтению.
      https://help.ubuntu.com/community/UbuntuBootupHowto


      1. Taragolis
        11.10.2016 10:19

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


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


        1. KlimovDm
          11.10.2016 10:26
          +1

          Да, теперь правильно. А еще service некоторые майнтейнеры прикрутили как враппер для systemctl в 16.04. В результате «угадайка» стала еще более веселой :)


        1. sasha1024
          11.10.2016 17:59

          Хоть это в man'е и не отражено, service поддерживает systemd.
          Так что таки универсальная в Ubuntu.


        1. navion
          12.10.2016 00:11

          Upstart в RHEL6 хоть кто-то использует?
          На SO пишут, что оно unsupported и вообще плохое, мне тоже скрипты для EL6 под него не попадались.


          1. Taragolis
            12.10.2016 10:49

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


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


    1. sasha1024
      11.10.2016 16:27

      https://habrahabr.ru/post/312228/#comment_9851838


      1. Taragolis
        11.10.2016 17:03

        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
        


        1. sasha1024
          11.10.2016 18:10

          То есть в 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


          1. Taragolis
            11.10.2016 20:35

            То есть в 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/


            1. sasha1024
              11.10.2016 21:06

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


              1. Taragolis
                11.10.2016 21:56

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


                Выдержка из /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


  1. EGlaz
    11.10.2016 09:41

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

    Есть кто-то, у кого именно Canon LBP2900 заработал в Ubuntu или Mint?


    1. lleo_aha
      11.10.2016 10:53

      Есть. Скажу даже больше — завелся как сетевой принтер с ubuntu server в качестве хоста (одно но — я что-то перемудрил с samba, в итоге по сети оно печатало только с linux машин). В общем, у Вас просто что то пошло не так, драйвера ставятся — принтер заводится и печатает


      1. EGlaz
        11.10.2016 10:59

        У вас рецепт действий совпадает с этой статьёй или что-то делали по-другому?


        1. lleo_aha
          12.10.2016 09:37

          +-. Точно не скажу (давненько было), но делал по стандартному мануалу вида «скачать драйвера с canon сайта и завести cups»


    1. wispoz
      11.10.2016 10:57

      Было почти тоже самое только с LBP3010, помогало при включенной системе и принтере, перетыкнуть USB провод, чудно но работало.


      1. EGlaz
        11.10.2016 11:00

        Перетыкнуть нужно было один раз? (если да — то в какой момент относительно установки и настройки дров?) Или после каждого рестарта без перетыка не работало?


        1. wispoz
          11.10.2016 11:05

          Каждый раз, после рестарта. Не знаю почему так, если не перетыкать устройства как бы нет.


    1. megahertz
      13.10.2016 20:51

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


  1. DikSoft
    11.10.2016 10:35

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


    1. dr_magnus
      11.10.2016 15:21
      +1

      LBP 1120 элементарно настраивается в web-интерфейсе CUPS'a. Во всяком случае в Арче элементарно.
      Главное — поставить драйвера, которые упомянуты в статье.
      А как заставить его работать через консоль я написал еще в 2010 году

      В сеть не раздаю — нет необходимости.
      Но, как подсказали, можно создать виртуальный принтер, расшарить его и перенаправлять все его задания на реальный.


  1. homecreate
    11.10.2016 19:18

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


  1. EGlaz
    11.10.2016 22:16

    Ссылка на драйвера Canon не работает.