1328 lines
70 KiB
Plaintext
1328 lines
70 KiB
Plaintext
The Scanner HOWTO
|
||
|
||
Howard Shane
|
||
|
||
<hshane[AT]austin.rr.com>
|
||
Revision History
|
||
Revision 1.1 2004-05-16 Revised by: jhs
|
||
Libusb and kernel 2.6-series updates, clarifications
|
||
Revision 1.05 2004-01-15 Revised by: jhs
|
||
Miscellaneous errata and updates
|
||
Revision 1.0 2003-08-19 Revised by: tm
|
||
Initial release, reviewed by LDP
|
||
Revision 0.04 07-03 Revised by: jhs
|
||
Clarified, revised and edited after inviting feedback from participants of
|
||
the SANE-devel mailing list
|
||
Revision 0.01 06-03 Revised by: jhs
|
||
Completed draft.
|
||
|
||
|
||
This document was written to document the steps necessary for access and use
|
||
of a photographic scanner device on a system running Linux.
|
||
|
||
-----------------------------------------------------------------------------
|
||
Table of Contents
|
||
1. Introduction
|
||
1.1. Copyright Information
|
||
1.2. Disclaimer
|
||
1.3. New Versions
|
||
1.4. Credits
|
||
1.5. Feedback
|
||
1.6. Conventions Used in this Document
|
||
|
||
|
||
2. General Support and Interface Type
|
||
2.1. SCSI Scanners
|
||
2.2. USB Scanners
|
||
2.3. Parallel Port Scanners
|
||
2.4. IEEE 1394 (Firewire??, i.Link??)
|
||
2.5. Operating System Support
|
||
2.6. USB Scanners and Libusb
|
||
2.7. Linux Kernel Support of your Scanner Device
|
||
2.8. Parallel Port Scanners
|
||
|
||
|
||
3. Making and Accessing the Scanner Devices
|
||
3.1. Device Filesystem and Udev
|
||
3.2. Creating Devices Manually
|
||
3.3. Groups and Permissions
|
||
|
||
|
||
4. SANE
|
||
4.1. Getting SANE
|
||
4.2. Configuring SANE
|
||
|
||
|
||
5. Testing Your Scanner
|
||
6. SANE Frontends
|
||
7. Troubleshooting
|
||
7.1. Help, my scanner cannot be found by scanimage or xsane!
|
||
7.2. Help, I'm not sure my USB hardware is working!
|
||
7.3. Help, scanimage or the frontend I am using identifies the wrong
|
||
device!
|
||
7.4. Help, I can only access my parallel-port scanner as root!
|
||
7.5. Help, I have an Acme Whizzbang?? or other model scanner and you
|
||
haven't addressed my particular problem!
|
||
|
||
|
||
8. Gnu Free Documentation License
|
||
|
||
1. Introduction
|
||
|
||
This document was written to assist the Linux user in setting up a raster
|
||
image scanner device, including flatbed, hand-held, video- and still-cameras,
|
||
frame-grabbers and so on. It does not address how to use the available
|
||
software tools to achieve a particular photographic result or to utilize your
|
||
scanner device's features to the fullest extent. For that information please
|
||
consult the application home pages referenced in the text and the
|
||
manufacturer's information that accompanied your hardware.
|
||
|
||
Finally, this document does not answer the question "What type of scanner
|
||
should I buy?" The answer varies depending on what you are looking for in a
|
||
scanner device. I suggest looking at the supported hardware list link in
|
||
Section 2 and also [http://www.xs4all.nl/~ljm/SANE-faq.html#buying] this link
|
||
within the SANE-project FAQ.
|
||
-----------------------------------------------------------------------------
|
||
|
||
1.1. Copyright Information
|
||
|
||
This document is Copyright 2004 Howard Shane.
|
||
|
||
Permission is granted to copy, distribute and/or modify this document under
|
||
the terms of the GNU Free Documentation License, Version 1.2 or any later
|
||
version published by the Free Software Foundation with no Invariant Sections,
|
||
no Front-Cover Texts, and no Back-Cover Texts. A copy of the license can be
|
||
found in Section 8.
|
||
-----------------------------------------------------------------------------
|
||
|
||
1.2. Disclaimer
|
||
|
||
No liability for the contents of this document can be accepted. Use the
|
||
concepts, examples and other content entirely at your own risk. As this is a
|
||
new edition, there may be technical or other inaccuracies that may result in
|
||
system failure, destruction of your hardware and the loss of your
|
||
irreplaceable data. Proceed with caution and be aware that although errors
|
||
are unlikely, the author can nonetheless accept no responsibility whatsoever
|
||
for them.
|
||
|
||
All copyrights are held by their by their respective owners, unless
|
||
specifically noted otherwise. Use of a term in this document should not be
|
||
regarded as affecting the validity of any trademark or service mark.
|
||
|
||
Naming of particular products or brands should not be seen as endorsements.
|
||
-----------------------------------------------------------------------------
|
||
|
||
1.3. New Versions
|
||
|
||
This is the initial release.
|
||
|
||
The latest version of this document can be found [http://www.hshanemd.net/
|
||
docs/HOWTOS/Scanner/] here.
|
||
-----------------------------------------------------------------------------
|
||
|
||
1.4. Credits
|
||
|
||
I would like to thank Oliver Rauch, Henning Meier-Geinitz, Jonathan Buzzard,
|
||
Laurent-jan, Jochen Eisinger and others who participate in SANE development
|
||
and/or contribute to the SANE-devel mailing list, without whose input this
|
||
project would have been difficult if not impossible to perform with any
|
||
measure of quality-control. I would also like to thank the many individuals
|
||
who have taken the time to email me new information and corrections.
|
||
|
||
Also I would like to thank Marla for graciously tolerating all the time I've
|
||
spent banging on the keyboard working on projects such as this. You're the
|
||
greatest.
|
||
-----------------------------------------------------------------------------
|
||
|
||
1.5. Feedback
|
||
|
||
Please send any additions or comments pertaining to this document to the
|
||
following email address : <hshane[AT]austin.rr.com>. As this is the first
|
||
release I am particularly interested in any errata, so don't hesitate to
|
||
contact me if you know of something I have wrong or needing updating. Also
|
||
let me know if you know of any shortcuts, tools or bits of information that
|
||
may help hapless users that you think should be included. I apologize in
|
||
advance, but I cannot answer any technical questions or "plz help me" pleas
|
||
regarding scanners; any sent my way will be forwarded to /dev/null; for
|
||
sources of assistance including live help see Section 7.5 instead, but only
|
||
after reading the relevant sections of this document in their entirety. I am
|
||
neither an expert on scanners nor do I have every model of scanner ever
|
||
manufactured available for testing. My only contribution to scanner support
|
||
within Linux is the compiling of my own limited experience with the
|
||
exhaustive input of others to produce a succinct but (hopefully)
|
||
straightforward HOWTO.
|
||
-----------------------------------------------------------------------------
|
||
|
||
1.6. Conventions Used in this Document
|
||
|
||
The following conventions are used in this document and are outlined here for
|
||
those who may not yet have a complete understanding of how to access and
|
||
control the underlying operating system in Linux, which is almost always via
|
||
the Bash shell.
|
||
|
||
First, filenames are referenced in a paragraph like so: /path/file
|
||
|
||
Commands in Linux are executed (or 'called') at the command prompt, otherwise
|
||
known as the 'command line.' If you are in the non-graphical (text-based)
|
||
environment you will usually be presented the Bash shell prompt which is a
|
||
dollar sign:
|
||
+---------------------------------------------------------------------------+
|
||
|$ |
|
||
+---------------------------------------------------------------------------+
|
||
...or the hash mark:
|
||
+---------------------------------------------------------------------------+
|
||
|# |
|
||
+---------------------------------------------------------------------------+
|
||
...if you have logged in as root or have acquired root, or 'superuser'
|
||
privileges. You can also access the Bash shell in the X window system,
|
||
otherwise known as X or X11, with an [http://invisible-island.net/xterm/]
|
||
xterm or similar X-terminal-emulator. Commands to be performed at the Bash
|
||
prompt, but referenced in a paragraph of this document, usually look like
|
||
this: do this now
|
||
|
||
Commands and/or the resulting output of commands may also be outlined with
|
||
screen output in their own paragraph or heading:
|
||
|
||
+---------------------------------------------------------------------------+
|
||
|$ date |
|
||
|Sun Jul 27 22:37:11 CDT 2003 |
|
||
+---------------------------------------------------------------------------+
|
||
|
||
When a command is written in front of the Bash prompt (e.g. $ date above), it
|
||
is assumed the [Return] or [Enter] key has been depressed after the command,
|
||
possibly followed by the output (e.g., the date).
|
||
-----------------------------------------------------------------------------
|
||
|
||
2. General Support and Interface Type
|
||
|
||
There are four predominant types of scanner interfaces available and
|
||
discussed in this document: SCSI, USB, parallel port, IEEE 1394. Linux
|
||
support exists for most scanners as pioneered by the [http://
|
||
www.sane-project.org/] SANE project. This is not the same thing as [http://
|
||
www.twain.org/index.html] TWAIN, which you may be familiar with if you have
|
||
used a scanner device under another operating system such as Microsoft
|
||
Windows??. The latter protocol weds driver and user interface in a way that
|
||
does not allow its use outside of that proprietary graphical environment.
|
||
Thus SANE, or Scanner Access Now Easy, was conceived for use under (but is by
|
||
no means limited to) the Un*x environment. The SANE standard allows for
|
||
modularity where driver meets application and allows for much greater
|
||
flexibility and portability. With SANE you can scan with your device using
|
||
only the command line, you can design your own front-end application to use
|
||
the SANE backend(s), access your scanner(s) over a network or even access
|
||
your cameras and other [http://www.thedirks.org/v4l2/] video4linux devices to
|
||
acquire photographs. As such SANE is SANE where TWAIN is not.
|
||
|
||
NOTE: Before reading any further you should check the SANE homepage at [http:
|
||
//www.sane-project.org/sane-mfgs.html] http://www.sane-project.org/
|
||
sane-mfgs.html to see if your scanner device is supported. Alternatively you
|
||
can use the [http://www.sane-project.org/cgi-bin/driver.pl] sane supported
|
||
scanners search engine.
|
||
|
||
If you have an integrated device, i.e., one that functions as a scanner,
|
||
printer and/or fax, you can follow the steps below for the scanner functions
|
||
using the appropriate interface just like a standard scanner. Those who own
|
||
an HP officejet should consult [http://hpoj.sourceforge.net/] the HP
|
||
Officejet Linux Driver project site, which goes into excellent detail on how
|
||
to get the various functions of this integrated device to work within Linux.
|
||
-----------------------------------------------------------------------------
|
||
|
||
2.1. SCSI Scanners
|
||
|
||
These scanners are managed by an SCSI controller. In general, just about any
|
||
scanner using an SCSI interface should work assuming the SCSI hardware is
|
||
supported. You should check the [http://tldp.org/HOWTO/Hardware-HOWTO/
|
||
scsi.html] SCSI controller list of the Hardware HOWTO if you are unsure if
|
||
the SCSI controller is supported. If your SCSI controller came bundled with
|
||
your scanner there is a chance your hardware may not be supported or is only
|
||
partly supported, as the accompanying SCSI card may not function as a
|
||
complete SCSI controller.
|
||
|
||
You should consult man sane-scsi, if you run into difficulty configuring your
|
||
SCSI scanner at any point.
|
||
-----------------------------------------------------------------------------
|
||
|
||
2.2. USB Scanners
|
||
|
||
You probably already know what a Universal Serial Bus (USB) connector looks
|
||
like and where it plugs in. If you have a USB scanner your hardware is likely
|
||
to be supported in Linux. Information on enabling the USB subsystem and USB
|
||
scanner support is found in Section 2.5.
|
||
-----------------------------------------------------------------------------
|
||
|
||
2.3. Parallel Port Scanners
|
||
|
||
Parallel-port scanners on the whole can be made to work if there is a backend
|
||
that supports them, however if your device also has a USB port (which the
|
||
vast majority of new scanners released nowadays do) and a working USB backend
|
||
you are strongly encouraged to use that instead, as it may be more easily
|
||
configured.
|
||
|
||
If your model has only a parallel-port interface and a proprietary or
|
||
non-standard controller you could be out of luck. If you have found there is
|
||
a supported backend for the parallel-port interface of your scanner, then you
|
||
should see Section 2.8.
|
||
-----------------------------------------------------------------------------
|
||
|
||
2.4. IEEE 1394 (Firewire??, i.Link??)
|
||
|
||
Some IEEE 1394 scanners are supported as of the time of this writing,
|
||
particularly those manufactured by Nikon and Epson. The IEEE 1394 interface
|
||
has been supported since the 2.4-series Linux kernel. IEEE 1394 scanners
|
||
require your system be equipped with a IEEE 1394 PCI card or a mainboard IEEE
|
||
1394 port, as well as have IEEE 1394 support enabled in your kernel or as a
|
||
loaded module. You should check the SANE supported devices by manufacturer
|
||
link in Section 2 and read the manpage next to your hardware (if any) for any
|
||
issues related to your specific hardware.
|
||
-----------------------------------------------------------------------------
|
||
|
||
2.5. Operating System Support
|
||
|
||
If you don't have a USB scanner you should skip to Section 2.7, and if your
|
||
equipment is of the parallel port variety you should go to Section 2.8.
|
||
-----------------------------------------------------------------------------
|
||
|
||
2.6. USB Scanners and Libusb
|
||
|
||
This section was at one time entitled "USB Scanner Kernel Support," but the
|
||
existence of [http://libusb.sourceforge.net/] libusb promises to make the
|
||
need for a USB-scanner enabled kernel unnecessary. Libusb is a project to
|
||
create a userspace (i.e., non-kernel) library to access USB devices
|
||
regardless of operating system. For more information on the differences
|
||
between these consult man sane-usb.
|
||
|
||
If you would prefer the more conventional kernel support for your USB
|
||
Scanner, go on to Section 2.7.2, but be advised that kernel support for USB
|
||
scanner devices is dropped in favor of libusb in kernel version 2.6.0 and
|
||
higher. Most distributions at this point are offering libusb in their stable
|
||
branches (and some install it by default), so if you don't already have
|
||
kernel support for USB scanner devices then you may only have to install the
|
||
libusb package in order to access your device. You must have USB device
|
||
filesystem support enabled in your kernel, which most distributions do. To
|
||
find out for sure, issue the following at the command line:
|
||
|
||
+---------------------------------------------------------------------------+
|
||
|$ cat /proc/filesystems |
|
||
+---------------------------------------------------------------------------+
|
||
|
||
You should see (among others):
|
||
|
||
+---------------------------------------------------------------------------+
|
||
|nodev usbdevfs |
|
||
|nodev usbfs |
|
||
+---------------------------------------------------------------------------+
|
||
|
||
You may need to mount usbdevfs to enable it and see the device files, which
|
||
you can do at the command line with mount -t usbdevfs none /proc/bus/usb.
|
||
Don't try to use libusb while kernel scanner support is enabled either
|
||
statically or the module loaded; you can only use one at at time.
|
||
|
||
You can obtain the libusb package in .rpm, .tgz or .deb format from your
|
||
Linux distribution. If you are planning on compiling your own SANE binary
|
||
from source with libusb support enabled you will require the libusb-dev
|
||
package as well.
|
||
-----------------------------------------------------------------------------
|
||
|
||
2.7. Linux Kernel Support of your Scanner Device
|
||
|
||
Kernel support is required for SCSI, USB and parallel-port generic interface
|
||
support and USB scanner support (if not using libusb). Your stock kernel may
|
||
already have support for what you need, and the way to tell is to use the
|
||
dmesg command and look for an acknowledgement that the driver in question
|
||
loaded at bootup. If you don't see it, the driver may be present (but not
|
||
necessarily loaded) as a module. To find out you can type the following at
|
||
the command line:
|
||
|
||
+---------------------------------------------------------------------------+
|
||
| $ ls -R /lib/modules/X.XX/kernel/drivers |
|
||
+---------------------------------------------------------------------------+
|
||
|
||
Where 'X.XX' is your kernel version number. The following output is an
|
||
example of what you would find in a USB scanner-enabled kernel (though all
|
||
but the relevant lines have been edited for brevity):
|
||
|
||
+---------------------------------------------------------------------------+
|
||
|./usb: |
|
||
|scanner.o |
|
||
|usbcore.o |
|
||
+---------------------------------------------------------------------------+
|
||
|
||
(A hint for newbies: if the info in dmesg or the above module list scrolls by
|
||
too fast, you might try piping the output into 'less' (or 'more' if you don't
|
||
have less): ls -R /lib/modules/X.XX/kernel/drivers | less or alternatively
|
||
catching it in a file: ls -R /lib/modules/X.XX/kernel/drivers > file.txt,
|
||
where 'file.txt' will contain the info that can then be accessed with cat
|
||
[file] | less.)
|
||
|
||
The following information is arranged on the basis of scanner interface type.
|
||
If your kernel doesn't contain the necessary support, you can always
|
||
recompile your kernel. If you are unfamiliar with the process of compiling
|
||
your own kernel, I direct you to the [http://www.tldp.org/HOWTO/
|
||
Kernel-HOWTO.html] Kernel HOWTO for more information.
|
||
-----------------------------------------------------------------------------
|
||
|
||
2.7.1. Kernel SCSI Support
|
||
|
||
If you have an SCSI-type interface, when invoking make config, make
|
||
menuconfig or make xconfig etc., be aware that in addition to the option to
|
||
support your particular SCSI adapter, generic SCSI device support is also
|
||
required. Such generic devices are usually named /dev/sg0, /dev/sg1.... Since
|
||
you probably already know if your card is supported from the [http://tldp.org
|
||
/HOWTO/Hardware-HOWTO/scsi.html] supported SCSI controllers list, all that is
|
||
required after confirming that your kernel supports your hardware and generic
|
||
SCSI devices is to load the appropriate module(s):
|
||
|
||
+---------------------------------------------------------------------------+
|
||
|# modprobe CARD_MODULE_NAME |
|
||
+---------------------------------------------------------------------------+
|
||
|
||
+---------------------------------------------------------------------------+
|
||
|# modprobe sg |
|
||
+---------------------------------------------------------------------------+
|
||
|
||
...as root. Note there have been reports of ide-scsi emulation support (used
|
||
for ATAPI-eide CDRW support) causing problems for scanner access; if you know
|
||
your hardware is supported and you can't get things to work try unloading the
|
||
ide-scsi module:
|
||
|
||
+---------------------------------------------------------------------------+
|
||
|rmmod ide-scsi |
|
||
+---------------------------------------------------------------------------+
|
||
|
||
...though it has been reported to me that this has been fixed as of recent
|
||
(2.4.20+) kernels.
|
||
-----------------------------------------------------------------------------
|
||
|
||
2.7.2. Kernel USB and USB Scanner Support
|
||
|
||
For USB scanner support, you will need USB subsystem support in your kernel,
|
||
whether usb-ohci, usb-ehci, or whatever protocol of USB driver your system
|
||
prefers. USB support has been present in the Linux kernel since the late
|
||
2.2-series. For a more in-depth discussion of USB support in general, I
|
||
direct you to the [http://www.linux-usb.org/] linux-usb project site. If you
|
||
have a 2.4-series of kernel or earlier and wish to use the kernel USB-scanner
|
||
support to access your scanner (instead of libusb outlined in Section 2.6)
|
||
you will need to have 'USB scanner support' enabled, which, if present, is
|
||
visible within dmesg, or by lsmod if a loaded module. If you want to find out
|
||
which modules are loaded, at the command line or in an xterm type the
|
||
following:
|
||
|
||
+---------------------------------------------------------------------------+
|
||
|# lsmod |
|
||
+---------------------------------------------------------------------------+
|
||
|
||
As shown by the prompt above you will need to have root privileges to do
|
||
this. You should get output including (but not limited to) the following:
|
||
|
||
+---------------------------------------------------------------------------+
|
||
|cdrom 29312 0 (autoclean) [sr_mod] |
|
||
|usb-ohci 17888 0 (unused) |
|
||
|usbcore 56768 0 [scanner ibmcam usbvideo usb-ohci] |
|
||
|scanner 8704 0 |
|
||
+---------------------------------------------------------------------------+
|
||
|
||
If you don't have scanner loaded, and you know you have USB scanner support
|
||
in your kernel as a module, try loading it directly:
|
||
|
||
+---------------------------------------------------------------------------+
|
||
|# modprobe -v scanner |
|
||
+---------------------------------------------------------------------------+
|
||
|
||
...at which point you should see something like the following:
|
||
|
||
+---------------------------------------------------------------------------+
|
||
|Using /lib/modules/2.4.20/kernel/drivers/usb/scanner.o |
|
||
+---------------------------------------------------------------------------+
|
||
|
||
By placing the entry scanner in /etc/modules (note that this varies by
|
||
distribution), you can have the module load at boot-time automatically. You
|
||
can then confirm the module was loaded by checking the syslog or in the
|
||
boot-time record with dmesg | less), where you should see an entry such as
|
||
the following:
|
||
|
||
+---------------------------------------------------------------------------+
|
||
|May 16 23:17:25 K7 kernel: usb.c: registered new driver usbscanner |
|
||
|May 16 23:17:25 K7 kernel: scanner.c: 0.4.6:USB Scanner Driver |
|
||
+---------------------------------------------------------------------------+
|
||
-----------------------------------------------------------------------------
|
||
|
||
2.8. Parallel Port Scanners
|
||
|
||
By now you've probably figured out that configuration of parallel port
|
||
scanners may be problematic. Again, if your device has both a parallel port
|
||
interface and a USB interface you should consider selecting USB to make the
|
||
setup process easier.
|
||
-----------------------------------------------------------------------------
|
||
|
||
2.8.1. Kernel Parport Support
|
||
|
||
For 2.2 and 2.4 kernel systems, parallel-port support must be enabled
|
||
statically or as a module (stock kernels usually have this enabled by
|
||
default). You may want to read [http://www.torque.net/linux-pp.html] more
|
||
generic info about parallel-port device support under the Linux kernel before
|
||
starting this process. To find out for sure if the module parport is loaded
|
||
you can check the dmesg file or use lsmod as outlined above. Using dmesg |
|
||
less you should see (among many other lines) the following:
|
||
|
||
+--------------------------------------------------------------------------------+
|
||
|Mar 3 08:00:25 K7 kernel: parport0: PC-style at 0x378 (0x778) [PCSPP,TRISTATE] |
|
||
|Mar 3 08:00:25 K7 kernel: parport0: irq 7 detected |
|
||
+--------------------------------------------------------------------------------+
|
||
|
||
If you are compiling your own kernel, enable 'Parallel Port support.' You
|
||
should enable 'IEEE 1284 transfer modes,' and if you have x86 type
|
||
architecture you should also enable 'PC-style hardware.'
|
||
|
||
If modprobe returns an error when you attempt to load the module note that
|
||
you may need to determine and supply the hardware address when invoking
|
||
modprobe. The most common address is 0x378 for an x86 system; 0x278 and 0x3BC
|
||
are other possibilities for integrated or ISA parallel ports. Add-in PCI
|
||
parallel ports may have unusual base addresses. One can also arrange multiple
|
||
devices with either the parport_pc or parport_arc modules, though that topic
|
||
is beyond the scope of this document. WARNING: Be sure you have the correct
|
||
address before entering this information at the command line or else your
|
||
machine may become unstable, crash or otherwise implode.
|
||
|
||
Your parallel port should be set to preferably "EPP" mode, or alternatively
|
||
ECP/EPP. "Bidirectional" (also known as "BPP" or "PS/2") may work, albeit
|
||
much more slowly. "Unidirectional" mode is unsuitable for scanning. The above
|
||
setting can usually be accessed through your BIOS menu, at least on x86
|
||
systems.
|
||
|
||
Depending on whether your parallel port scanner requires SCSI support, you
|
||
may need to patch your kernel for parport-SCSI support. You can find that
|
||
suite of tools at [http://www.torque.net/parport/ppscsi.html] www.torque.net/
|
||
parport/ppscsi.html. If this is required you will also need to enable the
|
||
following:
|
||
|
||
<EFBFBD><EFBFBD>*<2A>SCSI support
|
||
|
||
<EFBFBD><EFBFBD>*<2A>SCSI generic support
|
||
|
||
<EFBFBD><EFBFBD>*<2A>Support for the core module of your ppSCSI controller (t348 for the
|
||
APA-348 and T348, t358 for the APA-358 and T358, epsa2 for the older
|
||
Shuttle EPSA-2, epst for the Shuttle EPST and APA-1350, onscsi for the
|
||
OnSpec 90c26, and sparcsi for the SparCSI and ParaSCSI)
|
||
|
||
|
||
Once these are compiled in, it's simply a matter of loading the appropriate
|
||
modules.
|
||
-----------------------------------------------------------------------------
|
||
|
||
3. Making and Accessing the Scanner Devices
|
||
|
||
The following section applies to all hardware types. Some specifics with
|
||
regard to scanner interface types are mentioned in the paragraphs at the end
|
||
of this section.
|
||
-----------------------------------------------------------------------------
|
||
|
||
3.1. Device Filesystem and Udev
|
||
|
||
[http://www.atnf.csiro.au/~rgooch/linux/docs/devfs.html] Devfs, or 'device
|
||
filesystem' has been an option in the Linux kernel since the late 2.2-series.
|
||
Devfsd, the device filesystem daemon, creates and removes devices on your
|
||
system dynamically without the need to manually create devices. If you are
|
||
running devfsd/devfs you can probably skip the following sections as the
|
||
process of creating device nodes will be done for you and it's simply a
|
||
matter of finding the appropriate device node in /dev.
|
||
|
||
Devfs does not obviate the need to change permissions of devices for access
|
||
by users.
|
||
|
||
Beginning in the 2.6-series kernel devfs has been deprecated in favor of a
|
||
userspace daemon known as udev, though devfs remains as an option. You can
|
||
find information on udev [http://www.kernel.org/pub/linux/utils/kernel/
|
||
hotplug/udev-FAQ] here.
|
||
-----------------------------------------------------------------------------
|
||
|
||
3.2. Creating Devices Manually
|
||
|
||
If you are running a system with correctly configured devfs, udev or libusb,
|
||
you can skip this step and go to Section 4. There are two ways to accomplish
|
||
the creation of necessary devices manually. One is to use MAKEDEV and the
|
||
other is to create the device nodes at the command line.
|
||
|
||
The MAKEDEV script is the easier of the two methods, the executable of which
|
||
may be located in /dev or the usual places for storing binary executables (/
|
||
bin,/sbin and so on). I direct you to man MAKEDEV, and would caution you to
|
||
pay attention to the device-specific command options so that you can be sure
|
||
the major and minor numbers are correct (see the next paragraph for more on
|
||
this and why it is important, especially if MAKEDEV doesn't work or you
|
||
prefer doing things the hard way).
|
||
|
||
A device can be created as a block (such as a drive), a fifo
|
||
(file-in-file-out or pipe, as in xconsole) or a character device, which
|
||
represents other hardware. Each device has a major and a minor number
|
||
"coordinate" to tell the kernel what it is and where to access it. These
|
||
numbers are not arbitrary.
|
||
-----------------------------------------------------------------------------
|
||
|
||
3.2.1. SCSI Devices
|
||
|
||
If you are running a 2.4-series kernel you should consider becoming familiar
|
||
with [http://tldp.org/HOWTO/SCSI-2.4-HOWTO/mlproc.html] SCSI proc interface
|
||
access, and whichever kernel you are running, you should read man sane-scsi
|
||
before reading further. When the system boots up, generic SCSI device files
|
||
are mapped on /dev/sgN, where N is a numeric value starting at zero. The
|
||
major and minor numbers for SCSI devices are 21 and 0,1,2,3... respectively.
|
||
You can find out what devices are loaded already with ls -l /dev/sg*, which
|
||
should yield output similar to this:
|
||
|
||
+---------------------------------------------------------------------------+
|
||
|crw------- 1 root sys 21, 0 Jan 06 2003 /dev/sg0 |
|
||
|crw------- 1 root sys 21, 0 Jan 06 2003 /dev/sg1 |
|
||
|crw------- 1 root sys 21, 0 Jan 06 2003 /dev/sg2 |
|
||
|crw------- 1 root sys 21, 0 Jan 06 2003 /dev/sg3 |
|
||
|crw------- 1 root sys 21, 0 Jan 06 2003 /dev/sg4 |
|
||
|crw------- 1 root sys 21, 0 Jan 06 2003 /dev/sg5 |
|
||
+---------------------------------------------------------------------------+
|
||
|
||
You will need to make a /dev/scanner symbolic link to an existing device (for
|
||
reasons clarified later). For example, if your scanner is connected to the
|
||
first scsi-bus (and lun and target) of your SCSI host device, you should link
|
||
it to the corresponding device:
|
||
|
||
+---------------------------------------------------------------------------+
|
||
|# ln -s /dev/sg0 /dev/scanner |
|
||
+---------------------------------------------------------------------------+
|
||
-----------------------------------------------------------------------------
|
||
|
||
3.2.2. Manually creating USB Devices
|
||
|
||
Again, you can skip this step if using libusb. USB scanner devices have the
|
||
major number 180 and minor 48, 49, etc., up to 63. First, check /dev to see
|
||
what directory your distribution lays out its USB directory devices in, as
|
||
some distributions might have these devices scanner0, scanner1...etc., within
|
||
/dev/usb or as usbscanner0, usbscanner1... and so on, in the base /dev/
|
||
directory. If you find that in the /dev/ directory the scanner devices have
|
||
already been made for you then your work is done. If not, you will need to
|
||
create them yourself. As root, make a character device for your scanner like
|
||
so:
|
||
|
||
+---------------------------------------------------------------------------+
|
||
|# mknod /dev/usbscanner0 c 180 48 |
|
||
+---------------------------------------------------------------------------+
|
||
|
||
...or if your distribution has a '/dev/usb' subdirectory:
|
||
|
||
+---------------------------------------------------------------------------+
|
||
|# mknod /dev/usb/scanner0 c 180 48 |
|
||
+---------------------------------------------------------------------------+
|
||
-----------------------------------------------------------------------------
|
||
|
||
3.2.3. Manually creating Parallel Port Devices
|
||
|
||
Follow the example outlined in the above section to create the following
|
||
generic parport devices:
|
||
|
||
+---------------------------------------------------------------------------+
|
||
|crw------- 1 root root 99, 0 Jun 24 13:47 parport0 |
|
||
|crw------- 1 root root 99, 1 Jun 24 13:47 parport1 |
|
||
|crw------- 1 root root 99, 2 Jun 24 13:47 parport2 |
|
||
|crw------- 1 root root 99, 3 Jun 24 13:47 parport3 |
|
||
|crw-r----- 1 root root 1, 4 Jan 1 1970 port |
|
||
+---------------------------------------------------------------------------+
|
||
|
||
You may also need to create /dev/port and/or /dev/parport depending on the
|
||
backend you will use, so be prepared to return to this step if your
|
||
application dictates it.
|
||
-----------------------------------------------------------------------------
|
||
|
||
3.3. Groups and Permissions
|
||
|
||
It is a good idea to be sure that your user account can access the device
|
||
once all modules are loaded and device nodes created. The most
|
||
security-conscious way to do that is to add scanner access to a particular
|
||
group. On my system, the members of the group 'scanner' are allowed to use
|
||
the scanner. The way to accomplish this is to first change the ownership of
|
||
the devices in /dev like so (as root):
|
||
|
||
+---------------------------------------------------------------------------+
|
||
|# chown root.scanner /dev/usb/scanner* |
|
||
+---------------------------------------------------------------------------+
|
||
|
||
...where root.scanner are the owner and group the device will now belong to.
|
||
Obviously the specific command will vary by your system and the type of
|
||
device, whether /dev/sg* on SCSI scanners, etc. It is important that you
|
||
change the ownership of the device node itself and not the symlink; symlinks'
|
||
ownerships are affected only by changing the parent devices or files they
|
||
point to.
|
||
|
||
To see if your user account is a member of the group in question, as root
|
||
issue the following command: grep -e scanner /etc/group. You should see
|
||
something like the following:
|
||
|
||
+---------------------------------------------------------------------------+
|
||
|scanner:x:103: |
|
||
+---------------------------------------------------------------------------+
|
||
|
||
...where '103' is the group number. Since no members follow the last colon in
|
||
the 'scanner' group we can add them, let's say user 'jhs' with the command
|
||
|
||
+---------------------------------------------------------------------------+
|
||
|# adduser jhs scanner |
|
||
+---------------------------------------------------------------------------+
|
||
|
||
After this it's simply a matter of allowing read and write access for the
|
||
user in question of the device like so:
|
||
|
||
+---------------------------------------------------------------------------+
|
||
|# chmod g+rw /dev/usb/scanner0 |
|
||
+---------------------------------------------------------------------------+
|
||
|
||
...where g+rw means add read and write access for group. See the
|
||
documentation for chmod (man chmod or info chmod) for further info.
|
||
-----------------------------------------------------------------------------
|
||
|
||
4. SANE
|
||
|
||
The final prerequisite for scanner access is the SANE backend(s) and
|
||
optionally, a suitable SANE-frontend. The former are the drivers and
|
||
low-level access tools that interface with your scanner, and the latter are
|
||
graphical applications for access and use of your scanner within X. Only the
|
||
former are required for scanner access, though a frontend is highly
|
||
recommended in order to manipulate images and to actually be able to see your
|
||
images in a windowed environment without having to print them.
|
||
-----------------------------------------------------------------------------
|
||
|
||
4.1. Getting SANE
|
||
|
||
You can acquire the suite of SANE backends at [http://www.sane-project.org/
|
||
source.html] http://www.sane-project.org/source.html, where you can obtain
|
||
binaries for nearly all Linux distributions as well as source code. If you
|
||
are planning on compiling from source, you probably already know what to do,
|
||
but the following link is available for those that want a refresher, that of
|
||
the [http://tldp.org/HOWTO/Software-Building-HOWTO.html] Software Building
|
||
HOWTO. In addition, be sure that if you have a previous sane installation
|
||
that it is removed prior to installing your freshly-compiled version, and
|
||
that you should acquire the most recently released stable version of the
|
||
source code for compiling.
|
||
|
||
Those who wish to install binaries should download the corresponding file and
|
||
then install as usual, i.e. for rpm-based distributions:
|
||
|
||
+---------------------------------------------------------------------------+
|
||
|# rpm -iVh sane-backends-VERSION.rpm |
|
||
+---------------------------------------------------------------------------+
|
||
|
||
For Debian users there is a SANE package in stable (Woody), testing (Sarge)
|
||
and unstable (Sid) package repositories, so a simple apt-get install sane is
|
||
all that is required, whatever version you are using.
|
||
|
||
Those who prefer compiling the latest version of SANE from source can acquire
|
||
it from [ftp://ftp.mostang.com/pub/sane/] ftp.mostang.com/pub/sane. There is
|
||
a more in-depth (though rather pessimistic) write-up of how to compile SANE
|
||
from source and get a SCSI scanner working from scratch, at [http://
|
||
www.xs4all.nl/~ljm/SANE/howto.html] Laurent-jan's HOWTO page originally
|
||
written by Steve Sheriff (the graphics are interesting, too).
|
||
-----------------------------------------------------------------------------
|
||
|
||
4.2. Configuring SANE
|
||
|
||
4.2.1. SANE Backends
|
||
|
||
Whether you obtained your distribution's official SANE package, obtained a
|
||
binary from the SANE homepage or compiled your own SANE binary from source,
|
||
SANE should identify the appropriate backend to use for your hardware when
|
||
you call scanimage or any other frontend. If no device is found when you run
|
||
scanimage -L or your chosen frontend, see Section 7 for more info.
|
||
-----------------------------------------------------------------------------
|
||
|
||
4.2.2. Across a Network
|
||
|
||
If you are interested in making scanner services available across a network
|
||
from or to a remote machine, you will need to edit the saned.conf file in the
|
||
configuration directory of the server (the computer with the scanner),
|
||
whether /etc/sane.d or /usr/local/etc/sane.d. It usually consists of an entry
|
||
'scan-client.somedomain.firm' that will need to be replaced with the hostname
|
||
of the client you want to be able to use the server's scanner. If you prefer
|
||
an IP address this can be used instead.
|
||
|
||
The saned daemon will need to be run as well as inetd or xined on the server.
|
||
See man saned for the exact changes required to inetd.conf or xined.conf. In
|
||
addition port 6566 will need to be added to the /etc/services file:
|
||
|
||
+---------------------------------------------------------------------------+
|
||
|sane 6566/tcp |
|
||
+---------------------------------------------------------------------------+
|
||
|
||
The client computer (without the scanner) will need net.conf edited to
|
||
include the server machine name, i.e., 'scan-server.somedomain.firm.'
|
||
|
||
Also for the client(s), be sure the entry "net" isn't commented out in the
|
||
dll.conf file.
|
||
-----------------------------------------------------------------------------
|
||
|
||
4.2.3. Using SANE with a Video4linux Device
|
||
|
||
Video4linux devices include webcams, still cameras and video capture devices.
|
||
SANE is capable of accessing these. To do this, locate the file in the
|
||
configuration directory (/etc/sane.d or /usr/local/etc/sane.d) named
|
||
v4l.conf. Opening this file yields something similar to the following
|
||
content:
|
||
|
||
+---------------------------------------------------------------------------+
|
||
|# In order to use the v4linux backend you have to give the device |
|
||
|# You can enable multiple lines if |
|
||
|# you really have multible [sic] v4l devices. |
|
||
|# |
|
||
|/dev/bttv0 |
|
||
|/dev/video0 |
|
||
|/dev/video1 |
|
||
|/dev/video2 |
|
||
|/dev/video3 |
|
||
+---------------------------------------------------------------------------+
|
||
|
||
The initial line of this file really tells you all you need to know, so
|
||
remember this when we get to the sections on testing the scanner hardware.
|
||
Just be sure that whatever device your kernel identifies your camera or other
|
||
v4l device as is uncommented (i.e., has the # removed from in front of it as
|
||
above). You will obviously need to do this as root. In addition, be sure the
|
||
line 'v4l' isn't commented out in the dll.conf file.
|
||
-----------------------------------------------------------------------------
|
||
|
||
5. Testing Your Scanner
|
||
|
||
Once you've completed all of the above, you're ready to test your scanner
|
||
equipment. This section assumes your scanner is turned on and has been
|
||
attached through the appropriate interface. If you have a SCSI or a USB
|
||
scanner, at the command line you can issue the following command:
|
||
|
||
+---------------------------------------------------------------------------+
|
||
|$ sane-find-scanner |
|
||
+---------------------------------------------------------------------------+
|
||
|
||
...which should find and identify your scanner from a list of possible
|
||
devices. (Note to Debian users: starting with Sarge, or unstable,
|
||
sane-find-scanner is available in the 'sane-utils' package. In Woody it is
|
||
available in the 'libsane' package.) If your scanner is a type not looked for
|
||
by sane-find-scanner, you can try as root scanimage --list-devices which
|
||
should yield information about attached devices. For example, this is the
|
||
output on my system:
|
||
+------------------------------------------------------------------------------------+
|
||
|device `v4l:/dev/video0' is a Noname BT878 video (Hauppauge (bt878)) virtual device |
|
||
|device `epson:/dev/scanner0' is a Epson Perfection1240 flatbed scanner |
|
||
+------------------------------------------------------------------------------------+
|
||
whereas when using libusb it registers as
|
||
+------------------------------------------------------------------------------------+
|
||
|device `v4l:/dev/video0' is a Noname BT878 video (Hauppauge (bt878)) virtual device |
|
||
|device `epson:libusb:001:003' is a Epson Perfection1240 flatbed scanner |
|
||
+------------------------------------------------------------------------------------+
|
||
Make note of the 'backend:device' information obtained; this will be our
|
||
device name to specifically access the scanner from the command line. Also,
|
||
be aware that sane-find-scanner is a separate utility that does not guarantee
|
||
support under SANE, it only looks for devices that claim to be scanners.
|
||
|
||
Next you should test the scanner's image grabbing ability. You can use either
|
||
one of the frontends listed in Section 6 or at the command line if you wish
|
||
with the following:
|
||
|
||
+---------------------------------------------------------------------------+
|
||
|$ scanimage -d backend:/dev/scanner --format pnm > outfile.pnm |
|
||
+---------------------------------------------------------------------------+
|
||
|
||
Thus if you use the Epson backend, for example, the command would be as
|
||
follows:
|
||
|
||
+---------------------------------------------------------------------------+
|
||
|$ scanimage -d epson:/dev/scanner --format pnm > outfile.pnm |
|
||
+---------------------------------------------------------------------------+
|
||
|
||
You only need the -d option if you have more than one scanner and want to
|
||
select which one to use. For example, if you have an Epson and a Mustek
|
||
scanner, using "-d epson" or "-d mustek" should be enough. The complete path
|
||
is only needed if you have more that one scanner supported by the same
|
||
backend. Obviously /dev/scanner should be substituted with whatever scanner
|
||
device you've configured (e.g., /dev/video0 in the case of a v4l device, and
|
||
libusb as seen in the sane-find-scanner example above). The --format switch
|
||
can be either pnm or tiff, but if left out will default to pnm. See man
|
||
scanimage for more obscure but useful options. The '.pnm' format stands for
|
||
'portable anymap,' a common image format for graphical files in Linux that
|
||
can be converted to nearly any other image format with [http://
|
||
www.imagemagick.org/] Imagemagick or [http://netpbm.sourceforge.net/] netpbm.
|
||
-----------------------------------------------------------------------------
|
||
|
||
6. SANE Frontends
|
||
|
||
Now that you've got the hardware working, you should probably acquire a
|
||
suitable frontend if you plan on using your scanner device in X11, which is
|
||
probably a good idea to look at what you've scanned. My personal favorite is
|
||
as elegant and functional as any proprietary solution I've seen, [http://
|
||
www.xsane.org] xsane. It has an attractive GTK+ based GUI, can save the image
|
||
to a variety of formats, send an image to the printer, and interface easily
|
||
with the [http://www.gimp.org] GIMP. It makes accessing the full color and
|
||
other potential of your hardware quite easy.
|
||
|
||
The GIMP, or GNU Image Manipulation Program, is an outstanding application
|
||
for image editing if you are interested in scanning from within a Photoshop
|
||
??-like application. The xsane module may be available as a separate package
|
||
depending on your Linux distribution. After starting GIMP, click 'File,' then
|
||
'Acquire' followed by 'Xsane:device dialog' to access your scanner.
|
||
|
||
Another highly recommended frontend is [http://www.kde.org/apps/kooka/] Kooka
|
||
of the [http://www.kde.org/] KDE desktop environment. It has an intuitive
|
||
interface that integrates easily with other KDE applications and can greatly
|
||
simplify management of large image collections.
|
||
|
||
Xscanimage is a somewhat simpler (but still powerful) scanner application for
|
||
X11 to acquire images from your scanner. It may or may not come bundled with
|
||
the SANE backends depending on your distribution. See man xscanimage for more
|
||
info.
|
||
|
||
You can find a more complete list of SANE frontends at [http://
|
||
www.sane-project.org/sane-frontends.html] the SANE frontends page.
|
||
-----------------------------------------------------------------------------
|
||
|
||
7. Troubleshooting
|
||
|
||
7.1. Help, my scanner cannot be found by scanimage or xsane!
|
||
|
||
First, don't despair. If you're sure you've done everything correctly up to
|
||
this point, all the right modules are loaded and all the configuration files
|
||
tweaked as outlined and you know you're hardware is supported, check your
|
||
permissions. In order to access scanner hardware you must have read and write
|
||
access. See Section 3.3 for more info. If this isn't the problem, go to /etc/
|
||
sane.d/ (or /usr/local/etc/sane.d) and edit the file dll.conf, commenting out
|
||
any backend or other (i.e. v4l) protocol that you don't need.
|
||
|
||
If none of the above work, from within the directory containing the SANE
|
||
configuration files, open the one named after the backend for your particular
|
||
scanner. There are (among others) two important entries in the file:
|
||
interface type (scsi vs. usb), and the device name. If you have a usb
|
||
scanner, you will usually need to comment out (make a # mark in front of) the
|
||
'scsi' line, and uncomment the line containing 'usb.' In addition the device
|
||
name may need to be changed, depending on your distribution (i.e., /dev/
|
||
usbscanner0 may become /dev/usb/usbscanner0). As you may have noted, there
|
||
may be several other options available to your scanner in this file depending
|
||
on the model, so if your scanner doesn't operate as planned, you may want to
|
||
take a look at this file and the accompanying model-specific documentation if
|
||
any; see man sane-scsi or sane-usb, or whichever manufacturer made your
|
||
scanner (including sane-plustek, sane-qcam, sane-ricoh, sane-sharp,
|
||
sane-snapscan, sane-umax and so on. For a full list try apropos sane. The
|
||
exact protocols and manufacturers available may depend on your version of
|
||
SANE.
|
||
|
||
If none of the above work, see Section 7.5. Also, if you're particularly
|
||
daring you should check the [http://www.meier-geinitz.de/sane/sts/]
|
||
sane-troubleshoot Homepage, still in an early development stage at the time
|
||
of this writing.
|
||
-----------------------------------------------------------------------------
|
||
|
||
7.2. Help, I'm not sure my USB hardware is working!
|
||
|
||
Assuming you have usbdevfs and /proc filesystem support, you should issue the
|
||
following command: cat /proc/bus/usb/devices. It should give you an output of
|
||
the USB bus status and the connected devices and troubleshoot your hardware.
|
||
If your scanner is supported and you can see your hardware you'll know your
|
||
problem lies elsewhere.
|
||
-----------------------------------------------------------------------------
|
||
|
||
7.3. Help, scanimage or the frontend I am using identifies the wrong device!
|
||
|
||
First, locate your configuration files, located in one of the usual places: /
|
||
etc/sane.d or /usr/local/etc/sane.d. In general, if you obtained a
|
||
precompiled package from your distribution or a binary from the SANE homepage
|
||
it is in /etc, while if you compiled it from source it is in /usr/local/etc/
|
||
sane.d. Change (cd) to that particular directory. In Section 2 you were
|
||
referred to the [http://www.sane-project.org/sane-mfgs.html] SANE list of
|
||
supported and not-yet-supported hardware. There you will find among the
|
||
charts of individual manufacturers listed the "Backend," or SANE driver for
|
||
each model in addition to the support status. Within /etc/sane.d or /usr/
|
||
local/etc/sane.d there are similarly named files for each backend. You should
|
||
select the file named dll.conf. This will list the backend protocols one by
|
||
one. Check to be sure your scanner's backend is not commented out (i.e., has
|
||
a hash mark in front of it). If it is you will need to (as root, and using
|
||
your editor program) remove the '#.' If you still can't get things to work,
|
||
see Section 7.5
|
||
-----------------------------------------------------------------------------
|
||
|
||
7.4. Help, I can only access my parallel-port scanner as root!
|
||
|
||
The SANE driver for your scanner accesses the parallel port directly (via /
|
||
dev/port). This only works for root for security reasons. See [http://
|
||
www.linuxprinting.org/download/digitalimage/
|
||
Scanning-as-Normal-User-on-Wierd-Scanner-Mini-HOWTO.txt] this mini-HOWTO by
|
||
Till Kamppeter for instructions on how to approach this problem.
|
||
-----------------------------------------------------------------------------
|
||
|
||
7.5. Help, I have an Acme Whizzbang?? or other model scanner and you haven't
|
||
addressed my particular problem!
|
||
|
||
Go to [http://www.sane-project.org/mailing-lists.html] the mailing list and
|
||
irc channel at the SANE website. Check the link for instructions on how to
|
||
subscribe, etc. Also, you should read the [http://www.xs4all.nl/~ljm/
|
||
SANE-faq.html] SANE FAQ which has several hardware-specific questions,
|
||
answers and links to relevant documentation.
|
||
-----------------------------------------------------------------------------
|
||
|
||
8. Gnu Free Documentation License
|
||
|
||
Version 1.2, November 2002
|
||
|
||
Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. 59 Temple Place,
|
||
Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and
|
||
distribute verbatim copies of this license document, but changing it is not
|
||
allowed.
|
||
|
||
0. PREAMBLE
|
||
|
||
The purpose of this License is to make a manual, textbook, or other
|
||
functional and useful document "free" in the sense of freedom: to assure
|
||
everyone the effective freedom to copy and redistribute it, with or without
|
||
modifying it, either commercially or noncommercially. Secondarily, this
|
||
License preserves for the author and publisher a way to get credit for their
|
||
work, while not being considered responsible for modifications made by
|
||
others.
|
||
|
||
This License is a kind of "copyleft", which means that derivative works of
|
||
the document must themselves be free in the same sense. It complements the
|
||
GNU General Public License, which is a copyleft cense designed for free
|
||
software.
|
||
|
||
We have designed this License in order to use it for manuals for free
|
||
software, because free software needs free documentation: a free program
|
||
should come with manuals providing the same freedoms that the software does.
|
||
But this License is not limited to software manuals; it can be used for any
|
||
textual work, regardless of subject matter or whether it is published as a
|
||
printed book. We recommend this License principally for works whose purpose
|
||
is instruction or reference.
|
||
|
||
1. APPLICABILITY AND DEFINITIONS
|
||
|
||
This License applies to any manual or other work, in any medium, that
|
||
contains a notice placed by the copyright holder saying it can be distributed
|
||
under the terms of this License. Such a notice grants a world-wide,
|
||
royalty-free license, unlimited in duration, to use that work under the
|
||
conditions stated herein. The "Document", below, refers to any such manual or
|
||
work. Any member of the public is a licensee, and is addressed as "you". You
|
||
accept the license if you copy, modify or distribute the work in a way
|
||
requiring permission under copyright law.
|
||
|
||
A "Modified Version" of the Document means any work containing the Document
|
||
or a portion of it, either copied verbatim, or with modifications and/or
|
||
translated into another language.
|
||
|
||
A "Secondary Section" is a named appendix or a front-matter section of the
|
||
Document that deals exclusively with the relationship of the publishers or
|
||
authors of the Document to the Document's overall subject (or to related
|
||
matters) and contains nothing that could fall directly within that overall
|
||
subject. (Thus, if the Document is in part a textbook of mathematics, a
|
||
Secondary Section may not explain any mathematics.) The relationship could be
|
||
a matter of historical connection with the subject or with related matters,
|
||
or of legal, commercial, philosophical, ethical or political position
|
||
regarding them.
|
||
|
||
The "Invariant Sections" are certain Secondary Sections whose titles are
|
||
designated, as being those of Invariant Sections, in the notice that says
|
||
that the Document is released under this License. If a section does not fit
|
||
the above definition of Secondary then it is not allowed to be designated as
|
||
Invariant. The Document may contain zero Invariant Sections. If the Document
|
||
does not identify any Invariant Sections then there are none.
|
||
|
||
The "Cover Texts" are certain short passages of text that are listed, as
|
||
Front-Cover Texts or Back-Cover Texts, in the notice that says that the
|
||
Document is released under this License. A Front-Cover Text may be at most 5
|
||
words, and a Back-Cover Text may be at most 25 words.
|
||
|
||
A "Transparent" copy of the Document means a machine-readable copy,
|
||
represented in a format whose specification is available to the general
|
||
public, that is suitable for revising the document straightforwardly with
|
||
generic text editors or (for images composed of pixels) generic paint
|
||
programs or (for drawings) some widely available drawing editor, and that is
|
||
suitable for input to text formatters or for automatic translation to a
|
||
variety of formats suitable for input to text formatters. A copy made in an
|
||
otherwise Transparent file format whose markup, or absence of markup, has
|
||
been arranged to thwart or discourage subsequent modification by readers is
|
||
not Transparent. An image format is not Transparent if used for any
|
||
substantial amount of text. A copy that is not "Transparent" is called
|
||
"Opaque".
|
||
|
||
Examples of suitable formats for Transparent copies include plain ASCII
|
||
without markup, Texinfo input format, LaTeX input format, SGML or XML using a
|
||
publicly available DTD, and standard-conforming simple HTML, PostScript or
|
||
PDF designed for human modification. Examples of transparent image formats
|
||
include PNG, XCF and JPG. Opaque formats include proprietary formats that can
|
||
be read and edited only by proprietary word processors, SGML or XML for which
|
||
the DTD and/or processing tools are not generally available, and the
|
||
machine-generated HTML, PostScript or PDF produced by some word processors
|
||
for output purposes only.
|
||
|
||
The "Title Page" means, for a printed book, the title page itself, plus such
|
||
following pages as are needed to hold, legibly, the material this License
|
||
requires to appear in the title page. For works in formats which do not have
|
||
any title page as such, "Title Page" means the text near the most prominent
|
||
appearance of the work's title, preceding the beginning of the body of the
|
||
text.
|
||
|
||
A section "Entitled XYZ" means a named subunit of the Document whose title
|
||
either is precisely XYZ or contains XYZ in parentheses following text that
|
||
translates XYZ in another language. (Here XYZ stands for a specific section
|
||
name mentioned below, such as "Acknowledgements", "Dedications",
|
||
"Endorsements", or "History".) To "Preserve the Title" of such a section when
|
||
you modify the Document means that it remains a section "Entitled XYZ"
|
||
according to this definition.
|
||
|
||
The Document may include Warranty Disclaimers next to the notice which states
|
||
that this License applies to the Document. These Warranty Disclaimers are
|
||
considered to be included by reference in this License, but only as regards
|
||
disclaiming warranties: any other implication that these Warranty Disclaimers
|
||
may have is void and has no effect on the meaning of this License.
|
||
|
||
2. VERBATIM COPYING
|
||
|
||
You may copy and distribute the Document in any medium, either commercially
|
||
or noncommercially, provided that this License, the copyright notices, and
|
||
the license notice saying this License applies to the Document are reproduced
|
||
in all copies, and that you add no other conditions whatsoever to those of
|
||
this License. You may not use technical measures to obstruct or control the
|
||
reading or further copying of the copies you make or distribute. However, you
|
||
may accept compensation in exchange for copies. If you distribute a large
|
||
enough number of copies you must also follow the conditions in section 3.
|
||
|
||
You may also lend copies, under the same conditions stated above, and you may
|
||
publicly display copies.
|
||
|
||
3. COPYING IN QUANTITY
|
||
|
||
If you publish printed copies (or copies in media that commonly have printed
|
||
covers) of the Document, numbering more than 100, and the Document's license
|
||
notice requires Cover Texts, you must enclose the copies in covers that
|
||
carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the
|
||
front cover, and Back-Cover Texts on the back cover. Both covers must also
|
||
clearly and legibly identify you as the publisher of these copies. The front
|
||
cover must present the full title with all words of the title equally
|
||
prominent and visible. You may add other material on the covers in addition.
|
||
Copying with changes limited to the covers, as long as they preserve the
|
||
title of the Document and satisfy these conditions, can be treated as
|
||
verbatim copying in other respects.
|
||
|
||
If the required texts for either cover are too voluminous to fit legibly, you
|
||
should put the first ones listed (as many as fit reasonably) on the actual
|
||
cover, and continue the rest onto adjacent pages.
|
||
|
||
If you publish or distribute Opaque copies of the Document numbering more
|
||
than 100, you must either include a machine-readable Transparent copy along
|
||
with each Opaque copy, or state in or with each Opaque copy a
|
||
computer-network location from which the general network-using public has
|
||
access to download using public-standard network protocols a complete
|
||
Transparent copy of the Document, free of added material. If you use the
|
||
latter option, you must take reasonably prudent steps, when you begin
|
||
distribution of Opaque copies in quantity, to ensure that this Transparent
|
||
copy will remain thus accessible at the stated location until at least one
|
||
year after the last time you distribute an Opaque copy (directly or through
|
||
your agents or retailers) of that edition to the public.
|
||
|
||
It is requested, but not required, that you contact the authors of the
|
||
Document well before redistributing any large number of copies, to give them
|
||
a chance to provide you with an updated version of the Document.
|
||
|
||
4. MODIFICATIONS
|
||
|
||
You may copy and distribute a Modified Version of the Document under the
|
||
conditions of sections 2 and 3 above, provided that you release the Modified
|
||
Version under precisely this License, with the Modified Version filling the
|
||
role of the Document, thus licensing distribution and modification of the
|
||
Modified Version to whoever possesses a copy of it. In addition, you must do
|
||
these things in the Modified Version:
|
||
|
||
A. Use in the Title Page (and on the covers, if any) a title distinct from
|
||
that of the Document, and from those of previous versions (which should, if
|
||
there were any, be listed in the History section of the Document). You may
|
||
use the same title as a previous version if the original publisher of that
|
||
version gives permission.
|
||
|
||
B. List on the Title Page, as authors, one or more persons or entities
|
||
responsible for authorship of the modifications in the Modified Version,
|
||
together with at least five of the principal authors of the Document (all of
|
||
its principal authors, if it has fewer than five), unless they release you
|
||
from this requirement.
|
||
|
||
C. State on the Title page the name of the publisher of the Modified Version,
|
||
as the publisher.
|
||
|
||
D. Preserve all the copyright notices of the Document.
|
||
|
||
E. Add an appropriate copyright notice for your modifications adjacent to the
|
||
other copyright notices.
|
||
|
||
F. Include, immediately after the copyright notices, a license notice giving
|
||
the public permission to use the Modified Version under the terms of this
|
||
License, in the form shown in the Addendum below.
|
||
|
||
G. Preserve in that license notice the full lists of Invariant Sections and
|
||
required Cover Texts given in the Document's license notice.
|
||
|
||
H. Include an unaltered copy of this License.
|
||
|
||
I. Preserve the section Entitled "History", Preserve its Title, and add to it
|
||
an item stating at least the title, year, new authors, and publisher of the
|
||
Modified Version as given on the Title Page. If there is no section Entitled
|
||
"History" in the Document, create one stating the title, year, authors, and
|
||
publisher of the Document as given on its Title Page, then add an item
|
||
describing the Modified Version as stated in the previous sentence.
|
||
|
||
J. Preserve the network location, if any, given in the Document for public
|
||
access to a Transparent copy of the Document, and likewise the network
|
||
locations given in the Document for previous versions it was based on. These
|
||
may be placed in the "History" section. You may omit a network location for a
|
||
work that was published at least four years before the Document itself, or if
|
||
the original publisher of the version it refers to gives permission.
|
||
|
||
K. For any section Entitled "Acknowledgements" or "Dedications", Preserve the
|
||
Title of the section, and preserve in the section all the substance and tone
|
||
of each of the contributor acknowledgements and/or dedications given therein.
|
||
|
||
L. Preserve all the Invariant Sections of the Document, unaltered in their
|
||
text and in their titles. Section numbers or the equivalent are not
|
||
considered part of the section titles.
|
||
|
||
M. Delete any section Entitled "Endorsements". Such a section may not be
|
||
included in the Modified Version.
|
||
|
||
N. Do not retitle any existing section to be Entitled "Endorsements" or to
|
||
conflict in title with any Invariant Section.
|
||
|
||
O. Preserve any Warranty Disclaimers. If the Modified Version includes new
|
||
front-matter sections or appendices that qualify as Secondary Sections and
|
||
contain no material copied from the Document, you may at your option
|
||
designate some or all of these sections as invariant. To do this, add their
|
||
titles to the list of Invariant Sections in the Modified Version's license
|
||
notice. These titles must be distinct from any other section titles. You may
|
||
add a section Entitled "Endorsements", provided it contains nothing but
|
||
endorsements of your Modified Version by various parties--for example,
|
||
statements of peer review or that the text has been approved by an
|
||
organization as the authoritative definition of a standard.
|
||
|
||
You may add a passage of up to five words as a Front-Cover Text, and a
|
||
passage of up to 25 words as a Back-Cover Text, to the end of the list of
|
||
Cover Texts in the Modified Version. Only one passage of Front-Cover Text and
|
||
one of Back-Cover Text may be added by (or through arrangements made by) any
|
||
one entity. If the Document already includes a cover text for the same cover,
|
||
previously added by you or by arrangement made by the same entity you are
|
||
acting on behalf of, you may not add another; but you may replace the old
|
||
one, on explicit permission from the previous publisher that added the old
|
||
one.
|
||
|
||
The author(s) and publisher(s) of the Document do not by this License give
|
||
permission to use their names for publicity for or to assert or imply
|
||
endorsement of any Modified Version.
|
||
|
||
5. COMBINING DOCUMENTS
|
||
|
||
You may combine the Document with other documents released under this
|
||
License, under the terms defined in section 4 above for modified versions,
|
||
provided that you include in the combination all of the Invariant Sections of
|
||
all of the original documents, unmodified, and list them all as Invariant
|
||
Sections of your combined work in its license notice, and that you preserve
|
||
all their Warranty Disclaimers.
|
||
|
||
The combined work need only contain one copy of this License, and multiple
|
||
identical Invariant Sections may be replaced with a single copy. If there are
|
||
multiple Invariant Sections with the same name but different contents, make
|
||
the title of each such section unique by adding at the end of it, in
|
||
parentheses, the name of the original author or publisher of that section if
|
||
known, or else a unique number. Make the same adjustment to the section
|
||
titles in the list of Invariant Sections in the license notice of the
|
||
combined work.
|
||
|
||
In the combination, you must combine any sections Entitled "History" in the
|
||
various original documents, forming one section Entitled "History"; likewise
|
||
combine any sections Entitled "Acknowledgements", and any sections Entitled
|
||
"Dedications". You must delete all sections Entitled "Endorsements".
|
||
|
||
6. COLLECTIONS OF DOCUMENTS
|
||
|
||
You may make a collection consisting of the Document and other documents
|
||
released under this License, and replace the individual copies of this
|
||
License in the various documents with a single copy that is included in the
|
||
collection, provided that you follow the rules of this License for verbatim
|
||
copying of each of the documents in all other respects.
|
||
|
||
You may extract a single document from such a collection, and distribute it
|
||
individually under this License, provided you insert a copy of this License
|
||
into the extracted document, and follow this License in all other respects
|
||
regarding verbatim copying of that document.
|
||
|
||
7. AGGREGATION WITH INDEPENDENT WORKS
|
||
|
||
A compilation of the Document or its derivatives with other separate and
|
||
independent documents or works, in or on a volume of a storage or
|
||
distribution medium, is called an "aggregate" if the copyright resulting from
|
||
the compilation is not used to limit the legal rights of the compilation's
|
||
users beyond what the individual works permit. When the Document is included
|
||
in an aggregate, this License does not apply to the other works in the
|
||
aggregate which are not themselves derivative works of the Document.
|
||
|
||
If the Cover Text requirement of section 3 is applicable to these copies of
|
||
the Document, then if the Document is less than one half of the entire
|
||
aggregate, the Document's Cover Texts may be placed on covers that bracket
|
||
the Document within the aggregate, or the electronic equivalent of covers if
|
||
the Document is in electronic form. Otherwise they must appear on printed
|
||
covers that bracket the whole aggregate.
|
||
|
||
8. TRANSLATION
|
||
|
||
Translation is considered a kind of modification, so you may distribute
|
||
translations of the Document under the terms of section 4. Replacing
|
||
Invariant Sections with translations requires special permission from their
|
||
copyright holders, but you may include translations of some or all Invariant
|
||
Sections in addition to the original versions of these Invariant Sections.
|
||
You may include a translation of this License, and all the license notices in
|
||
the Document, and any Warranty Disclaimers, provided that you also include
|
||
the original English version of this License and the original versions of
|
||
those notices and disclaimers. In case of a disagreement between the
|
||
translation and the original version of this License or a notice or
|
||
disclaimer, the original version will prevail.
|
||
|
||
If a section in the Document is Entitled "Acknowledgements", "Dedications",
|
||
or "History", the requirement (section 4) to Preserve its Title (section 1)
|
||
will typically require changing the actual title.
|
||
|
||
9. TERMINATION
|
||
|
||
You may not copy, modify, sublicense, or distribute the Document except as
|
||
expressly provided for under this License. Any other attempt to copy, modify,
|
||
sublicense or distribute the Document is void, and will automatically
|
||
terminate your rights under this License. However, parties who have received
|
||
copies, or rights, from you under this License will not have their licenses
|
||
terminated so long as such parties remain in full compliance.
|
||
|
||
10. FUTURE REVISIONS OF THIS LICENSE
|
||
|
||
The Free Software Foundation may publish new, revised versions of the GNU
|
||
Free Documentation License from time to time. Such new versions will be
|
||
similar in spirit to the present version, but may differ in detail to address
|
||
new problems or concerns. See http://www.gnu.org/copyleft/.
|
||
|
||
Each version of the License is given a distinguishing version number. If the
|
||
Document specifies that a particular numbered version of this License "or any
|
||
later version" applies to it, you have the option of following the terms and
|
||
conditions either of that specified version or of any later version that has
|
||
been published (not as a draft) by the Free Software Foundation. If the
|
||
Document does not specify a version number of this License, you may choose
|
||
any version ever published (not as a draft) by the Free Software Foundation.
|
||
|
||
ADDENDUM: How to use this License for your documents
|
||
|
||
To use this License in a document you have written, include a copy of the
|
||
License in the document and put the following copyright and license notices
|
||
just after the title page:
|
||
|
||
Copyright (c) YEAR YOUR NAME. Permission is granted to copy, distribute and/
|
||
or modify this document under the terms of the GNU Free Documentation
|
||
License, Version 1.2 or any later version published by the Free Software
|
||
Foundation; with no Invariant Sections, no Front-Cover Texts, and no
|
||
Back-Cover Texts. A copy of the license is included in the section entitled
|
||
"GNU Free Documentation License".
|
||
|
||
If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
|
||
replace the "with...Texts." line with this: with the Invariant Sections being
|
||
LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the
|
||
Back-Cover Texts being LIST. If you have Invariant Sections without Cover
|
||
Texts, or some other combination of the three, merge those two alternatives
|
||
to suit the situation.
|
||
|
||
If your document contains nontrivial examples of program code, we recommend
|
||
releasing these examples in parallel under your choice of free software
|
||
license, such as the GNU General Public License, to permit their use in free
|
||
software.
|