Get your USB Canon Pixma MX7600 printer working under Linux

I have a Canon Pixma MX7600, a nice multifunction inkjet.  I have it connected with USB.

If you Google a bit, you’ll find some crazy people trying to use the Mac OSX cups .ppd printer drivers for printers like this.  I got the .dmg file and tried mounting the OSX drivers that come in it.  Even when I did eventually get the silly Apple .dmg image to mount, the .ppd file didn’t work.  Forget that method, and try this one.  I use CentOS 5.4, but this should work on any Red Hat like distro that uses a rpm based installer…

There isn’t any mention of Linux drivers for this particular model, but some later models do have Canon Linux drivers available as rpms.  I didn’t know which one to try, but it seems like a lot of them have the same driver.  I guessed that this driver may support my older printer as well.  So I just picked a printer model at random that looked likely.  I picked the iP4700, and got the latest .rpm driver file,  “iP4700 series IJ Printer Driver Ver. 3.20 for Linux (rpm Packagearchive)”, named cnijfilter-ip4700series-3.20-1-i386-rpm.tar.gz from the Canon Singapore support page (download button at bottom of page).

Unzip it with the gunzip comand, un-tar it with ‘tar-xvf cnijfilter-ip4700series-3.20-1-i386-rpm.tar’, and then change directory into the new directory that tar made.

Then run install.sh from the directory tar made.

This invokes rpm to install a couple of packages, and then gives you the following dialog.  Follow the prompts, plug your printer in when prompted, pick the USB printer that is detected, and give it your own name.

==================================================

Canon Inkjet Printer Driver Ver.3.20-1 for Linux
Copyright CANON INC. 2001-2009
All Rights Reserved.

==================================================
Execution command = rpm -Uvh ./packages/cnijfilter-common-3.20-1.i386.rpm
Preparing...                ########################################### [100%]
 1:cnijfilter-common      ########################################### [100%]
Execution command = rpm -Uvh ./packages/cnijfilter-ip4700series-3.20-1.i386.rpm
Preparing...                ########################################### [100%]
 1:cnijfilter-ip4700series########################################### [100%]

## Driver packages installed. ##

#=========================================================#
#  Register Printer
#=========================================================#
Next, register the printer to the computer.
Connect the printer, and then turn on the power.
To use the printer on the network, connect the printer to the network.
When the printer is ready, press the Enter key.
> 

Searching for printers...

#=========================================================#
#  Select Printer
#=========================================================#
Select the printer.
If the printer you want to use is not listed, select Update [0] to search again.
To cancel the process, enter [Q].
-----------------------------------------------------------
 0) Update
-----------------------------------------------------------
Could not detect the target printer.
-----------------------------------------------------------
Other printers detected
101) Canon MX7600 series (/dev/usb/lp0)
-----------------------------------------------------------
(Currently selected:[0](Update) )
Enter the value. [0]101

#=========================================================#
#  Printer Name
#=========================================================#
Enter the printer name.[IP4700]mx7600
Execution command = /usr/sbin/lpadmin -p mx7600 -m canonip4700.ppd -v cnijusb:/dev/usb/lp0 -E

#=========================================================#
#  Set as Default Printer
#=========================================================#
Do you want to set this printer as the default printer? (yes/no) [yes]

#=========================================================#
Installation has been completed.
Printer Name : mx7600
Select this printer name for printing.
#=========================================================#

The printer now appears:

[root@localhost ~]# lpstat -t
scheduler is running
system default destination: mx7600
device for mx7600: cnijusb:/dev/usb/lp0
mx7600 accepting requests since Fri 29 Jan 2010 08:34:08 PM PST
printer mx7600 is idle.  enabled since Fri 29 Jan 2010 08:34:08 PM PST

I can print a test page, and regular prints.  Yay!  Good job, Canon Singapore.  (Hmm, why doesn’t Canon USA have stuff like this?)

I haven’t tried fancy features, like scanning.  People do get printers like this to scan with sane.

  1. Has anybody found something for the pixma mx7600 network printing that works with Linux?

    It is an awkward printer for drivers, even for OSX is it a bit of a hassle finding the right drivers, and for newer versions of Windows – but I am hanging on to it because I rather like that ADF scanning functionality.

  2. Sorry to multi-post – but also found a deb install for a 4950 at http://www.canon.co.uk/Support/Consumer_Products/products/printers/InkJet/PIXMA_iP_series/PIXMA_iP4950.aspx?DLtcmuri=tcm:14-863357&page=1&type=download.
    This is also a tarball, extracts to another cnijfilter type directory with an install sh.

    However, this tries to detect network printers and fails, no “101” option – only “0” to retry.

    However, I also tried an older mx320 driver, however, this is a recent Mint Linux install – which seems to be hybrid 32/64 bit setup – with 64 bit kernel, mostly 64 bit libs. This means that the older drivers have been compiled only for 32 bit kernels – so that’s not going to work. Perhaps someone with time on their hands could use wireshark to sniff packets between a working machine and the printer and create an open source driver for it. Grrr 64 bit – still an issue for desktop driver gear.

  3. Update – got the first one I mentioned – the 4950 drivers (i4900 series) working including detect. I had to open up the install.sh in an editor, and find the place it was searching. If you go to find the comment “Check if LAN I/F is supported.”, commend out the if and the endif, so it will always set p_local_SUPPORT_LAN=1.
    Then run setup.sh (sudo or root required).

    Before it will work, open up cups (localhost:631), and in cups, select the “Admin printers”, then the printer, and then “Set default options”. There – ensure the paper source is set to cassette.

    lpstat -t shows the printer, and I’ve got a test page out of it!

  4. Hey, good job and thanks for the tips!

  1. No trackbacks yet.