FreeBSD 使用手册
上一页 | 第7章 　多媒体 | 下一页

# 7.6 图象扫描仪

撰写人 Marc Fonvieille.

## 7.6.1 介绍

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

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

## 7.6.2 内核配置

上面提到 SCSI 和 USB 接口都是支持的。 取决于您的扫描仪接口， 需要不同的设备驱动程序。

### 7.6.2.1 USB 接口

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

    device usb
    device uhci
    device ohci
    device ehci

在 FreeBSD 8.X 之前的版本中， 还需要下面这行配置：

    device uscanner

在这些 FreeBSD 版本中， 是通过设备驱动程序 uscanner(4) 来提供对 USB 扫描仪的支持的。 从 FreeBSD 8.0 开始， 这些支持则直接由 libusb(3) 函数库提供。

使用正确的内核重新引导系统之后， 插入 USB 扫描仪。 系统消息缓冲区 (使用 dmesg(8) 查看) 中会出现下面的信息， 表示检测到了扫描仪：

    ugen0.2: <EPSON> at usbus0

或者， 对于 FreeBSD 7.X 系统而言：

    uscanner0: EPSON EPSON Scanner, rev 1.10/3.02, addr 2

随 FreeBSD 版本不同， 这些信息表示扫描仪设备位于设备节点 `/dev/ugen0.2` 或 `/dev/uscanner0`。 在这个例子中， 我们使用的是 EPSON Perfection® 1650 USB 扫描仪。

### 7.6.2.2 SCSI 接口

如果您的扫描仪是 SCSI 接口的， 重要的是要知道您使用哪种 SCSI 控制器。 取决于所使用的 SCSI 芯片， 您需要调整内核配置文件。 `GENERIC` 的内核支持最常用的 SCSI 控制器。 请阅读 `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.6.3 SANE 配置

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

或者， 如果使用的是 第 7.6.2.1 节 中的 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` 会给出下面的信息：

> 例如， 对于在 第 7.6.2.1 节， 在 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 接口)，然后在文件的结尾添加指定的接口和所用的设备节点。 这种情况下， 添加下面这行：

>     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 的插件使用。

## 7.6.4 授权其他用户访问扫描仪

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

这里作为示例， 我们将会使用名为 ``usb`` 的组。 第一步是借助 pw(8) 命令来创建它：

    # pw groupadd usb

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

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

FreeBSD 7.X 用户需要将上面的配置改为使用与之对应的 `/dev/uscanner0`：

    [system=5]
    add path uscanner0 mode 660 group usb

随后您还需要在 `/etc/rc.conf` 中添加下面的内容并重新启动：

    devfs_system_ruleset="system"

关于这些配置的进一步细节请参考联机手册 devfs(8)。

现在， 只需将用户添加到 ``usb`` 组， 就可以使用扫描仪了：

    # pw groupmod usb -m joe

更多详情， 请参见联机手册 pw(8)。

上一页 | 起始页 | 下一页
安装电视卡 | 上一级 | 配置FreeBSD的内核

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

如果对于FreeBSD有问题，请先阅读文档，如不能解决再联系<questions@FreeBSD.org>.
关于本文档的问题请发信联系 <doc@FreeBSD.org>.