FreeBSD, like any modern operating system, allows the use of image scanners. Standardized access to scanners is provided by the SANE (Scanner Access Now Easy) API available through the FreeBSD Ports Collection. SANE will also use some FreeBSD devices drivers to access to the scanner hardware.
FreeBSD supports both SCSI and USB scanners. Be sure your scanner is supported by SANE prior to performing any configuration. SANE has a supported devices list that can provide you with information about the support for a scanner and its status. The uscanner(4) manual page also provides a list of supported USB scanners.
As mentioned above both SCSI and USB interfaces are supported. According to your scanner interface, different device drivers are required.
The GENERIC
kernel by default
includes the device drivers needed to support USB scanners.
Should you decide to use a custom kernel, be sure that the
following lines are present in your kernel configuration
file:
device usb device uhci device ohci device uscanner
Depending upon the USB chipset on your motherboard, you
will only need either device uhci
or
device ohci
, however having both in the
kernel configuration file is harmless.
If you do not want to rebuild your kernel and your
kernel is not the GENERIC
one, you can
directly load the uscanner(4) device driver module with
the kldload(8) command:
#
kldload uscanner
To load this module at each system startup, add the
following line to
/boot/loader.conf
:
uscanner_load="YES"
After rebooting with the correct kernel, or after loading the required module, plug in your USB scanner. The scanner should appear in your system message buffer (dmesg(8)) as something like:
uscanner0: EPSON EPSON Scanner, rev 1.10/3.02, addr 2
This shows that our scanner is using the
/dev/uscanner0
device node.
If your scanner comes with a SCSI interface, it is
important to know which SCSI controller board you will use.
According to the SCSI chipset used, you will have to tune
your kernel configuration file. The
GENERIC
kernel supports the most common
SCSI controllers. Be sure to read the
NOTES
file
and add the correct line to your kernel
configuration file. In addition to the SCSI adapter driver,
you need to have the following lines in your kernel
configuration file:
device scbus device pass
Once your kernel has been properly compiled, you should be able to see the devices in your system message buffer, when booting:
pass2 at aic0 bus 0 target 2 lun 0 pass2: <AGFA SNAPSCAN 600 1.10> Fixed Scanner SCSI-2 device pass2: 3.300MB/s transfers
If your scanner was not powered-on at system boot, it is still possible to manually force the detection by performing a SCSI bus scan with the camcontrol(8) command:
#
camcontrol rescan all
Re-scan of bus 0 was successful Re-scan of bus 1 was successful Re-scan of bus 2 was successful Re-scan of bus 3 was successful
Then the scanner will appear in the SCSI devices list:
#
camcontrol devlist
<IBM DDRS-34560 S97B> at scbus0 target 5 lun 0 (pass0,da0) <IBM DDRS-34560 S97B> at scbus0 target 6 lun 0 (pass1,da1) <AGFA SNAPSCAN 600 1.10> at scbus1 target 2 lun 0 (pass3) <PHILIPS CDD3610 CD-R/RW 1.00> at scbus2 target 0 lun 0 (pass2,cd0)
More details about SCSI devices, are available in the scsi(4) and camcontrol(8) manual pages.
The SANE system has been splitted in two parts: the backends (graphics/sane-backends) and the frontends (graphics/sane-frontends). The backends part provides access to the scanner itself. The SANE's supported devices list specifies which backend will support your image scanner. It is mandatory to determine the correct backend for your scanner if you want to be able to use your device. The frontends part provides the graphical scanning interface (xscanimage).
The first thing to do is install the graphics/sane-backends port or
package. Then, use the sane-find-scanner
command to check the scanner detection by the
SANE system:
#
sane-find-scanner -q
found SCSI scanner "AGFA SNAPSCAN 600 1.10" at /dev/pass3
The output will show the interface type of the scanner and the device node used to attach the scanner to the system. The vendor and the product model may not appear, it is not important.
Some USB scanners require you to load a firmware, this is explained in the backend manual page. You should also read sane-find-scanner(1) and sane(7) manual pages.
Now we have to check if the scanner will be identified by
a scanning frontend. By default, the
SANE backends comes with a command
line tool called scanimage(1). This command allows you
to list the devices and to perform an image acquisition from
the command line. The -L
option is used to
list the scanner device:
#
scanimage -L
device `snapscan:/dev/pass3' is a AGFA SNAPSCAN 600 flatbed scanner
No output or a message saying that no scanners were
identified indicates that scanimage(1) is unable to
identify the scanner. If this happens, you will need to edit
the backend configuration file and define the scanner device
used. The /usr/local/etc/sane.d/
directory
contains all backends configuration files. This
identification problem does appear with certain USB
scanners.
For example, with the USB scanner used in the Sekcja 7.6.2.1, „USB Interface”,
sane-find-scanner
gives us the following
information:
#
sane-find-scanner -q
found USB scanner (UNKNOWN vendor and product) at device /dev/uscanner0
The scanner is correctly detected, it uses the USB
interface and is attached to the
/dev/uscanner0
device node. We can now
check if the scanner is correctly identified:
#
scanimage -L
No scanners were identified. If you were expecting something different, check that the scanner is plugged in, turned on and detected by the sane-find-scanner tool (if appropriate). Please read the documentation which came with this software (README, FAQ, manpages).
Since the scanner is not identified, we will need to edit
the /usr/local/etc/sane.d/epson.conf
file. The scanner model used was the EPSON
Perfection® 1650,
so we know the scanner will use the epson
backend. Be sure to read the help comments in the backends
configuration files. Line changes are quite simple: comment
out all lines that have the wrong interface for your scanner
(in our case, we will comment out all lines starting with the
word scsi
as our scanner uses the USB
interface), then add at the end of the file a line specifying
the interface and the device node used. In this case, we add
the following line:
usb /dev/uscanner0
Please be sure to read the comments provided in the backend configuration file as well as the backend manual page for more details and correct syntax to use. We can now verify if the scanner is identified:
#
scanimage -L
device `epson:/dev/uscanner0' is a Epson GT-8200 flatbed scanner
Our USB scanner has been identified. It is not important
if the brand and the model do not match. The key item to be
concerned with is the
`epson:/dev/uscanner0'
field, which give us
the right backend name and the right device node.
Once the scanimage -L
command is able
to see the scanner, the configuration is complete. The device
is now ready to scan.
While scanimage(1) does allow us to perform an image acquisition from the command line, it is preferable to use a graphical user interface to perform image scanning. SANE offers a simple but efficient graphical interface: xscanimage (graphics/sane-frontends).
Xsane (graphics/xsane) is another popular graphical scanning frontend. This frontend offers advanced features such as various scanning mode (photocopy, fax, etc.), color correction, batch scans, etc. Both of these applications are useable as a GIMP plugin.
All previous operations have been done with
root
privileges. You may however, need
other users to have access
to the scanner. The user will need read and write
permissions to the device node used by the scanner. As an
example, our USB scanner uses the device node
/dev/uscanner0
which is owned by the
operator
group. Adding the user
joe
to the
operator
group will allow him to use
the scanner:
#
pw groupmod operator -m joe
For more details read the pw(8) manual page. You
also have to set the correct write permissions (0660 or 0664)
on the /dev/uscanner0
device node, by
default the operator
group can only
read the device node. This is done by adding the following
lines to the /etc/devfs.rules
file:
[system=5] add path uscanner0 mode 660
Then add the following to
/etc/rc.conf
and reboot the
machine:
devfs_system_ruleset="system"
More information regarding these lines can be found in the devfs(8) manual page.
Of course, for security reasons, you should think twice
before adding a user to any group, especially the
operator
group.
All FreeBSD documents are available for download at http://ftp.FreeBSD.org/pub/FreeBSD/doc/
Questions that are not answered by the
documentation may be
sent to <freebsd-questions@FreeBSD.org>.
Send questions about this document to <freebsd-doc@FreeBSD.org>.