7.7. 图像扫描仪

Written by Marc Fonvieille.

在 FreeBSD 中, 访问扫描仪的能力, 是通过 SANE (Scanner Access Now Easy) API 提供的。 SANE 也会使用一些 FreeBSD 设备驱动来访问扫描仪硬件。

FreeBSD 支持 SCSI 和 USB 扫描仪。 在做任何配置之前请确保您的扫描仪被 SANE 支持。 SANE 有一个 支持的设备 列表, 可以为您提供有关扫描仪的支持情况和状态的信息。 在 FreeBSD 8.X 之前版本的系统中, uscanner(4) 手册页也提供了系统支持的 USB 扫描仪列表。

本章介绍如何确定 FreeBSD 是否检测到扫描仪。然后,它概述了如何在 FreeBSD 系统上配置和使用SANE

7.7.1. 检查扫描仪

默认的 GENERIC 内核包含了支持 USB 扫描仪需要的设备驱动。 如果您决定使用一个定制的内核, 确保下面在您的内核配置文件中存在下面这些行:

device usb
device uhci
device ohci
device ehci
device xhci

要确定是否检测到USB扫描仪,请将其插入并使用dmesg确定扫描仪是否显示在系统消息缓冲区中。如果是,它应显示类似于此消息:

ugen0.2: <EPSON> at usbus0

本例在 /dev/ugen0.2检测到EPSON Perfection® 1650 USB扫描仪。

如果扫描仪使用 SCSI 接口,则了解它将使用哪个 SCSI 控制器板非常重要。根据SCSI芯片组, 可能需要自定义内核配置文件。 GENIC 内核支持常见 SCSI 控制器。请参阅/usr/src/sys/conf/NOTES,以确定要添加到自定义内核配置文件中的正确行。除了 SCSI 适配器驱动程序外,自定义内核配置文件中还需要以下行:

device scbus
device pass

验证设备是否显示在系统消息缓冲区中:

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

如果您的扫描仪没有在系统启动的时候加电, 很可能还需要强制手动检测一下,用 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) 手册页。

7.7.2. SANE设定

SANE 系统通过后端 (graphics/sane-backends) 连接扫描仪。 参考http://www.sane-project.org/sane-supported-devices.html查看扫描仪支持情况。图形扫描接口由类似Kooka (graphics/kooka) 或 XSane (graphics/xsane)提供。SANE的功能足已完成扫描仪测试。

使用二进制安装包安装后端:

# pkg install sane-backends

或由 Port 套件集安装

# cd /usr/ports/graphics/sane-backends
# make install clean

要做的第一步就是安装 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
# scanimage -L
device 'epson2:libusb:000:002' is a Epson GT-8200 flatbed scanner

在第二个示例中, libusb:000:002是后端名称 ( epson2 ),/dev/ugen0.2是扫描仪使用的设备挂载点。

或者, 如果使用的是 第 7.7.1 节 “检查扫描仪” 中的 USB 扫描仪:

# 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/中的后端配置文件,并定义所使用的扫描设备。例如,如果未检测到的扫描仪模型是一个EPSON Perfection®1650,并且它使用了epson2后端,则编辑/usr/local/etc/sane.d/epson2.conf。编辑时,添加一行,指定使用的接口和设备节点。在这种情况下,请添加以下行:

usb /dev/ugen0.2

保存编辑并验证扫描仪是否标识了正确的后端名称和设备节点:

# scanimage -L
device 'epson2:libusb:000:002' is a Epson GT-8200 flatbed scanner

一旦 scanimage -L 命令可以看到扫描仪, 配置就完成了。设备现在准备好等待扫描了。

虽然scanimage允许我们从命令行执行图片扫描, 相比之下使用图形界面来执行图片扫描会更好。 类似Kooka or XSane这样的图形前端。它们提供了更多扫描模式,色彩校正,批量扫描等功能。XSane也可作为GIMP插件使用。

7.7.3. 扫描仪权限

前面所有的操作都是用 root 权限来完成的。 然而您可能需要让其他的用户也可以访问扫描仪。 用户需要有扫描仪所用的设备节点的读和写权限。 比如,我们的 USB 扫描仪使用设备节点 /dev/ugen0.2 实际上只是到实际设备节点 /dev/usb/0.2.0 的符号连接 (可以通过查看 /dev 目录的内容来确认这一点)。 设备节点本身和这个符号连接分别属于 wheeloperator 组。 将用户 joe 添加到 这些组中, 就可以允许他使用扫描仪了, 不过, 出于显而易见的安全方面的原因, 在将用户加到特定的用户组, 特别是 wheel 组时, 无疑需三思而后行。 更好的解决方法是创建一个专门用于访问 USB 设备的组, 并让这个组的成员能够访问 USB 设备。

本例创建了一个名为usb的用户组:

# pw groupadd usb

接下来, 令 /dev/ugen0.2 符号连接和 /dev/usb/0.2.0 设备节点能够以 usb 组的身份来访问, 具体而言是配置正确的写权限 (06600664), 因为默认情况下只有属主 (root) 才能写这些设备。 这些配置是通过在 /etc/devfs.rules 文件中添加如下的设置来实现的:

[system=5]
add path ugen0.2 mode 0660 group usb
add path usb/0.2.0 mode 0666 group usb

注意:

设备节点会随着设备的增加或删除而发生变化,因此,人们可能希望使用这个规则集来代替对所有USB设备的访问:

[system=5]
add path 'ugen*' mode 0660 group usb
add path 'usb/*' mode 0666 group usb

请参见 devfs.rules(5) 以了解关于配置 devfs 文件系统的进一步信息。

另外, 您还需要在 /etc/rc.conf 文件中, 启用 devfs.rules(5) 规则集:

devfs_system_ruleset="system"

然后重启 devfs(8) 系统:

# service devfs restart

最后将用户添加到usb用户组,这样用户就能使用扫描仪了:

# pw groupmod usb -m joe

更多信息请参考pw(8)

本文档和其它文档可从这里下载: ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

如果对于FreeBSD有问题,请先阅读 文档,如不能解决再联系 <questions@FreeBSD.org>.

关于本文档的问题请发信联系 <doc@FreeBSD.org>.