Can't get my Canon LBP printer to run under Ubuntu 14.04
The Canon CAPT printer driver is closed source and the binary libraries supplied by Canon are compiled for i386. So if you are on amd64 you will need to first enable multiarch and install some libraries:
# amd64 only
dpkg --add-architecture i386
apt-get update
apt-get install libstdc++6:i386 libxml2:i386 zlib1g:i386 libpopt0:i386
Install cups if you do not already have it:
apt-get install cups
Download and unpack the Canon CAPT printer driver:
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
Install 32-bit or 64-bit driver depending on your architecture:
-
32-bit
dpkg -i Linux_CAPT_PrinterDriver_V260_uk_EN/32-bit_Driver/Debian/*.deb
-
64-bit
dpkg -i Linux_CAPT_PrinterDriver_V260_uk_EN/64-bit_Driver/Debian/*.deb
Now look in /usr/share/cups/model
for the ppd files that describe the printers and choose the one that matches (or is closest to) your printer:
# grep -H ModelName /usr/share/cups/model/*.ppd | less
...
/usr/share/cups/model/CNCUPSLBP6018CAPTS.ppd:*ModelName: "Canon LBP6000/LBP6018 CAPT (US)"
In this case we chose CNCUPSLBP6018CAPTS.ppd
which matches model LBP6000.
(Note - if you can not find a match for your printer, then view the README-capt-*txt file in the Canon tar.gz archive - in the section named "Object Printer" it contains an exact list of the printers supported by each .ppd file).
Add printer:
# lpadmin -p LBP6000 -m CNCUPSLBP6018CAPTS.ppd -v ccp://localhost:59687
# lpadmin -p LBP6000 -E
# ccpdadmin -p LBP6000 -o /dev/usb/lp0
And configure your system to start the Canon ccpd daemon automatically:
# update-rc.d ccpd defaults
Problems
There are several problems with the Canon printer driver:
-
It was built for Debian and last supported Ubuntu version was 12.04. It does work in 14.04 though.
-
It includes closed source binary libraries which are built for 32-bit i386, so can not be run natively on amd64 (even in the 64-bit package)
-
captstatusui includes an unbounded call to
strcpy
in cnsktmodule.c which fails with erroraborted *** buffer overflow detected ***
on some systems -
The Canon printer driver is actually a separate daemon that talks to cups over a local or network socket - it leaves an open network port on your system, and I doubt the Canon code has ever been audited for security vulnerabilities
-
The printer can appear twice in cups (once for auto-detected USB printer, once as Canon CCPD daemon) but the "USB" printer will not work if you try and print to it. In printer settings, if you see your printer configured as USB printer, you must manually disable it (right click, disable)
-
Canon use their own proprietary software and protocol for talking to the printer, which is why it is not integrated with cups, does not get automatically detected, and requires a driver to be manually installed. It is reasonable to expect that a printer should be automatically detected and just work, but this is not possible with Canon LBP. My next printer will be a printer that "just works" with open source drivers, probably a network printer that supports the PCL - Printer Command Language standard, like the Brother HL-2250DN (cheap duplex network printer, previously Amazon's top selling laser printer), or a HP Linux recommended printer that works with their open source HPLIP software.
-
The build scripts for the source code are old and a bit of a mess. Due to the inclusion of closed source i386 binary libraries, and lack of support for multiarch in the build scripts, it would be very hard to compile a fully working 64-bit release. Compiling a 32-bit release, on a 32-bit system, is possible once you have worked around the various bugs in the build system.
Problem: ccpd hangs
Sometimes ccpd hangs and the queue just says "Processing since ..."
Try a manual restart:
pkill -9 -x ccpd
pkill -9 -x captmoncnabc
/etc/init.d/ccpd start
/etc/init.d/ccpd status
Problem: ccpd does not work - only one ccpd process running after system startup
For normal operation two ccpd processes should be running in a system. The ccpd daemon depends on running cups daemon before forking the second process. You can use the following method to workaround the problem:
-
Enable the cups init script (update-rc.d cups defaults).
-
Instruct the ccpd init script to run after the cups init (update-rc.d ccpd defaults 99), or add "sleep 10 && /etc/init.d/ccpd start" in /etc/rc.local script.
If you want to use UDEV rules and startup script, be aware that UDEV rules execute before the CUPS init script, so it may be useful to restart the ccpd init script rather then simply start. For example, you can place the following string in "/etc/rc.local":
sleep 10 && /etc/init.d/ccpd restart
(Solution from Ubuntu wiki)
Reporting bugs and issues to Canon support
Canon have an official email address for reporting any bugs and issues with the driver:
[email protected]
Build from source
If you are tempted to try building and installing from source, follow these instructions (the Arch build script may also help):
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
I am including this just as a note for anyone inclined to follow this path. Most people should not attempt to build this from source. Even on an amd64 system, the resulting package will include the closed i386 libraries.