Не удается заставить мой принтер Canon LBP работать под Ubuntu 14.04

17

Я скачал драйвер Linux CAPT V2.60 от Canon и установил оба пакета .deb, которые были перечислены в 64-битной папке вместе с Ubuntu Software-Center. Мой принтер Canon по-прежнему не распознается. Есть ли что-нибудь еще, что я должен сделать? Мой принтер подключен через USB.

Ubuntu станет отличной заменой моему офису, но, к сожалению, без поддержки принтера я все равно буду полагаться на Windows.

введите описание изображения здесь

Empedokles
источник
Не обвиняйте Ubuntu в отсутствии поддержки Canon для Linux.
Rinzwind
@Rinzwind Я думаю, что у Ubuntu будет достаточно мощности, чтобы поговорить с Canon, чтобы добиться лучшей поддержки.
empedokles
Нет, ты ошибаешься там. Просто: Canon как бизнес хочет денег. И Canonical не будет платить (это против идеалов компании). Вся поддержка, которую вы видите в отношении Canon в Ubuntu, предоставлена ​​(!) Добровольцем (Майкл Груз на launchpad launchpad.net/~michael-gruz/+archive/canon-trunk ).
Rinzwind
@Rinzwind В соответствии с инструкциями там я открыл терминал и выполнил «sudo add-apt-repository ppa: michael-gruz / canon-trunk» и «sudo apt-get update». Что-нибудь еще?
empedokles
1
Этот PPA устарел, он не поддерживает Ubuntu 14.04.
Bain

Ответы:

14

Драйвер принтера Canon CAPT является закрытым исходным кодом, а двоичные библиотеки, поставляемые компанией Canon, скомпилированы для i386. Поэтому, если вы используете amd64, вам сначала нужно включить multiarch и установить несколько библиотек:

# amd64 only
dpkg --add-architecture i386
apt-get update
apt-get install libstdc++6:i386 libxml2:i386 zlib1g:i386 libpopt0:i386

Установите чашки, если у вас их еще нет:

apt-get install cups

Загрузите и распакуйте драйвер принтера Canon CAPT:

wget http://gdlp01.c-wss.com/gds/6/0100004596
tar -zxvf Linux_CAPT_PrinterDriver_V260_uk_EN.tar.gz/03/Linux_CAPT_PrinterDriver_V260_uk_EN.tar.gz

Установите 32-битный или 64-битный драйвер в зависимости от вашей архитектуры:

  • 32-битный

    dpkg -i Linux_CAPT_PrinterDriver_V260_uk_EN/32-bit_Driver/Debian/*.deb
    
  • 64-битный

    dpkg -i Linux_CAPT_PrinterDriver_V260_uk_EN/64-bit_Driver/Debian/*.deb
    

Теперь найдите /usr/share/cups/modelppd-файлы, которые описывают принтеры, и выберите тот, который соответствует (или ближе всего) к вашему принтеру:

# grep -H ModelName /usr/share/cups/model/*.ppd | less
...
/usr/share/cups/model/CNCUPSLBP6018CAPTS.ppd:*ModelName: "Canon LBP6000/LBP6018 CAPT (US)"

В этом случае мы выбрали, CNCUPSLBP6018CAPTS.ppdкакая модель соответствует модели LBP6000.

Добавить принтер:

# lpadmin -p LBP6000 -m CNCUPSLBP6018CAPTS.ppd -v ccp://localhost:59687
# lpadmin -p LBP6000 -E
# ccpdadmin -p LBP6000 -o /dev/usb/lp0

И настройте свою систему для автоматического запуска демона Canon ccpd:

# update-rc.d ccpd defaults

Проблемы

Есть несколько проблем с драйвером принтера Canon:

  • Он был построен для Debian, и последняя поддерживаемая версия Ubuntu была 12.04. Это работает в 14.04, хотя.

  • Он включает в себя двоичные библиотеки с закрытым исходным кодом, которые созданы для 32-разрядной версии i386, поэтому его нельзя запускать на amd64 (даже в 64-разрядной версии).

  • captstatusui включает в себя неограниченный вызов strcpyв cnsktmodule.c, который завершается ошибкой aborted *** buffer overflow detected ***в некоторых системах

  • Драйвер принтера Canon на самом деле является отдельным демоном, который общается с чашками через локальный или сетевой сокет - он оставляет открытый сетевой порт в вашей системе, и я сомневаюсь, что код Canon когда-либо проверялся на наличие уязвимостей безопасности

  • Принтер может отображаться дважды в чашках (один раз для автоматически определяемого USB-принтера, один раз как демон Canon CCPD), но принтер «USB» не будет работать, если вы попытаетесь выполнить печать на нем. В настройках принтера, если вы видите, что ваш принтер настроен как USB-принтер, вы должны вручную отключить его (щелкните правой кнопкой мыши, отключите)

  • Canon использует свое собственное программное обеспечение и протокол для общения с принтером, поэтому он не интегрирован с чашками, не распознается автоматически и требует установки драйвера вручную. Разумно ожидать, что принтер должен автоматически обнаруживаться и просто работать, но это невозможно с Canon LBP. Моим следующим принтером будет принтер, который «просто работает» с драйверами с открытым исходным кодом, возможно, сетевой принтер, поддерживающий стандарт PCL - Printer Command Language , например Brother HL-2250DN (дешевый дуплексный сетевой принтер, ранее самый продаваемый лазерный принтер Amazon). или принтер , рекомендованный HP Linux, который работает с программным обеспечением HPLIP с открытым исходным кодом.

  • Скрипты сборки для исходного кода старые и немного беспорядочные. Из-за включения бинарных библиотек i386 с закрытым исходным кодом и отсутствия поддержки multiarch в сценариях сборки было бы очень сложно скомпилировать полностью работающую 64-битную версию. Компиляция 32-разрядной версии в 32-разрядной системе возможна после того, как вы исправите различные ошибки в системе сборки.


Проблема: ccpd зависает

Иногда ccpd зависает, и очередь просто говорит "Обрабатывается с ..."

Попробуйте ручной перезапуск:

pkill -9 -x ccpd
pkill -9 -x captmoncnabc
/etc/init.d/ccpd start
/etc/init.d/ccpd status

Проблема: ccpd не работает - после запуска системы работает только один процесс ccpd

Для нормальной работы в системе должны быть запущены два процесса ccpd. Демон ccpd зависит от запуска демона cups перед ответом на второй процесс. Вы можете использовать следующий метод для решения проблемы:

  1. Включите сценарий инициализации cups (по умолчанию update-rc.d cups).

  2. Дайте команду сценарию инициализации ccpd запускаться после инициализации cups (update-rc.d ccpd по умолчанию 99) или добавьте «sleep 10 && /etc/init.d/ccpd start» в сценарии /etc/rc.local.

Если вы хотите использовать правила UDEV и сценарий запуска, имейте в виду, что правила UDEV выполняются до сценария инициализации CUPS, поэтому может быть полезно перезапустить сценарий инициализации ccpd, а не просто запустить. Например, вы можете поместить следующую строку в «/etc/rc.local»:

сон 10 && /etc/init.d/ccpd restart

(Решение от Ubuntu Wiki )


Сообщение об ошибках и проблемах в службу поддержки Canon

У Canon есть официальный адрес электронной почты для сообщения о любых ошибках и проблемах с драйвером:

sup-debian@list.canon.co.jp

Сборка из источника

Если вы испытываете желание попробовать собрать и установить из исходного кода, следуйте этим инструкциям ( скрипт сборки Arch также может помочь):

sudo apt-get install build-essential automake libtool libgtk2.0-dev libglade2-dev libcups2-dev

wget http://gdlp01.c-wss.com/gds/6/0100004596/03/Linux_CAPT_PrinterDriver_V260_uk_EN.tar.gz
tar -zxvf Linux_CAPT_PrinterDriver_V260_uk_EN.tar.gz
cd Linux_CAPT_PrinterDriver_V260_uk_EN/Src/

# do cndrvcups-common
sudo apt-get install build-essential automake libtool libgtk2.0-dev libglade2-dev libcups2-dev
rm -rf cndrvcups-common-2.60-1/
tar -zxvf cndrvcups-common-2.60-1.tar.gz
cd cndrvcups-common-2.60-1/
sed -i -e 's/-lcups/-lcups -lgmodule-2.0/' cngplp/src/Makefile.am
dpkg-buildpackage -b -uc
cd ..
sudo apt-get install cups
sudo dpkg -i cndrvcups-common_2.60-1_amd64.deb

# do cndrvcups-capt
rm -rf cndrvcups-capt-2.60-1/
tar -zxvf cndrvcups-capt-2.60-1.tar.gz
cd cndrvcups-capt-2.60-1/
export echo=echo
sed -i -e 's/dh_shlibdeps/dh_shlibdeps --dpkg-shlibdeps-params=--ignore-missing-info/' debian/rules
sed -i -e 's/eval cmds=\"$old_archive_cmds/echo/' cngplp/ltmain.sh
sed -i -e 's:uimain.h":uimain.h"\n#include <cups/ppd.h>:' statusui/src/ppapdata.c
sed -i -e 's/cnsktmodule.la/cnsktmodule.la -lpthread/' statusui/src/Makefile.am
debian/rules configure
sed -i -e 's/RANLIB=/#RANLIB=/' cngplp/libtool
debian/rules build
fakeroot debian/rules install
fakeroot debian/rules binary-arch
cd ..
sudo dpkg -i cndrvcups-capt_2.60-1_amd64.deb

Я включаю это просто как примечание для тех, кто склонен идти по этому пути. Большинство людей не должны пытаться построить это из источника. Даже в системе amd64 полученный пакет будет включать закрытые библиотеки i386.

Bain
источник
Благодарю. Я также всегда ищу энергоэффективность. А как насчет LaserJet Pro P1102? topten.ch/deutsch/buro/laserdrucker/...
Empedokles
Согласно странице HPLIP P1102, этот принтер полностью поддерживается в Ubuntu 14.04. Требуется загружаемый плагин с закрытым исходным кодом; они предоставляют программное обеспечение ( hp-setup), которое будет загружать и настраивать его.
Bain
1
Спасибо за ответ! Кстати, откуда вы узнали, что libstdc++6:i386 libxml2:i386 zlib1g:i386требовалось? В инструкции упоминалось ia32-libs, чего с тех пор не было в более поздних версиях Ubuntu, поэтому я удивился, что за замена.
syockit
1
@syockit Если вы запустите file canon/libcapt.soего, он определит библиотеки Canon как «32-битные ELF», поэтому мы знаем, что для этого нужны 32-битные динамические библиотеки. Запустите ldd следующим образом ldd canon/libcapt.so- компоновщик распечатает все необходимые динамические библиотеки и покажет те, которые не найдены. Затем вы можете apt-file search libpthread.soнайти пакет, в котором находятся библиотеки.
Bain