Canon Pixma MP500 Setup for Linux
For some reason I didn’t consider Linux compatibility when selecting the printer I would buy, and regretted it immediately. Preliminary post-purchase research on the internet seemed to indicate that most were not having much luck with the Canon Pixma MP500. I contacted Canon USA customer service stating firmly the case for linux drivers, only to be told with equal resolve that Canon USA simply does not support linux.
More searching revealed Turboprint as a non-free linux driver solution supporting extensive featuresets in the latest printers. Unfortunately, their licensing terms are draconian, a whopping $40 for a single-user license.
Hope came in the form of an Ubuntu forums thread on other printers in the Pixma lineup. From here I was able to jump off to a page dedicated to linux support for inkjet printers on the Canon Japan website. Unfortunately it is in Japanese, of which I can only pick out the kanji. Fortunately, I rediscovered the amazing Babel Fish translation tool, which I recall hearing about in NLP class. (I think I tried it a few years back and was not too impressed. The opposite is the case now.)
The download server for the files you’ll need is ftp://download.canon.jp/pub/driver/bj/linux/. Grab the following two files:
cnijfilter-common-2.60-1.i386.rpm
cnijfilter-mp500-2.60-1.i386.rpm
The guide is also available for download, but it is in Japanese. You can view the very useful Babel Fish’d translation here.
You’ll also need to install libxml1. I use Arch Linux primarily now and pacman denies the existence of libxml1, so I had to build and install from source; your distribution may offer a pre-built package. Lots of branch optimization warnings flashed by, but no compilation errors.
% wget ftp://xmlsoft.org/libxml2/old/libxml-1.8.17.tar.gz
Now if you are using a non-rpm based system like myself, you’ll need to extract the rpm binaries and install them by hand. (With Debian systems the alien command may be used for this purpose.)
% rpmunpack cnijfilter-mp500-2.60-1.i386.rpm % gunzip cnijfilter-mp500-2.60-1.cpio.gz % cat cnijfilter-mp500-2.60-1.cpio | cpio -idv
Do the same thing with cnijfilter-common. This will leave a usr directory, the contents of which you will have to copy to /usr as root.
This is the important part, where I got stuck for a long time. Edit the file /etc/cups/cupsd.conf as root and search for the section containing the comment “The user the server runs under.” Here you’ll need to change
User lp
to
User root
The reason is explained succinctly in the section describing Cif command usage in the translated guide:
When cif command is used, it is necessary in su command to become the super user.
The MP500 ppd (Postscript Printer Description) file specifies the pstocanonij binary from cnijfilter-common as the postscript filter, which is all fine and dandy, except when you realize that pstocanonij always invokes cifmp500, which must be run as the superuser. Printing just fails unless the proper permissions are granted. Since I don’t have access to the source of cifmp500, I’m not sure exactly why it requires superuser privileges.
Plug in the printer, and turn it on. Restart cups. In Arch:
% su % /etc/rc.d/cups restart
Now you can go to the web interface to cups, set up the printer, and print a test page! I know when my test page printed my arm shot into the air, and I WHOOPED! YESSSSSS!!! After fearing the worst - having to boot Windows every time I wanted to print something - I was ecstatic when the ink started to flow!
I found I needed to set the printing margins, and used the method suggested by linuxprinting.org. If you do the same using the alignmargins perl script, make sure the configuration variables are set up properly. I had to make the following change:
my $cut = '/bin/cut';
The alignment guide alignmargins prints out is pretty confusing. I’ll just provide my x and y margin values:
x: 0 y: -50.4
In closing, I won’t leave it unsaid: Shame on you, Canon USA.
Shame, shame, shame.
References:
May 8th, 2006 at 03:19
Thanks man, that was really useful, here is what I did on my machine:
I’m running 32 bit ubuntu on my 64bit dualcore AMD processor (yes I know I should run 64 bit, but as my mainboard only supports 4G of ram, I didn’t think the trade off between the address space and applications was worthwhile), I downloaded the packages from the ftp site as you pointed out, then used alien to covert them to deb packages then installed them using dpkg — no troubles at all so far.
I then tried to run the cifmp500 command, and got a bunch of “library not found error”, it turned out that the shared libraries cifmp500 was compiled with did not have the extra sufficies after .so, So, I manually created symlinks for the shared libraries and everything was fine. Oh, one more thing, cifmp500 was compiled with libtiff3 which is neither available on my machine nor available from the ubuntu package archives, so I just symlinked libtiff4 to libtiff3 — not very safe but so far no problems.
I then ran kcontrol and used the printer setup to config cups to for the MP500 printer, everything was smooth except I got two warnings/errors saying the format of the printer database file is corrupted, however, it was still able to present a list of printer drivers with the new MP500 driver in it.
I also changed the User field to root
However, the problem came when I tried to print a test page from both the kcontrol interface and the cups webadmin interface, With both interfaces, the LCD of the printer would acknowledge a file is sent to the printer — but nothing will be printed. I thought that was really weird, and I also changed the test print page in the interface of kcontrol — it did not make any difference.
As I was getting more frustrated, I tried to switch the printing system from cups to lprng which I’ve used for my old machine and printer with no problems. However, lprng does not have the driver for MP500, so it seemed that the Canon packages were designed to only work with cups. I also couldn’t print anything from the command line using lpr. I uninstalled/reinstalled both cups and lprng for a few times and did not achieve anything. You see, I’ve never used cups before and lpd was the only thing I knew, and I did’t know how to print anything other than the test page using cups.
The breakthrough came when I decided to learn how linux printing and cups really worked, as I was searching for documentation for cups using apt, I saw a small program called xpp — a small X Printing Panel program somehow associated cups, I installed it, and tried to print something — it worked!!
I still cannot print the test page from either the kcontrol interface or the cups admin page, but I don’t really care any more. As long as I can work out how to get lpr working with cups, I’d be happy … any ideas?
Thanks so much for the pointers!
May 10th, 2006 at 21:31
Maybe the cups debugging output will provide a hint. If you haven’t already, in /etc/cups/cupsd.conf try setting “LogLevel debug2″, restarting cups, then running:
Now when you send a print request, you should see lots of debugging output which may indicate what exactly is failing.