Well, after talking about all the USB fixes in the new 2.6.27-9 Linux kernel sported by Ubuntu 8.10 Intrepid, I have to eat a little crow. As I further evaluated Ubuntu Intrepid for adoption as my primary production system, I found that it didn’t properly recognize my USB Epson Stylus CX7800 All-in-One as a scanner. Bummer. This was a problem in earlier versions of *buntu, but was fixed in 8.04 Hardy. Apparently Intrepid broke it again. Sheesh.
Being the dutiful fellow that I am, I went right to the forums to find a solution. While the problem seems to be rather wide-spread, none of the few solutions presented worked. I downloaded updated scanner drivers from Epson Japan’s website but held off installing them until I analyzed the situation. Analysis consisted of checking the extent of the situation and comparing the Intrepid installation against my working Hardy one.
The first smart thing to do is find out if you are in the scanner group with permissions to use a scanner. This is simple enough. In the menus, go to System -> Administration -> Users and Groups. Click on Unlock and type in your administrative password.
Highlight your name and click on Properties, then on the User Privileges tab:
Ensure that the box next to “Use scanners” is checked. If it wasn’t, you must check it, click OK, then logout and log back in so that the user change registers with the system.
In order to see if a USB device is recognized, open a terminal window and type:
This should yield results looking something like this:
As you can see, the Epson CX7800 shows up in the list. So, the device is detected. It also shows up in the list of detected printers under System -> Administration -> Printing, so we know that the printer portion is good to go.
Next it would be prudent to see if the correct libraries are loaded for the scanner. Linux uses the SANE (Scanner Access Now Easy) to interface with scanners. Open Synaptic Package Manager and type “sane” in the search box to see what’s already installed:
Ensure that sane, sane-utils, libsane, and libsane-extras are ALL installed. The Epson drivers are in libsane-extra, which wasn’t initially installed by Ubuntu on my system. (xsane is a scanner GUI that uses sane. While optional, I always install it’s a descent and easy-to-use program.) If you are missing any of these packages, install them and restart udev to reinitialize your hardware by typing this line into the terminal:
sudo /etc/init.d/udev restart
The next step is to see if Ubuntu recognized the scanner. Type the following command in the terminal:
You should get an output like this:
You can see that sane found the scanner on the USB bus. But that isn’t sufficient. The note below the line where it lists the USB scanner recommends trying another command. So, let’s type that one:
No scanners were identified – that’s what I received when I went through this process. I tried using the same commands as a super user (sudo), but no change. Ugh. Time to troubleshoot in earnest. Keep that terminal open, though, because we’ll need the information from the outputs we just received.
The first thing that I did was check the /etc/udev/rules.d/ directory for a 45-libsane.rules file as suggested by one forum poster. It didn’t exist, so I created the file. Then I noticed a 50-libsane-extras.rules file. In viewing it, I found the line I had just added in the other file. Dead end on that approach. However, it reinforced the fact that libsane-extras indeed supports the CX7800 and host of other scanners out fo the box. By all rights, it should work if we’ve done everything I’ve covered so far in this post correctly. Time to dig deeper into the system.
After comparing the Intrepid and Hardy setups (a luxury most users don’t have), I noticed that the file /etc/sane.d/epkowa.conf file was present in Hardy but missing in Intrepid. Hmmm. This was an issue in earlier versions of *buntu and now the solution was looking familiar. So, I copied the file from 8.04 over to the 8.10 installation.
What if you don’t have a spare copy of epkowa.conf laying around? Create it from scratch. In the terminal, type:
sudo gedit /etc/sane.d/epkowa.conf
Then cut and paste the following text in its entirely into the empty file:
# epkowa.conf — sample configuration for the EPKOWA SANE backend
# Copyright (C) 2004 Olaf Meeuwissen
# See sane-epkowa(5), sane-scsi(5) and sane-usb(5) for details.
# SCSI scanners can be configured simply by listing the path to the
# device. For example, if your system claims to have a /dev/scanner
# SCSI device, all you have to do is uncomment the following line:
# In the interest of maintainability, most installations would have
# /dev/scanner sym-linked to the real SCSI scanner device node.
# An alternative way that works for many operating systems and is a
# little bit more generic, is to have the backend probe for your SCSI
# scanner with the following configuration command:
# On systems with libusb, the following line is sufficient to get the
# backend to recognise your USB scanners. It presumes, however, that
# the scanner—more precisely, it’s USB product ID—is known to the
# For all USB scanners that are officially supported by this backend,
# this presumption is true. A list of such scanners can be found in
# For any USB scanner not known to the backend (yet), you may, at your
# own peril(!!), force the backend to recognise and use it via libusb.
# You can do so by the following configuration command:
# usb <USB vendor ID> <USB product ID>
# SEIKO EPSON’s USB vendor ID is ‘0x04b8’ (without quotes). In order
# to find the USB product ID, use lsusb(1) or, on Linux systems, peek
# at the information in /proc/bus/usb/devices.
# A sample configuration for the Perfection 1650 (GT-8200), which has
# a product ID of 0x0110, would look as follows:
#usb 0x04b8 0x0110
# When not accessing your USB scanner via libusb, you may need to use
# one of the configuration commands below or commands that are almost
# the same. These commands typically access the scanner via a kernel
# scanner module.
# Linux had a scanner module until version 2.6.2. As of version 2.6.3
# libusb is your only option. Linux’ scanner module can be loaded via
# the modprobe(8) command like so:
# modprobe scanner vendor=<USB vendor ID> product=<USB product ID>
# If the scanner module already knows the vendor and product IDs, you
# do not have to specify them. If you want to have this done automa-
# tically every time you boot, you can add the above line, except for
# the modprobe command itself, to your /etc/modules file.
# Although not tested with this backend, parallel port scanners should
# be usable. You can configure them as shown below, but I do not know
# much about the details. Information is welcome.
Now save the file.
UPDATE: (Many thanks to saftaplan for bringing this to my attention.) This immediately-following section is not required for Intrepid, but may be for distributions older than Hardy:
But remembering my experience from a year ago in Edgy, just copying the file over wasn’t sufficient because a key line is commented out. If you are running a distribution older than Hardy and don’t already have the file opened by creating it above, then edit the file as a super user by typing this in the terminal:
sudo gedit /etc/sane.d/epkowa.conf
I found and changed the line that looked like:
#usb 0x04b8 0x0110
to match my scanner. The first hexidecimal number represents the manufacturer. 04b8 is Epson’s code and so doesn’t need to be changed. The second number is your scanner model. You can get this from the output of your sane-find-scanner command in the terminal. In my case, that command’s output had “081f” after “product=”, which is the code for the CX7800. That’s the code that goes last on the above line. After deleting the ‘#’ in front of the line to uncomment it and putting in my information, the line now looks like:
usb 0x04b8 0x081f
I then saved the file and exited gedit.
So, what did we just do? Simply stated, we jammed our scanner into the operating system’s face by explicitly telling the USB subsystem to recognize the device listed as a scanner. Sounds harsh, but it worked a year ago in the Edgy and Gutsy Kubuntu distributions.
After saving the file, reboot your system. After it comes back up, open a terminal again and type:
Your output should look something like I illustrated near the top of this post again. Now type:
This time you should see something like:
Success! The system recognizes our scanner. Now you can go into a scanning program like xsane or gscan2pdf and it should find your Epson scanner.
I’ll say one more time that the necessity for this procedure doesn’t make sense to me. libsane-extras explicitly supports a host of Epson scanning devices. All I can imagine is that the USB subsystem in Ubuntu 8.10 Intrepid, while fixing the automatic mounting of removable media, regressed on the correct implementation of USB scanners. It seems that perhaps the lessons learned in Edgy and Gutsy weren’t learned as well as they should have been. Sigh.
But in any event, this procedure should get you up and scanning again in 8.10 Intrepid. Mine works now, which brings me a step closer to switching over to Ubuntu 8.10 Intrepid for my production system.