The essay covers one way to install an
Epson Perfection 1670 scanner under RedHat Linux Fedora Core 1.0 and 2.0.
Perfection 1670 is a USB plotter. It has 4 buttons on the front
panel, a film scanning feature, is color capable. I think the
1670 is going to be a winner, and I think Fedora is also going to be a
winner, but I found the installation overly complicated so I am writing
up how I did it.
My asumption is that you have knowlege of RedHat Linux, but not necessarily knowlege about other linuxes or non-linux UNIXes. Furthermore, I assume you have Fedora Core 1 or 2: Fedora Core 3 has a much simpler procedure.
There are several layers of software that have to work together for
the 1670 to work properly. There is some software that actually
goes in the scanner (this is a Good Thing, because if bugs are found in
the scanner internal software, then it will be easy to fix.
However, the implementation could be better). There is a device
driver for USB (actually, there is more than one). There is a low
level interface to the scanner called the SANE backend.
There is a high level interface called SANE (Scanner Access Now
Easy) and then there are applications which use SANE. The
software can be thought of as a stack:
|SANE based applications
||User interfacce, save images in
different formats, copy images, FAX
||Implements a virtual scanner so
that any graphical application can connect to a real scanner (or a TV
camera or a digital camera, etc.)
||A SANE backend. Implements
the interface to the real device. Real device dependencies are
captured here. The snapscan component actually handles several
scanners which are similar to the Epson 1670. There are many
other SANE backends
|Kernel USB device driver
|Handles discovery and
communication over the USB. I lump the /dev/usb/scanner0 device
in with this component. However, the scanner module is no longer
available under the 2.6 Kernels; you must use libusb.
||This component is the software
inside the plotter that makes it function. It has to be
downloaded into the plotter each time the plotter is turned on (and
maybe more frequently).
This procedure works from the bottom up. Remember, there is
more than one way to do it.
The plotter firmware comes in a file called ESFW30.BIN,
which apparently is only available if you install the software on the
CD-ROM provided with the plotter. Unfortunately, the software
only installs under MS-Windows (it might work under WINE, I didn't try
that), and then you have to copy the software from the Windows machine
to the linux machine. Since I hope you will find this procedure
odious as I do, I took the liberty of copying the file to my web
. As root, I copied this file into
/usr/share although you have a lot of flexibility on this
score. Note this location, as you will need it when you create
To load the module, there are several ways to do it. For testing
purposes, you can use modprobe directly (as root):
modprobe scanner vendor=0x04b8 product=0x011f
When you are happy with your module, you can make it load
automatically at boot time by adding the line
options scanner vendor=0x04b8 product=0x011f
to the file
There is another component, called libusb, which provides the same functionality but it works in user space. I am not sure I understand the differences between regular kernel support and libusb. My intuition tells me that libusb will be more reliable because it works in user space: if anything goes wrong, it will crash the application but it won't crash the system. Also, libusb will be easier to install and modify, and it still has to use the kernel at some point anyway.
I did have to create a device for the scanner,
I did that as root with the command
mknod /dev/usb/scanner0 c 180, 48
The c means that this is a character (unbuffered, or serial) device. The 180 is the major device number and the 48 is the minor device number. The major and minor device numbers have meaning to the kernel but unless you are a kernel developer, all you need to know is 180 and 48 are the numbers to use.
You can protect your scanner so that only some people may use it by
creating a scanner group using addgroup and then adding the people
authorized to use the scanner to that group. Or you can simply
give everybody and anybody access to the scanner by giving the command
(as root again)
chmod a+rw /dev/usb/scanner0
Snapscan is a SANE backend. In Fedora Core 2, version 1.0.13-7
is supplied so the installation is a little simplified. I
upgraded from Fedora Core 1 to Fedora Core 2, so it just worked.
(20-Sep-2004) The sane-backends 1.0.13 is available in FC2, so if
you running Fedora Core 2, then skip to step 6 below. As of this
(8-Feb-2004)(16-Apr-2004), RedHat Fedora Core 1.0 included
sane-backends-1.0.12-4, which, I am told, does not support the Epson 1670 (although
I am not sure why). However, version 1.0.13 does.
Version 1.0.13 is not available as an RPM (which also means it is not
available through yum yet) so I had to get it as a tarball and install
it that way. These instructions are probably applicable to
sane-backends-1.0.14 as well.
/etc/sane.d/snapscan.conffile will be saved as
/etc/sane.d/snapscan.conf.rpmsavein case something goes wrong.
/etc/sane.d/snapscan.conf. You have to make the following changes:
# Epson Perfection 1670
usb 0x04b8 0x011f
# For USB scanners also specify bus=usb, e.g.
usb 0x04b8 0x011fdirective is sufficient and the libusb directive is redundant and should be removed.
scanimageis a command line interface to the sane backends, so technically, it is a sane front end, but it is bundled with the sane-backends for testing purposes. system
/tmp, which you can view with
eog(or other PNG viewing program such as mozilla, etc.). This tests that most of the libraries were installed correctly
|50 DPI||150 DPI||300 DPI||450 DPI||600 DPI||900 DPI||1200 DPI|
Some additions/corrections to your site:
- With kernel 2.6 you can only use libusb. The "scanner" module is obsolete and is no longer present in the 2.6 kernel series.
- When using libusb you don't need (and indeed shouldn't have) any device entry like "libusb:004:003 bus=usb" in snapscan.conf. The only important entry is the one containing the USB ID of your scanner, e.g. "usb 0x04b8,0x011f" for the Epson 1670.
- 900 and 1200 dpi don't work for the 1670. These resolutions are no longer supported by the backend. Instead, 800 and 1600 dpi have been added in the backend. There are still some problems reported with 1600 dpi (interlaced images), but 800 dpi should work fine. You need to upgrade to sane-backends 1.0.14 to get the new resolutions to work.
Fedore Core 3 has all of this software prebuilt for you. All you have to do is install it using yum or rpm.The images of Randall Bruce Racus is © 2004 Jeff Silverman and all rights are reserved. The text of this document is available to all under the GPL.