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. A line showing the detection of your scanner should appear in the
system message buffer (dmesg(8)):
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 and installed, you should be able to see
the devices in the 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 is split 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 step is to 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.
Note: 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
devices:
# 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 Section 7.6.2.1, 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 scanner. 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 usable 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.
Note: Of course, for security reasons, you should think twice before adding a
user to any group, especially the operator group.