像任何其他的现代操作系统一样,FreeBSD 可以使用图像扫描仪。 对扫描仪的标准的访问是通过 FreeBSD Ports Collection 中的 SANE (Scanner Access Now Easy) API 提供的。 SANE 也会使用一些 FreeBSD 设备驱动来访问扫描仪硬件。
FreeBSD 支持 SCSI 和 USB 扫描仪。 在做任何配置之前请确保您的扫描仪被 SANE 支持。SANE 有一个 支持的设备列表,可以为您提供有关扫描仪的支持情况和状态的信息。 uscanner(4) 手册页也提供了一个支持的 USB 扫描仪列表。
上面提到 SCSI 和 USB 接口都是支持的。 取决于您的扫描仪接口, 需要不同的设备驱动程序。
默认的 GENERIC 内核包含了支持 USB 扫描仪需要的设备驱动。 如果您决定使用一个定制的内核, 确保下面在您的内核配置文件中存在下面这些行:
device usb device uhci device ohci device uscanner
取决于您主板上的 USB 芯片, 您只需要 device uhci 或者 device ohci 中的一种,但是两个都在 内核配置文件中是没有害处的。
如果您不想重新编译内核而且您的内核也不是 GENERIC 的, 您可以用 kldload(8) 命令直接加载 uscanner(4) 设备驱动模块:
# kldload uscanner
要在每次系统启动的时候加载这个模块, 添加下面这行到 /boot/loader.conf 中:
uscanner_load="YES"
在用正确的内核重新启动后, 或者在加载了需要的模块之后,插上您的 USB 扫描仪。 扫描仪会出现在您的系统消息缓存 (dmesg(8))中,就像这样:
uscanner0: EPSON EPSON Scanner, rev 1.10/3.02, addr 2
这表明我们的扫描仪正在使用 /dev/uscanner0 设备节点。
Note: 在 FreeBSD 4.X 上,USB 进程(usbd(8)) 必须运行来检测 USB 设备。要启用它, 添加 usbd_enable="YES" 到您的 /etc/rc.conf 文件中并重新启动。
如果您的扫描仪是 SCSI 接口的, 重要的是要知道您使用哪种 SCSI 控制器。 取决于所使用的 SCSI 芯片, 您需要调整内核配置文件。 GENERIC 的内核支持最常用的 SCSI 控制器。确保阅读 NOTES 文件(在 FreeBSD 4.x 下面是 LINT)并在您的内核配置文件中添加正确的行。 除了 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) 手册页。
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
输出显示了扫描仪的接口类型和扫描仪连接到系统上的设备节点。 生产厂家和产品型号可能没有显示,不过不重要。
Note: 一些 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(1) 无法识别扫描仪。 如果发生这种情况,您需要编辑后端配置文件定义所用的扫描仪设备。 /usr/local/etc/sane.d/ 目录包含了所有的后端配置文件。 识别的问题会出现在某些 USB 扫描仪上。
例如,对于Section 7.6.2.1中所用的 USB 扫描仪, 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/epson.conf 文件。所用的扫描仪型号是 EPSON Perfection® 1650, 这样我们知道扫描仪应使用 epson 后端。确保阅读后端配置文件中的帮助注释。 改动非常简单:注释掉导致您的扫描仪使用错误接口的所有行 (在我们这种情况下,我们将注释掉从 scsi 开始的所有行,因为我们的扫描仪使用 USB 接口),然后在文件的结尾添加指定的接口和所用的设备节点。 这种情况下,我们添加下面这行:
usb /dev/uscanner0
请确保阅读后端配置文件提供的注释以及后端手册页了解更多细节, 并使用正确的语法。我们现在可以检验扫描仪是否被识别到了:
# 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 权限来完成的。You may however, need 然而您可能需要让其他的用户也可以访问扫描仪。 用户需要有扫描仪所用的设备节点的读和写权限。 比如,我们的 USB 扫描仪使用设备节点 /dev/uscanner0,这个节点属于 operator 组。将用户 joe 添加到 operator 组会允许他使用扫描仪:
# pw groupmod operator -m joe
要了解更多细节请阅读 pw(8) 手册页。
Note: 当然,考虑安全的因素,您在添加用户到任何组, 尤其是 operator 组的时候都应该三思而后行。