文档中讨论的扫描仪接口主要有四种类型:SCSI、USB、并行端口、IEEE 1394。正如 SANE 项目率先实现的那样,Linux 系统支持大多数扫描仪。这与 TWAIN 不同,如果您在诸如 Microsoft Windows™ 等其他操作系统下使用过扫描仪设备,您可能对 TWAIN 很熟悉。后一种协议将驱动程序和用户界面结合在一起,使其无法在该专有的图形环境之外使用。因此,SANE,即 Scanner Access Now Easy(现在轻松访问扫描仪),是为了在 Un*x 环境下使用而构思出来的(但绝不仅限于此)。SANE 标准允许驱动程序与应用程序之间的模块化,并允许更大的灵活性和可移植性。使用 SANE,您可以使用命令行扫描设备,您可以设计自己的前端应用程序来使用 SANE 后端,通过网络访问扫描仪,甚至可以访问相机和其他 video4linux 设备来获取照片。因此,SANE 是真正的 SANE,而 TWAIN 则不然。
注意:在继续阅读之前,您应该查看 SANE 首页 http://www.sane-project.org/sane-mfgs.html,查看您的扫描仪设备是否受支持。或者,您可以使用 SANE 支持的扫描仪搜索引擎。
如果您拥有集成设备,即具有扫描仪、打印机和/或传真功能的设备,您可以按照以下步骤,像使用标准扫描仪一样,使用适当的接口进行扫描仪功能操作。HP Officejet 用户应查阅 HP Officejet Linux 驱动程序项目站点,该站点详细介绍了如何在 Linux 中使这种集成设备的各种功能正常工作。
这些扫描仪由 SCSI 控制器管理。一般来说,只要 SCSI 硬件受支持,几乎任何使用 SCSI 接口的扫描仪都应该可以工作。如果您不确定 SCSI 控制器是否受支持,您应该查看 硬件 HOWTO 的 SCSI 控制器列表。如果您的 SCSI 控制器是与扫描仪捆绑销售的,则您的硬件可能不受支持或仅部分受支持,因为随附的 SCSI 卡可能无法作为完整的 SCSI 控制器运行。
如果您在配置 SCSI 扫描仪时遇到任何困难,您应该查阅 man sane-scsi。
您可能已经知道通用串行总线 (USB) 连接器的外观以及它的插入位置。如果您有 USB 扫描仪,您的硬件很可能在 Linux 中受到支持。第 2.5 节 介绍了启用 USB 子系统和 USB 扫描仪支持的信息。
总的来说,如果有一个后端支持并行端口扫描仪,它们就可以工作,但是如果您的设备也有 USB 端口(现在发布的大多数新扫描仪都有)和一个可用的 USB 后端,我们强烈建议您使用 USB,因为它可能更容易配置。
如果您的型号只有并行端口接口和专有或非标准控制器,您可能运气不佳。如果您发现有受支持的后端用于您的扫描仪的并行端口接口,那么您应该查看 第 2.8 节。
截至本文撰写之时,某些 IEEE 1394 扫描仪受到支持,特别是尼康和爱普生制造的扫描仪。自 2.4 系列 Linux 内核以来,IEEE 1394 接口已获得支持。IEEE 1394 扫描仪需要您的系统配备 IEEE 1394 PCI 卡或主板 IEEE 1394 端口,并且内核中或作为加载模块启用了 IEEE 1394 支持。您应该查看 第 2 节 中按制造商链接的 SANE 支持设备,并阅读硬件旁边的手册页(如果有),了解与您的特定硬件相关的任何问题。
本节曾经的标题是 “USB 扫描仪内核支持”,但是 libusb 的出现有望使对启用 USB 扫描仪的内核的需求变得不必要。Libusb 是一个项目,旨在创建一个用户空间(即非内核)库,以访问 USB 设备,而与操作系统无关。有关这些差异的更多信息,请查阅 man sane-usb。
如果您更喜欢更传统的内核支持 USB 扫描仪,请继续阅读 第 2.7.2 节,但请注意,在内核版本 2.6.0 及更高版本中,内核对 USB 扫描仪设备的支持被放弃,转而支持 libusb。目前大多数发行版都在其稳定分支中提供 libusb(有些默认安装它),因此,如果您还没有内核对 USB 扫描仪设备的支持,那么您可能只需要安装 libusb 包即可访问您的设备。您必须在内核中启用 USB 设备文件系统支持,大多数发行版都这样做。要确定,请在命令行发出以下命令
$ cat /proc/filesystems |
您应该看到(其中包括)
nodev usbdevfs nodev usbfs |
您可能需要挂载 usbdevfs 以启用它并查看设备文件,您可以使用 mount -t usbdevfs none /proc/bus/usb 在命令行执行此操作。在内核扫描仪支持静态启用或模块加载的情况下,请勿尝试使用 libusb;您一次只能使用一个。
您可以从 Linux 发行版中获取以下格式的 libusb 包:.rpm, .tgz或.deb格式。如果您计划从源代码编译自己的 SANE 二进制文件并启用 libusb 支持,您还需要libusb-dev包。
SCSI、USB 和并行端口通用接口支持以及 USB 扫描仪支持(如果不使用 libusb)都需要内核支持。您的默认内核可能已经支持您需要的功能,判断方法是使用 dmesg 命令并查找确认在启动时加载了相关驱动程序的提示。如果您没有看到,则驱动程序可能以模块的形式存在(但不一定已加载)。要查找,您可以在命令行中键入以下内容
$ ls -R /lib/modules/X.XX/kernel/drivers |
其中“X.XX”是您的内核版本号。以下输出是在启用 USB 扫描仪的内核中找到的示例(尽管为了简洁起见,只编辑了相关行)
./usb: scanner.o usbcore.o |
(给新手的提示:如果 dmesg 或上面的模块列表中的信息滚动太快,您可以尝试将输出管道传输到“less”(如果您没有 less,则为“more”):ls -R /lib/modules/X.XX/kernel/drivers | less ,或者将其捕获到文件中:ls -R /lib/modules/X.XX/kernel/drivers > file.txt,其中“file.txt”将包含可以使用 cat [file] | less 访问的信息。)
以下信息是根据扫描仪接口类型安排的。如果您的内核不包含必要的支持,您可以随时重新编译内核。如果您不熟悉编译自己的内核的过程,我建议您查阅 Kernel HOWTO 以获取更多信息。
如果您有 SCSI 类型接口,当调用 make config、make menuconfig 或 make xconfig 等时,请注意,除了支持特定 SCSI 适配器的选项外,还需要通用 SCSI 设备支持。此类通用设备通常命名为 /dev/sg0, /dev/sg1.... 由于您可能已经从 受支持的 SCSI 控制器列表 中知道您的卡是否受支持,因此在确认您的内核支持您的硬件和通用 SCSI 设备后,只需加载相应的模块即可
# modprobe CARD_MODULE_NAME |
# modprobe sg |
...以 root 身份。请注意,有报告称 ide-scsi 仿真支持(用于 ATAPI-eide CDRW 支持)会导致扫描仪访问出现问题;如果您知道您的硬件受支持,但无法正常工作,请尝试卸载 ide-scsi 模块
rmmod ide-scsi |
...尽管有人向我报告说,自最近的内核(2.4.20+)以来,这个问题已经得到修复。
对于 USB 扫描仪支持,您需要在内核中具有 USB 子系统支持,无论是 usb-ohci、usb-ehci 还是您的系统首选的任何 USB 驱动程序协议。自 2.2 系列后期以来,Linux 内核中就已存在 USB 支持。有关 USB 支持的更深入讨论,请查阅 linux-usb 项目站点。如果您使用的是 2.4 系列或更早版本的内核,并且希望使用内核 USB 扫描仪支持来访问您的扫描仪(而不是 第 2.6 节 中概述的 libusb),您需要启用“USB 扫描仪支持”,如果存在,则在 dmesg 或 lsmod(如果是加载的模块)中可见。如果您想了解加载了哪些模块,请在命令行或 xterm 中键入以下内容
# lsmod |
如上面的提示所示,您需要具有 root 权限才能执行此操作。您应该获得包括(但不限于)以下内容的输出
cdrom 29312 0 (autoclean) [sr_mod] usb-ohci 17888 0 (unused) usbcore 56768 0 [scanner ibmcam usbvideo usb-ohci] scanner 8704 0 |
如果您没有scanner加载,并且您知道您的内核中具有作为模块的 USB 扫描仪支持,请尝试直接加载它
# modprobe -v scanner |
...此时您应该看到类似以下内容
Using /lib/modules/2.4.20/kernel/drivers/usb/scanner.o |
通过在scanner中放置条目/etc/modules(请注意,这因发行版而异),您可以使模块在启动时自动加载。然后,您可以通过检查 syslog 或使用 dmesg | less 查看启动时记录来确认模块已加载),您应该看到如下条目
May 16 23:17:25 K7 kernel: usb.c: registered new driver usbscanner May 16 23:17:25 K7 kernel: scanner.c: 0.4.6:USB Scanner Driver |
到现在为止,您可能已经意识到并行端口扫描仪的配置可能有问题。同样,如果您的设备同时具有并行端口接口和 USB 接口,您应该考虑选择 USB 以使设置过程更简单。
对于 2.2 和 2.4 内核系统,必须静态或作为模块启用并行端口支持(默认情况下,标准内核通常已启用此功能)。在开始此过程之前,您可能需要阅读 有关 Linux 内核下并行端口设备支持的更多通用信息。要确定模块parport是否已加载,您可以检查dmesg文件或使用如上所述的 lsmod 。使用 dmesg | less,您应该看到(在许多其他行中)以下内容
Mar 3 08:00:25 K7 kernel: parport0: PC-style at 0x378 (0x778) [PCSPP,TRISTATE] Mar 3 08:00:25 K7 kernel: parport0: irq 7 detected |
如果您要编译自己的内核,请启用“Parallel Port support”(并行端口支持)。您应该启用“IEEE 1284 transfer modes”(IEEE 1284 传输模式),如果您有 x86 类型架构,您还应该启用“PC-style hardware”(PC 样式硬件)。
如果在您尝试加载模块时 modprobe 返回错误,请注意,您可能需要在调用 modprobe 时确定并提供硬件地址。对于 x86 系统,最常见的地址是 0x378;0x278 和 0x3BC 是集成或 ISA 并行端口的其他可能地址。附加 PCI 并行端口可能具有不寻常的基地址。也可以使用 parport_pc 或 parport_arc 模块安排多个设备,但这超出了本文档的范围。警告:在命令行输入此信息之前,请确保您拥有正确的地址,否则您的机器可能会变得不稳定、崩溃或以其他方式崩溃。
您的并行端口应设置为首选 “EPP” 模式,或者选择 ECP/EPP。“双向”(也称为 “BPP” 或 “PS/2”)可能有效,但速度会慢得多。“单向”模式不适合扫描。上述设置通常可以通过 BIOS 菜单访问,至少在 x86 系统上是这样。
根据您的并行端口扫描仪是否需要 SCSI 支持,您可能需要为 parport-SCSI 支持修补您的内核。您可以在 www.torque.net/parport/ppscsi.html 找到该工具套件。如果需要,您还需要启用以下功能
SCSI 支持
SCSI 通用支持
对 ppSCSI 控制器的核心模块的支持(APA-348 和 T348 的 t348,APA-358 和 T358 的 t358,较旧的 Shuttle EPSA-2 的 epsa2,Shuttle EPST 和 APA-1350 的 epst,OnSpec 90c26 的 onscsi 以及 SparCSI 和 ParaSCSI 的 sparcsi)
一旦编译完成,只需加载相应的模块即可。