How-To Install Canon's i250 Printer Drivers on Debian

Download the Drivers

The drivers are available in rpm format from Canon New Zealand or Canon Australia. You want to download both bjfiltercups-2.3-0.i386.rpm and bjfilteri250-2.3-0.i386.rpm.

Download Dependencies

In the next step, we will use alien to convert the rpms to debs. Alien looks at the binaries and uses the shlibs system to find dependencies. Unfortunately, it can only find dependencies if they are installed when alien is run. Even more unfortunately, these drivers depend on some outdated libraries.

Here is the list of packages you need to have installed, first those available in Woody, Sarge, Etch, and Sid:

You should already have many of these packages installed, and be able to install all these packages using your favorite package manager

Now the outdated packages no longer available in Etch or Sid. You may be able to find these on snapshot.debian.net, or on a Debian CD of the appropriate version:

Note that the newer gdk-imlib1 in Etch and Sid conflicts with libpng2 and libpng10-0, so if you need it for other packages, you will need version 1.9.14-16.2 or older. You may also need to downgrade other packages that depend on gdk-imlib1. You can probably find the appropriate versions in Sarge.

You can download these packages and install them using

dpkg --install packagename_and_version.deb

Fix libpng2 shlibs

Debian uses the shlibs system for libraries to specify what package version is needed for a specific soname of the library. This works great, and alien will use it to give your Canon driver packages the appropriate dependencies, which will keep you from accidentally uninstalling one and not knowing why you can't print anymore. The only problem we have here is that libpng2 (at least the version on my system) doesn't specify any shlibs. So, I added it.

First, find out what version of libpng2 you have installed. dpkg -l libpng2 should tell you. Then, as root, fire up your favorite editor and create the file "/var/lib/dpkg/info/libpng2.shlibs". If it already exists, you can skip this step. If not, write the line libpng 2 libpng2 (>= Version) where version is what dpkg told you.

Convert the RPMs to DEBs

Now it is time to make debs from the rpms you downloaded. To do this we use alien. You also need to either do it as root or use fakeroot. I choose the latter. We pass -cd to alien to tell it to make .debs and to include any maintainer scripts:

fakeroot alien -cd bjfiltercups-2.3-0.i386.rpm

fakeroot alien -cd bjfilteri250-2.3-0.i386.rpm

Install the Packages

You should now be able to install the packages. I do so using dpkg like this:

dpkg --install bjfiltercups_2.3-1_i386.deb bjfilteri250_2.3-1_i386.deb

Mark Packages to be Held

A final step is to mark these packages as held so your package manager doesn't remove them to satisfy some other package's dependencies or conflicts. You can still remove them, but your package manager should at least prompt you before doing so. This step depends on your package manager.

For dselect and apt-get:

echo "bjfiltercups hold" | dpkg --set-selections

echo "bjfilteri250 hold" | dpkg --set-selections

For aptitude:

aptitude hold bjfiltercups bjfilteri250

Print

You should be able to setup your printer using the CUPS web interface at http://localhost:631/ now. And printing should work.