Getting cheap Canon Pixma MultiFunction Scanners working on Linux

In my experience Canon have pretty good Linux support and pretty reliable printers. That’s why when I moved to Canberra recently and needed a scanner/printer to do rental applications and what-not I bought the cheapest Canon MultiFunction I could find, a Canon MP230. However this time around I had a lot more trouble getting the scanner working. Luckily user gwilson on the Linux Mint forums found a solution for the Canon MP280 that also worked on my MP230. His original post can be found here.

This fix is relevant for people with a Canon scanner and have installed cnijfilter and scangearmp already; these are Canon’s printer driver and scanner software available from their Downloads and Support section after searching for your device. I used cnijfilter v3.80 and scangearmp v2.00. They have very kindly provided a deb and rpm package.

And also, try running scangearmp as root:

$ su -c "scangearmp"

If the above works, then this fix will be relevant for you. Now let’s begin, firstly we need to find the vendor and product ID of your Canon device:

$ lsusb | grep Canon

You will see an output like this if you have an MP230:

Bus 001 Device 005: ID 04a9:175f Canon, Inc.

The hexadecimal number 04a9 is our vendor ID for Canon and 175f is the product id for the MP230. Note these two down somewhere we will need them in the next step.

Now we need to find the *sane.rules file, it will be located in /lib/udev/rules.d/ however the filename will vary on different systems. We can use the find command:

$ find /lib/udev/rules.d/ -name *sane.rules

On my system I got the following output:

/lib/udev/rules.d/53-sane.rules

Before editing this file, check that it is the correct file by opening in read-only mode using your favourite text editor – after all the comments at the top it should list a lot of scanner devices something like this:

...
...
# Hewlett-Packard ScanJet 4100C
ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="0101", MODE="0664", GROUP="scanner", ENV{libsane_matched}="yes"
# Hewlett-Packard ScanJet 4200C | Hewlett-Packard ScanJet 4200Cxi | Hewlett-Packard ScanJet 4200Cse
ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="0105", MODE="0664", GROUP="scanner", ENV{libsane_matched}="yes"
# Hewlett-Packard ScanJet 6200C | Hewlett-Packard ScanJet 6250C
# Hewlett-Packard ScanJet 4100C
ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="0101", MODE="0664", GROUP="scanner", ENV{libsane_matched}="yes"
# Hewlett-Packard ScanJet 4200C | Hewlett-Packard ScanJet 4200Cxi | Hewlett-Packard ScanJet 4200Cse
ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="0105", MODE="0664", GROUP="scanner", ENV{libsane_matched}="yes"
# Hewlett-Packard ScanJet 6200C | Hewlett-Packard ScanJet 6250C
ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="0201", MODE="0664", GROUP="scanner", ENV{libsane_matched}="yes"
# Hewlett-Packard ScanJet 3300c
ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="0205", MODE="0664", GROUP="scanner", ENV{libsane_matched}="yes"
# Hewlett-Packard ScanJet 4300c
ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="0305", MODE="0664", GROUP="scanner", ENV{libsane_matched}="yes"
...
...

When you’re sure you have the right file, we can add appropriate line (in the same section as the other scanners) to the file as root modified for your particular case. This is where you need that vendor and device ID of yours from earlier:

# Custom Entry: Canon MP230 >> /lib/udev/rules.d/53-sane.rules
ATTRS{idVendor}=="04a9", ATTRS{idProduct}=="175f", MODE="0664", GROUP="scanner", ENV{libsane_matched}="yes"

Restart and you should be able to use your scanner like a normal person.

This entry was posted in Free Open-Source Software, Hardware on Linux and tagged , , , , , , , , , . Bookmark the permalink. Follow any comments here with the RSS feed for this post. Post a comment or leave a trackback: Trackback URL.

2 thoughts on “Getting cheap Canon Pixma MultiFunction Scanners working on Linux

  1. Pingback: Memasang Printer Scanner Canon MP237 di BlankOn Linux | Perjalanan Tuan Pembual Kepulau Ketiga

Permission to speak granted.