
Good news, Canon MP610 is now fully operational, scanner ready under Linux !
Successfully added some modifications to the sane pixma library (home page here), to get the MP610 scanner start dozing off ... using utilities like scan, scanimage, or Xsane and hopefully many other sane frontends ... You can take a look at a 300 dpi scan, produced using Xsane / Ubuntu.
Using Canon's 'Doze driver, I snooped those little USB packets traveling between the MP610 and the computer, and discovered ... several new USB messages added by Canon, which significantly changes the protocol from previous Pixma MPs. The rest was a matter of adding this new stuff (or what I've understood it was !) into the libsane-pixma driver ... and here it is.

Of course, let me know if you discover any bugs too. Presumably, it is still in a "beta" state.
Important Note: this first MP610 driver version is currently a clone of "what the 'Doze Canon driver does on USB", and gets the same functionalities. That is to say, It scans - only for the moment I hope - up to 600 dpi. The point is that I don't know how to scan - under 'Doze - at upper resolutions ! If someone can explain how to scan at 4800 dpi using 'Doze, I'll greatly appreciate to upgrade the sane driver to do the same !
So here is now the complete stuff. As it is not yet "officialy" integrated into the libsane-pixma library, I've added the letter "u" at the end, for "unofficial". I'll take contact with the libsane-pixma maintainer to request an add-on and probably a new libsane-pixma version package.
Procedure:
Please go to this page of the blog, to install the latest Sane git version of the pixma backend.
This old procedure here below is not to be used anymore, but I've left it here just for reference only.
Please use the pixma backend that is now included either in the 1.0.20 Sane version, or Sane git version.
- Get the full new package that includes MP610: mp150-0.14.0u.tar.bz2, and untar it :
$ tar xvjf mp150-0.14.0u.tar.bz2 - Or you can get only the MP610.0.14.0u.patch file (patch over the latest official libsane-pixma 0.13.1). To use this patch file only, download it and the libsane-pixma 0.13.1 library, untar, navigate into its main directory, and apply the patch:
$ patch -p1 < path_to_MP610.0.14.0u.patch
- Compile:
$ make
or better, if you want to optimize size (1/3 size!) and speed:
$ make NDEBUG=yes - Test
From here, you can use the classic "scan" utility provided with the package. See the pixma home page for details on it. Example:
$ ./scan -x 10 -y 15 -w 51 -h 25 -1 -d 20 -W pixmascan.pnm - Install for Xsane, Kooka, ...
To install for use with sane, you need to copy the libsane-pixma.so file freshly compiled, to replace you current one coming with the sane library (latest one is 1.0.18). Keep a backup of your current one.
So you need first to locate your sane libsane-pixma.so currently installed, depending on your distribution.
For instance, Mandriva and Ubuntu places it at: /usr/lib/sane/libsane-pixma.so.1.0.18
Simply rename: /usr/lib/sane/libsane-pixma.so.1.0.18 to: /usr/lib/sane/libsane-pixma.so.1.0.18.old
And copy your new: libsane-pixma.so to: /usr/lib/sane/libsane-pixma.so.1.0.18
The statements are:
# mv /usr/lib/sane/libsane-pixma.so.1.0.18 /usr/lib/sane/libsane-pixma.so.1.0.18.old
# cp libsane-pixma.so /usr/lib/sane/libsane-pixma.so.1.0.18 - Try it with scanimage, Xsane, Kooka, ...
You're almost finished.
Under root, you can try to run scanimage -L (sane command line scan utility) for instance.
To use Xsane, or Kooka with your non-root user account, read now next section ...
Now that you've installed your new scanner, maybe you've noticed that you can only use it ... as a root user !
This behavior may vary between Linux distributions.
The MP610 is detected by udev, the universal linux hotplug device manager, as a usb device, with a unique MP610 usb address: 04a9:1725
According to your distribution's udev rules settings, udev and some scripts may add this device to a particular group, change its permissions, so that non root users can use it. If no udev rules exist, the device belongs to root, with generally too restrictive permissions for non-root users, to access it.
Here are 2 examples, on Mandriva, and Ubuntu, to adjust the udev rules, groups and permissions, to make the MP610 usable by non-root users:
On Ubuntu
As Ubuntu do not create any udev rule for it, MP610 will default to the root group, with too restrictive permissions so that non-root users won't be able to access it.
Ubuntu sets by default all users to belong to a particular group named "scanner".
So the easiest way is to tell udev to make the MP610 belong to the scanner group too.
Modify the file:
/etc/udev/rules.d/45-libsane.rules
And simply add the 2 following lines in it:
# Canon PIXMA MP610
SYSFS{idVendor}=="04a9", SYSFS{idProduct}=="1725", MODE="664", GROUP="scanner"
To have udev take into account this new change, simply... unplug the MP610 USB cable, wait a few seconds, and plug it back.
Or issue the command:
$ sudo udevcontrol reload_rules
On Mandriva
udev and some Mandriva scripts automatically add the MP610 into the "usb" group. This way, a normal user can access the scanner if he belongs to the "usb" group too. <user> can be added to the "usb" group, either with the mcc, or the following command line:
# adduser -G usb <
Check that <
$ groups
Other distros ...
Based on those 2 examples, you'll need either to set:
- your udev rules and groups, so that:
- udev changes MP610 group to a non root group (modify the file /etc/udev/rules.d/xx-libsane.rules as with Ubuntu)
- your normal user belongs to the same group (see for Mandriva, above).
- or wider permissions for MP610 or all usb devices, but this is less "secure", (r+w for everyone to all USB devices).
For enabling all usb devices to be accessed by anyone, add a udev rule like:
SUBSYSTEM=="usb_device", MODE="0666"
or to open access to MP610 only:
SYSFS{idVendor}=="04a9", SYSFS{idProduct}=="1725", MODE="666"
# udevcontrol reload_rules
Good scans, and fell free to report any comment!