So for Christmas I bought myself Unclutter Your Life in One Week by Erin Doland of unclutterer.com. One of the things she suggests in the book is to create a personal digital library of documents, scanning in (most of) the papers you’ve got lying around and shredding and recycling the paper copies. Actually, I think it’s a pretty awesome idea – I had a neatly-bundled, chronologically-ordered stack of SprintPCS phone bills from 1999. I’m now on my 3rd phone carrier since Sprint – so why was I letting that useless junk take up my space?
One complication Erin’s advice introduces is that scanning a couple filing cabinets’ worth of papers you do want to keep some record of with a typical flatbed scanner is time-consuming and not exactly fun. Erin suggests using an ADF (Auto-Document Feeder) scanner like the Fujitsu ScanSnap – problem is, for $1100+ I’d be substantially towards my way at buying another car. Does the ScanSnap work in Linux? No idea.
Then I started to notice that many $200 and under multi-function inkjet printers had ADFs built-in. I have a non-color laser jet which is really great, but I can’t print in color or print photos or do crafts or any of that sort of thing. Also, it is not a network printer, wired or wireless, so it is in my living room so the USB cable is reachable. The Canon MX860 seemed a good answer to all of this, and searching around on the internet seemed to indicate a basic level of Linux compatibility, so I decided to give it a shot.
When I got my MX860, I plugged its power cord in and turned it on. Nothing. I went through the menu, saw it has a wireless access point called BJNPSETUP, and tried to connect to it – nothing. I was a little afraid that I needed a Windows or Mac to run a setup program just to tell the printer my access point’s name and key.
Now I don’t own a single Windows or Mac machine. I have an old Mac G3, the smooth, forgiving curves of which cradle my feet under my desk at work (I think it was last booted in 2006.) I didn’t want to have to bring the MX860 (a behemoth compared to my laser printer) into work just to do the initial setup The instructions that come with the MX860 are non-existent for Linux, but I think it’s equal-opportunity suckage because the instructions that come for Windows and Mac are really terrible.
No worries, though. You don’t need a Mac or Windows to complete initial setup of the MX860. But you will need an ethernet cable:
Canon MX860 Initial Setup
- Connect your MX860 directly to your wireless access point via an ethernet cable. If the MX860’s front ‘Canon’ logo is facing you, the ethernet jack is in the rear on the right side – there’s a white pull tab in it.
- Turn the MX860 on. Once it boots up:
- hit the ‘Menu’ button
- navigate 3 icons over using the right arrow button to the ‘Settings’ icon and hit the ‘OK’ button
- now navigate 2 icons ove rusing the right arrow button to the ‘Device Settings’ icon and hit ‘OK’
- Navigate four items down to select ‘LAN Settings’ and hit ‘OK’
- Select the first item in the next menu, ‘Change WLAN/LAN’, and hit ‘OK’
- Turn on the wired ethernet by selecting the second button ‘Wired LAN Acive’ on the screen.
- Turn the MX860 off and back on again. You might not need to, but it’s a reliable way to get the MX860 to pick up an IP address.
- Now that the MX860 is back on, you need to get the IP address:
- hit the ‘Menu’ button
- select the ‘Settings’ icon and hit the ‘OK’ button
- select the ‘Device Settings’ icon and hit ‘OK’
- select ‘LAN Settings’ and hit ‘OK’
- select ‘LAN Settings List’ and hit ‘OK’. The IP address of the MX860 should be listed there – write it down.
- Go to the IP address in your browser’s URL bar. You’ll see a ‘Network Configuration’ UI as shown below:
- Click the ‘Advanced’ button in the lower right of the screen. Go to the ‘Wireless LAN Setting’ button on the left navbar and fill out the details of your wireless network:
- If you have a MAC address filter on your access point, make sure you add the MX860’s (WIRELESS, not wired) mac addy to your mac filter. I was halfway there – but by accident copied down the wired MAC instead of the wireless MAC and had a very confusing 10-15 minutes following that. 🙂
- Go back through the LAN settings menu as detailed above, and turn the wireless LAN on.
- Turn the MX860 off, then back on. Check your access point’s DHCP clients list – you should see it there.
- On your Fedora machine, download the Canon linux drivers from Canon EU – download the RPM version labeled ‘Printer Driver for Linux (rpm)’.
- Install the drivers. You’ll get a tar.gz, so in a terminal in the directory you downloaded it to, run tar -zxvf cnijfilter-mx860series-3.10-1-i386-rpm.tar.gz. Then, cd into the cnijfilter* directory, and run the install.sh script inside by running ./install.sh.
- The MX860 has a USB cable. Plug that USB cable into your Fedora machine. The drivers will automatically be detected (you’ll see a pop-up message telling you as much.)
- In a terminal, run the following command as root to verify your Fedora computer can see the printer over wireless: /usr/lib/cups/backend/cnijnet
- Go to your Fedora computer’s CUPS setup by visiting http://localhost:631 in a browser and adding the MX860. It should already be in all the menus:
- Plug out the USB cable. You should be ready to print wirelessly.
- Connect to the printer via USB. Yeh, it defeats the point of wireless. But it works. Here’s the Canon MX860 PPD file, extracted from the drivers, if you care to set it up this way.
- Make your x86_64 machine multilib and install the x86 drivers on it.
Okay now your MX860 is on your wireless network.
Setting up a 32-bit client
Now you’ve got the MX860 on the wireless network, but what good is that if you can’t connect to it from your Fedora laptop or desktop? The Canon drivers are 32-bit only, so getting them to work on a 32-bit machine is obviously a lot cleaner and nicer than on a 64-bit machine.
Setting up a 64-bit client
So as previously mentioned, the Canon drivers are 32-bit only. The license posted on Canon Australia seems to claim they are GPL – well, I tried to build them for x86_64 using source download which handily included the spec and SRPM, but, unfortunately the sources include a binary library with no included source so it’s not possible to build the driver for x86_64. (I’ve been meaning to write Canon a note about that….)
So, you have a couple of options if your machine is x86_64:
Since I only use the MX860 for scanning with my x86_64 machine, I simply use a USB key plugged into the MX860 to save the scans to, then I transfer them to my x86_64 machine by plugging the USB key into it.
Anyway I hope this guide has been helpful. If anyone has better ideas on getting the drivers to work on x86_64 or convincing Canon to fix their source I’d love to hear them.
Update 17 Apr 2010
One option I totally forgot to mention that I’ve been using with my Fedora 12 laptop:
- Use the wired ethernet connection on the MX860. Make sure you turn off wireless and turn on wired in the settings menu on the MX860’s screen. Note the wired IP address.
- Install the Fedora ‘cups-bjnp’ package. (sudo yum install cups-bjnp -y)
- Go to System > Administration > Printing (you’ll need to enter your root password)
- Hit the ‘New’ button in the upper right corner. If you click on the ‘Network Printer’ disclosure triangle in the left side of the dialog, wait 30 seconds or so the printer should just show up, or you can opt to instead search for the printer at the IP address you noted in step 1 above.
- Pick the printer via manufacturer/model on the screens that follow. Tell it that your printer is the Canon Pixma iP4600.
- Finish. Print a test page. Yay it should work.
In Ubuntu it is possible to use the 32-bit printer driver with 64-bit by using ' sudo dpkg -i –force architecture' , hopefully something similar works in Fedora too.
Canon scanner driver doen't work with 64-bit (but there is something better, read on)
For network printing you need the cups-bnjp protocol http://sourceforge.net/projects/cups-bjnp/
And finally sane 1.0.20 is delivered with bnjp and snae-pixma for your MFP, so sane should work over network for scanning. Maybe you need to install latest sane-git.
You're a hero. Wish I had a good answer on x86_64; note that since they are the GPL holders, unless they've copied someone else's GPL code in, they have no obligation to release that binary bit. (If they've copied someone else's binary code, then probably they do…)
Great step-to-step guide!
I am not not sure if I understood though… Is this Canon device is also a scanner that you will use for your batch digitization project? I might want to get rid of old paper docs as well, one day… 🙂
Hi Martin, it is! It has an auto-document feeder on the top. It writes the PDFs direct to a USB stick. You can also scan over wireless but since you have to get up and shuffle papers every now and then I don't see the point to that as much.
This is really cool! thanks! 🙂
The ScanSnap does work in linux. Not as good as when connected to windows though. Fujitsu has no intention of making a linux driver, I asked. The scan button on the machine does nothing, you need to scan using software which is slower. A little googling will give you the answers.
I set it up for my wife's business when I moved her to Ubuntu to protect all her customers' personal info. She no longer notices the differences and is quite happy with it.
I would like to recommend you try gscan2pdf to do the scanning and organization. My roommate archived all his paper documents a couple of years ago using this software. Should be as simple as 'yum install gscan2pdf'
Thanks for the tip! Actually, though, for the MX860 it's not strictly necessary because the MX860 provides the scans in PDF format already – if you initiate the scan from the MX860 itself. gscan2pdf would definitely be useful if you're scanning from the computer rather than from the scanner. So thanks 🙂
[…] How to set up the Canon Pixma MX860 with Fedora […]
My long term experience with Canon and Linux is bad. Few year ago I wrote similar artical for Pixma IP 1500. It was one of the most visited articles I had, but it was definitely not straight forward. Thinks are better today, but IMHO there are producers that support their products in Linux better than Canon. Thanks for this article, maybe one day Canon will change their approach and we will not need such a stuff.
Printing and Scanning from Linux doesn't seem to be a problem, indeed.
Did anyone suceed in *faxing* from Linux?
On Windows the Driver installs a FAX Printer to directly fax from any application. Would be grat to have such a virtual printer in Linux also.
Thanks for any hint.
Hi Bert! I'm not sure if faxing works in Linux or not. I don't have a phone line in my apartment so I don't have any way to test it. 🙁
I just got my MX860 ( Saturday) I tried to set it up yesterday and it gave me a headache I don't have a wireless internet service just yet but it does have the wired option. I mainly bought this type of printer because I want to scan my docs and be able to use a duplex feature. I tried using the scanner yesterday and it did not work it kept giving an error saying that the duplex option was not with that paper size (8.5" x11"?) I thought about uninstalling the software and reinstalling it would that be an option? Did you have problems with the scanner?
Sorry for the late reply, I just noticed your comment.
I've noticed duplex scanning only works with roughly letter-sized papers. E.g., if I try to scan my Citibank credit card statements, they will not work in duplex mode because they are much longer than 11". And I say roughly letter-size because I've duplex scanned pages from Real Simple magazine (much larger than letter-size) and letters smaller than 8.5" x 11" as well.
Uninstalling and reinstalling the software won't help. Maybe upgrading the firmware will, but I don't know if Canon offers firmware updates for this printer. It's an idiosyncracy of the scanner I think we have to live with. 🙁
What in particular are you trying to scan? Are you trying to duplex something of a specific size and it's not working?
So… I can get the printer to show up over USB, and it works remotely from The Machine The Office Gave Me, but I can't get it to switch from wired to wireless when I unplug the USB. cnijnet just exits silently when I run it- whether the printer is plugged in or not. Any ideas on how to make that switchover?
Also, this F12 box appears to have a very different CUPS web gui than the old one you've got in your screenshots 🙂
Ah yeh, the CUPS gui in the screenshots is from when I ran through the process a second time to document on my F9 box since it didn't already have the printer installed. So it's an older CUPS.
I'm not entirely sure what you're trying to do? Is the printer itself not switching from wired to wireless? Or what? Can you walk me through a case where you're trying to use it? (I'm not sure why you're using it plugged in then plugging it out?)
I'm trying to use the printer wirelessly. I know it works wirelessly because it is setup with The OS That Shall Not Be Named. 🙂 So, it is already on the wireless network.
With my F12 box, I grabbed the rpm and set it up (steps 1 and 2). There are then problems with steps 3, 4, and 5 🙂
Step 3 of 'set up a 32 bit client' says 'plug the printer into the computer', at which point the printer is automatically configured. The automatically configured printer makes Step 5 redundant, so I have tried steps 4 and 5 both with and without the automatically configured printer; doesn't seem to make much difference. Have also tried removing the USB cable after step 3, after step 4, and after step 5.
When I do step 4 (run cnijnet) I get nothing- silence. Same result whether or not USB is plugged in, and whether or not the automatically configured printer is there or has been deleted. What output do you see that verifies you can see it over wireless?
Also, in step 5, I have to choose local, network printer, etc., before seeing a list of printers. If the USB is still plugged in, I get four different 'local' printers that could be the MX860; none of them seem to actually work over the network 😉 Did you get four? one?
Maybe one question that could help puzzle things out here: if you do system->administration->printer, and right-click properties on your printer, what Device URI do you see? And what make/model does it self-report as?
Thank you very much for sharing this information! It saved me a lot of time. I was able to configure printing without having to hook up the USB connection. The only thing I had to do differently from your instruction was to disable the firewall during the initial configuration (Steps 4 and 5). Once the printer is detected and configured in CUPS, the firewall can be turned back on.
If the firewall rules are set to allow the cannon network ports (8610-8614, TCP and UDP), then the firewall can be left on. I learned this when setting up the network printing feature
The current fedora release of the pixma scanner (as of 07 Feb 2010) did not work (/usr/lib/sane/libsane-pixma.so.1.0.20); while it detected the scanner, when I tried to scan I would get an "operation cancelled" message. I had to download the latest sane GIT snapshot and build (libsane-pixma.so.1.0.21).
This was most helpful to me. I struggled for a long time until I opened up the firewall.
Once I did this the printer was on line.
In my previous post, I should have said I learned about the firewall settings while setting up the network SCANNING feature, not PRINTING. Sorry.
ah-ha! Robert's tip was the winner. I'd edit step 4 to say:
* run cnijnet. If running the command doesn't print anything, check your firewall and change the settings to enable access on ports 8610-8614 (which can be done via system->administration->firewall).
Thanks so much to both of you.
I made it to step #4 but when I go to LAN settings list, there is no IP address listed. It also says the connection is inactive, but I'm not sure if that means anything or not yet.
I'm having the same problem. Got to step #4 and my connection says "inactive". Did you manage to solve it? Any help would be appreciated!
I've got printing working fine on CentOS 5.4, but I can't get my machine to recognize the scanner. Neither xsane nor gscan2pdf can find the scanner.
I have the following installed:
I have opened up the udp and tcp ports to any other machine:
ACCEPT tcp — anywhere anywhere state NEW tcp dpts:canon-bjnp1:canon-bjnp4
ACCEPT udp — anywhere anywhere state NEW udp dpts:canon-bjnp1:canon-bjnp4
which might seem risky, but this printer sits on a private home network with no real IP addresses, so it should be safe.
Note that in CentOS, the libsane-.so libraries live in /usr/lib/sane, but the scangearmp* rpms installed its libsane-* libraries in /usr/lib. So, I simply moved those libsane-*.so libraries down to /usr/lib/sane.
Is there something else I should be doing to inform the sane mechanism that these new Canon libs/drivers have been installed?
I actually got the Canon executable 'scangearmp' to work with the scanner over the USB port with the CentOS 5.4 setup described above.
It just doesn't work wirelessly.
I tried temporarily dropping my firewall in case there are other ports I need to open for the scanner, but … no dice.
Thank you so much. Especially the multilib for x64 system. I used getlibs-all from this post http://ubuntuforums.org/showthread.php?t=474790. Works great! cheers!
Thanks so much for writing this up! Just moved and forgot how to get the printer setup on a new network. Instructions worked like a charm. Really appreciate it.
One note; for Fedora 13 with selinux, you have to create a local policy module (see http://docs.fedoraproject.org/selinux-faq-fc5/#id… that allows printing to the wireless printer.
Just try printing, you'll get an avc denial warning which you can copy to the clipboard to generate a local policy (following the directions in the above link), after which you can print wirelessly.
First if your CUPS cannot find the printer for some (idiot reason) canon tools just looks the printer on the same subnet as your eth0.
No one in Canon thinks that your printer would be on different subnet!?
Then there wasn't any documentation about the format of /usr/lib/bjlib/cnnet.ini.
So had to change my machine to same subnet as the printer to found it. Syntax of cnnet.ini is following:
# cat /usr/lib/bjlib/cnnet.ini
# This file is cache for canon network printers.
IPADDR_CACHE 00-00-85-ee-1e-f0 10.0.254.12 UNICAST
Now my tools does something but, every page I've tried to print just hangs and the printer thinks for ages after that. It just prints a little bit from the start..
Any ideas on that?
Dunno what happened but it started working, maybe it was iptables blocking those ports.
Now I have problems with scangears, which is similar. It just sends packets to your eth0's broadcast address. If no answer => No scanning!
Does anyone know a way to tell scangears that the printer is at IP or that MAC and then it would use cnnet.ini.
Thanks particularly for the Canon EU link. I downloaded the Linux bundle for my MX350 and then installed and connected to my printer via the wireless interface without any difficulty.
Unfortunately it only partly worked – black text but no graphics. So THEN I read the guide that came in the package – both English and French are provided – and un-installed, set SELinux Permissive and re-installed. Everything again installed and connected without a hitch but now it prints text and color graphics.
Haven't ran exhaustive test and haven't tried the scanner function yet but could not have gotten this far without your post. Thanks!!!
i have the same all-in-one and the printer and the fax got installed but the scanner won't do have any solutions?
MX870 on Fedora 14 x86_64
The easiest way to get the printer and scanner working was to:
1) Download the files from Canon:
Search for "MX870 series ScanGear MP Ver. 1.50 for Linux (rpm Packagearchive"
and download scangearmp-mx870series-1.50-1-i386-rpm.tar.gz
search and download cnijfilter-mx870series-3.30-1-i386-rpm.tar.gz
2) Untar the files with "tar zxf "
3) Note that you don't get an rpm file, but a directory with a script and two
4) You cd into the xxx.rpm directory and execute the script:
5) If you are on a 32 bit Linux system, the program should execute. – see step 9
6) If you are on a 64 bit Linux system (or 32 bit without a lot of libraries
already installed), the script will complain that you don't have such and
7) To find missing libraries, the problem is that the library names given
by the ./install.sh diagnostic messages are different from the 'package'
names found in various repo depositories. This step requires some research
but I have given some clues further below.
If you are missing a library, such as:
libusb-0.1.so.4 is needed by scangearmp-common-1.50-1.i386
Use the utility 'repoquery' to find the name of the package as:
# repoquery -a libusb
If repoquery does not find the package, use Google to find the name of the
package that contains the library. It isn't difficult.
8) Even though you may be running on a 64 bit system, DON'T choose the x86_64
library to install, but:
# yum install libusb-0:0.1.12-23.fc14.i686
This is because the Canon proprietary libraries were compiled against that
32 bit public domain library.
9) Continue the process of finding and installing GNU libraries and executing
./install.sh until the script actually executes.
It will ask some questions – where is the printer – USB or network, etc.
Most of the questions will have the answer in brackets. Just hit return
to accept that answer.
10) The ./install.sh script creates files in /usr/local/bin
If you execute:
The output consists of packages that were installed in this step.
11) The cnijfilter-mx870series-3.30-1-i386-rpm printer software
is installed in the same way (more -386 libraries to install though)
12) To 'add printer', use http://localhost:631/ cups. (Don't forget to log on as an administrator – or cups won't find your printer).
Thanks Bob, that's really helpful!!
To use the scanner:
run scangearmp – the executable is in /usr/local/bin and this directory is probably in your execution PATH.
It is looking for theme engine "clearlooks" in module_path and also
pk-gtk-module (libpk-gtk-module.so) and
The scangearmp will run without those libraries, but it really looks crappy on your screen.
yum install libcanberra-gtk2.i686
yum install PackageKit-gtk-module.i686
yum install clearlooks-compact-gnome-theme.noarch
yum install gtk2-engines.i686
There are no complaints from the command line now, but the screen dialog still looks crappy. (but maybe not quite as crappy as before)
So far, the scanner is not found by other Fedora scanner utilities, such as Simple Scan.
scangearmp is not so badh. You can add it to your Application menus by creating a Custom Application Launcher
Thanks for the write-up. I recently had to reconfigure my wireless network, which killed the printer connection. You can't use the printer keypad to enter new wireless network info (why not, Canon, hmm?) and you cannot reconfigure it without installing bloatware and use a USB connection (why not, Canon, hmmm?). Thanks to your instructions, I put it on the wired network, accessed the web interface, and entered the new wireless network info – done. So simple. Googling for help changing the wireless network settings for this printer did not reveal this info, making me wonder whether it's even documented (why not, Canon, hmmm?). Appreciate your info.
After installing with USB as described, you can modify the printer through the CUPS web page to use the network instead.
Go to http://localhost:631/printers/
Click on the link for your printer.
Select "Modify Printer" from the drop down menu.
Select any of the network printer options.
Delete everything in the text box. For example if you picked "IPP", the text box will say "ipp", you tehn delete "ipp".
Enter "cnijnet:/00-1E-8F-FF-FF-FF" where "00-1E-8F-FF-FF-FF" is the MAC address of the printer. The MAC address can be found from the printers display panel in "Device Settings->LAN Settings->LAN Settings list". Scroll all the way down past the IP addresses. The same should be possible with the printer in wireless mode, you just need the wireless MAC address which will be under "WLAN Settings list" instead.