在 FreeBSD 中, 访问扫描仪的能力, 是通过 SANE (Scanner Access Now Easy) API 提供的。 SANE 也会使用一些 FreeBSD 设备驱动来访问扫描仪硬件。
FreeBSD 支持 SCSI 和 USB 扫描仪。 在做任何配置之前请确保您的扫描仪被 SANE 支持。 SANE 有一个 支持的设备 列表, 可以为您提供有关扫描仪的支持情况和状态的信息。 在 FreeBSD 8.X 之前版本的系统中, uscanner(4) 手册页也提供了系统支持的 USB 扫描仪列表。
上面提到 SCSI 和 USB 接口都是支持的。 取决于您的扫描仪接口, 需要不同的设备驱动程序。
默认的 GENERIC
内核包含了支持 USB 扫描仪需要的设备驱动。
如果您决定使用一个定制的内核,
确保下面在您的内核配置文件中存在下面这些行:
在 FreeBSD 8.X 之前的版本中, 还需要下面这行配置:
在这些 FreeBSD 版本中, 是通过设备驱动程序 uscanner(4) 来提供对 USB 扫描仪的支持的。 从 FreeBSD 8.0 开始, 这些支持则直接由 libusb(3) 函数库提供。
使用正确的内核重新引导系统之后, 插入 USB 扫描仪。 系统消息缓冲区 (使用 dmesg(8) 查看) 中会出现下面的信息, 表示检测到了扫描仪:
或者, 对于 FreeBSD 7.X 系统而言:
随 FreeBSD 版本不同, 这些信息表示扫描仪设备位于设备节点
/dev/ugen0.2
或
/dev/uscanner0
。 在这个例子中, 我们使用的是
EPSON
Perfection® 1650 USB 扫描仪。
如果您的扫描仪是 SCSI 接口的,
重要的是要知道您使用哪种 SCSI 控制器。
取决于所使用的 SCSI 芯片,
您需要调整内核配置文件。
GENERIC
的内核支持最常用的
SCSI 控制器。 请阅读
NOTES
文件并在您的内核配置文件中添加正确的行。
除了 SCSI 适配器驱动之外,
您还需要在内核配置文件中增加下述配置:
在正确地联编并安装了内核之后, 就应该可以在系统启动时, 从系统消息缓冲中看到这些设备:
如果您的扫描仪没有在系统启动的时候加电, 很可能还需要强制手动检测一下,用 camcontrol(8) 命令执行一次 SCSI 总线扫描:
#
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然后扫描仪就会出现在 SCSI 设备列表里:
#
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)有关 SCSI 设备的更多细节, 可查看 scsi(4) 和 camcontrol(8) 手册页。
SANE 系统分为两部分:
后端 (graphics/sane-backends
)
和前端 (graphics/sane-frontends
)。
后端部分提供到扫描仪自身的访问。
SANE 的
支持设备列表详细说明了哪一个后端可以支持您的图象扫描仪。
如果您想使用您的设备,就必须为您的扫描仪选定正确的后端。
前端部分提供图形化的扫描界面
(xscanimage)。
要做的第一步就是安装 graphics/sane-backends
port 或者
package。然后,使用 sane-find-scanner
命令来检查 SANE
系统做的扫描仪检测:
#
sane-find-scanner -q
found SCSI scanner "AGFA SNAPSCAN 600 1.10" at /dev/pass3输出显示了扫描仪的接口类型和扫描仪连接到系统上的设备节点。 生产厂家和产品型号可能没有显示,不过不重要。
一些 USB 扫描仪需要您加载固件,后端的手册页中有这方面的解释。 您也应该阅读 sane-find-scanner(1) 和 sane(7) 手册页。
现在我们需要检查扫描仪是否可以被扫描前端识别。
默认情况下,
SANE 后端自带一个叫做
scanimage(1) 的命令行工具。
这个命令允许您列出设备以及从命令行执行图片扫描。
-L
选项用来列出扫描仪设备:
#
scanimage -L
device `snapscan:/dev/pass3' is a AGFA SNAPSCAN 600 flatbed scanner或者, 如果使用的是 第 8.6.2.1 节 “USB 接口” 中的 USB 扫描仪:
#
scanimage -L
device 'epson2:libusb:/dev/usb:/dev/ugen0.2' is a Epson GT-8200 flatbed scanner上述输出来自于 FreeBSD 8.X 系统。
'epson2:libusb:/dev/usb:/dev/ugen0.2'
给出了扫描仪所使用的后台名字 (epson2
)
和设备节点 (/dev/ugen0.2
)。
如果没有输出任何信息, 或提示没有识别到扫描仪,
则说明 scanimage(1) 无法识别它。
如果发生这种情况, 您就需要修改扫描仪支持后端的配置文件,
并定义所使用的扫描设备。 /usr/local/etc/sane.d/
目录中包含了所有的后端配置文件。
这类识别问题经常会在某些 USB
扫描仪上发生。
linkend="scanners-kernel-usb"> 中所使用的 USB 扫描仪,
sane-find-scanner
会给出下面的信息:
例如, 对于在 第 8.6.2.1 节 “USB 接口”, 在 FreeBSD 8.X 中,
扫描仪已经被很好地识别并能够正常工作了; 而对于更早版本的 FreeBSD
而言 (使用 uscanner(4) 驱动程序)
sane-find-scanner
则会给出这样的信息:
#
sane-find-scanner -q
found USB scanner (UNKNOWN vendor and product) at device /dev/uscanner0扫描仪被正确的探测到了,它使用 USB
接口,连接在
/dev/uscanner0
设备节点上。
我们现在可以检查看看扫描仪是否被正确的识别:
#
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).由于扫描仪没有识别成功, 我们就需要编辑
/usr/local/etc/sane.d/epson2.conf
文件。 所用的扫描仪型号是 EPSON
Perfection® 1650,
这样我们知道扫描仪应使用 epson
后端。确保阅读后端配置文件中的帮助注释。
改动非常简单:注释掉导致您的扫描仪使用错误接口的所有行
(在我们这种情况下,我们将注释掉从
scsi
开始的所有行,因为我们的扫描仪使用 USB
接口),然后在文件的结尾添加指定的接口和所用的设备节点。
这种情况下, 添加下面这行:
请确保阅读后端配置文件提供的注释以及后端手册页了解更多细节, 并使用正确的语法。我们现在可以检验扫描仪是否被识别到了:
#
scanimage -L
device `epson:/dev/uscanner0' is a Epson GT-8200 flatbed scanner我们的 USB 扫描仪被识别到了。 此时如果商标和型号与扫描仪的实际情况不符,
并不会带来太大的麻烦。 您需要关注的是
`epson:/dev/uscanner0'
字段,
这个给了我们正确地后端名称和正确的设备节点。
一旦 scanimage -L
命令可以看到扫描仪,
配置就完成了。设备现在准备好等待扫描了。
scanimage(1) 允许我们从命令行执行图片扫描,
相比之下使用图形用户界面来执行图片扫描会更好。
SANE 提供了一个简单但实用的图形界面:
xscanimage
(graphics/sane-frontends
)。
Xsane (graphics/xsane
)是另一个流行的图形扫描前端。
这个前端提供了一些高级特性,
比如多样的扫描模式(photocopy,fax,等。),
色彩校正,批量扫描,等等。这两个程序都可以作为
GIMP
的插件使用。
前面所有的操作都是用
root
权限来完成的。
然而您可能需要让其他的用户也可以访问扫描仪。
用户需要有扫描仪所用的设备节点的读和写权限。
比如,我们的 USB 扫描仪使用设备节点
/dev/ugen0.2
实际上只是到实际设备节点
/dev/usb/0.2.0
的符号连接
(可以通过查看 /dev
目录的内容来确认这一点)。 设备节点本身和这个符号连接分别属于
wheel
和
operator
组。 将用户
添加到
这些组中, 就可以允许他使用扫描仪了, 不过,
出于显而易见的安全方面的原因, 在将用户加到特定的用户组, 特别是
joe
wheel
组时, 无疑需三思而后行。
更好的解决方法是创建一个专门用于访问 USB 设备的组,
并让这个组的成员能够访问 USB 设备。
这里作为示例, 我们将会使用名为
的组。
第一步是借助
pw(8) 命令来创建它:usb
#
pw groupadd usb
接下来, 令 /dev/ugen0.2
符号连接和 /dev/usb/0.2.0
设备节点能够以 usb
组的身份来访问,
具体而言是配置正确的写权限 (0660
或
0664
), 因为默认情况下只有属主 (root
)
才能写这些设备。 这些配置是通过在
/etc/devfs.rules
文件中添加如下的设置来实现的:
FreeBSD 7.X 用户需要将上面的配置改为使用与之对应的
/dev/uscanner0
:
随后您还需要在
/etc/rc.conf
中添加下面的内容并重新启动:
关于这些配置的进一步细节请参考联机手册 devfs(8)。
现在, 只需将用户添加到
组,
就可以使用扫描仪了:usb
#
pw groupmod usb -m joe
更多详情, 请参见联机手册 pw(8)。
本文档和其它文档可从这里下载: ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.
如果对于FreeBSD有问题,请先阅读
文档,如不能解决再联系
<questions@FreeBSD.org>.
关于本文档的问题请发信联系
<doc@FreeBSD.org>.