Драйвер принтера Canon CAPT є закритим джерелом, а бінарні бібліотеки, що постачаються Canon, компілюються для i386. Тож якщо ви перебуваєте на amd64, спочатку потрібно ввімкнути мультиарх та встановити деякі бібліотеки:
# 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-бітний драйвер залежно від вашої архітектури:
Тепер знайдіть /usr/share/cups/model
файли ppd, які описують принтери, і виберіть той, який відповідає (або найближчий до) принтеру:
# 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
І налаштуйте вашу систему, щоб автоматично запустити демон ccpd Canon:
# 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 із закритим вихідним кодом та відсутність підтримки мультиарха в скриптах збірки, було б дуже важко скласти повноцінний 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 залежить від демон демона до запуску другого процесу. Ви можете використати наступний метод для вирішення проблеми:
Увімкніть скрипт init скрипт (default-rc.d cups default).
Інструктуйте скрипт incccdd запускатись після чашок init (update-rc.d ccpd за замовчуванням 99), або додайте "sleep 10 && /etc/init.d/ccpd start" у /etc/rc.local.
Якщо ви хочете використовувати правила UDEV та скрипт запуску, пам’ятайте, що правила UDEV виконуються перед скриптом init CUPS, тому може бути корисним перезапустити скрипт inc ccpd, а не просто запустити. Наприклад, ви можете розмістити наступний рядок у "/etc/rc.local":
спати 10 && /etc/init.d/ccpd перезапустити
(Рішення з
вікі Ubuntu )
Повідомлення про помилки та проблеми підтримці 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.