SANE

出自 ArchWiki

SANE (Scanner Access Now Easy) 提供了一个库和一个命令行工具,用于在 GNU/Linux 下使用扫描仪。

安装

安装 sane 软件包。大多数前端和驱动程序无论如何都会将其作为依赖项拉取,因此通常没有必要显式安装它。

扫描仪驱动

许多现代扫描仪都支持“无驱动”扫描。[1] 您可以在 sane-airscan GitHubApple AirPrint 设备上查找您的设备的兼容性。

安装 sane-airscan 软件包,如果已知扫描仪在“无驱动”模式下工作。如果您的扫描仪使用 USB,也请安装 ipp-usb 软件包并 启动/启用 ipp-usb.service 以允许通过 USB 连接使用 IPP 协议。

否则,请查看 SANE - 支持的设备SANE/扫描仪特定问题,以查看您的扫描仪是否可以使用不同的驱动程序。

大多数扫描仪应该开箱即用。如果您的扫描仪无法工作,请参阅 SANE/扫描仪特定问题 以获取安装说明。

注意: 一些驱动程序,包括 sane-airscan,使用多播搜索网络扫描仪。请参阅 iptables#允许组播流量 以正确配置您的防火墙。

前端

存在许多 SANE 的前端,可以在 SANE 项目网站上找到非详尽列表。

https://apps.gnome.org/SimpleScan/ || simple-scan
  • Skanlite — 简单的图像扫描应用程序,除了扫描和保存图像外,什么都不做,基于 KSane 后端。属于 kde-graphics 的一部分。
https://apps.kde.org/skanlite/ || skanlite
  • Skanpage — 一个简单的扫描应用程序,专为多页扫描和保存文档和图像而设计。属于 kde-utilities 的一部分。
https://apps.kde.org/skanpage/ || skanpage
  • XSane — 功能齐全的基于 GTK 的前端,看起来有点旧,但提供了扩展的功能。
http://www.xsane.org/ || xsaneAUR
  • Xsane-gimp — 一个 GIMP 插件,用于从 GIMP 使用 xsane 进行扫描。
https://gitlab.com/sane-project/frontend/xsane || xsane-gimpAUR
  • Scantailor — 一个扫描应用程序,可与项目一起使用,并允许在扫描过程中进行实时编辑。
https://github.com/4lex4/scantailor-advanced || scantailor-advanced

一些 OCR 软件 可以使用 SANE 扫描图像:gImageReader、gscan2pdf、Linux-Intelligent-Ocr-Solution、OCRFeederPaperwork

注意
  • 已知在 16 位色彩深度模式下使用 XSane 直接扫描到 PDF 会产生 损坏的文件,并且 pacman 输出中的注释会警告这一点。已知 8 位模式可以工作。

本文或本节的事实准确性存在争议。

原因: skanlite 不需要处理 mDNS。只要 mDNS 主机名解析 设置正确,并且扫描仪的地址指定为 hostname.local,它就应该可以工作。这看起来像是 hplip 的限制/错误。(在 Talk:SANE 中讨论)
  • 使用前端并不意味着您不必应用一些技巧。对于通过 mDNS 配置的设备尤其如此。例如,skanlite 需要在命令行中指定其他信息,以便正确检测网络扫描仪,因为它无法处理 mDNS。以下是 HP Officejet Pro L7590 的示例:skanlite --device "hpaio:/net/Officejet_Pro_L7500?ip=192.168.0.17"

验证

现在您可以尝试查看 sane 是否识别您的扫描仪。

$ scanimage -L

如果失败,请以 root 身份再次运行该命令以检查权限问题。如果仍然失败,请检查您的扫描仪是否已插入计算机。您可能还需要拔下/插入扫描仪,以便 /usr/lib/udev/rules.d/65-sane.rules 识别您的扫描仪。

现在您可以查看它是否真正工作

$ scanimage --format=png --output-file test.png --progress

如果扫描失败并显示消息 scanimage: sane_start: Invalid argument,您可能需要指定设备。

$ scanimage -L
device `v4l:/dev/video0' is a Noname Video WebCam virtual device
device `pixma:04A91749_247936' is a CANON Canon PIXMA MG5200 multi-function peripheral

然后您需要运行

$ scanimage --device "pixma:04A91749_247936" --format=tiff --output-file test.tiff --progress

Sane 为许多扫描仪类型提供了许多特殊的后端选项。要查看您的设备的这些选项是什么

$ scanimage -A

固件

注意: 只有当您需要将固件上传到扫描仪时,才需要本节。

固件通常具有 .bin 扩展名。

首先,您需要将固件放在安全的地方,建议将其放在 /usr/share/sane/ 的子目录中。

然后您需要告诉 sane 固件在哪里

  • sane 支持的设备列表中找到您的扫描仪的后端名称。
  • 打开文件 /etc/sane.d/backend-name.conf
  • 确保固件条目未注释,并让文件路径指向您放置扫描仪固件文件的位置。确保 scanner 组的成员可以访问 /etc/sane.d/backend-name.conf 文件。

如果您的扫描仪的后端不是 sane 软件包的一部分(例如 hpaio.conf,它是 hplip 的一部分),您需要在 /etc/sane.d/dll.d/etc/sane.d/dll.conf 中取消注释相关的条目。

在网络上共享您的扫描仪

您可以与网络上使用 sanexsane 或启用 xsane 的 GIMP 的其他主机共享您的扫描仪。要设置服务器,首先指示允许哪些主机访问您的网络。

根据您的喜好更改 /etc/sane.d/saned.conf 文件,例如

# required
localhost
# allow local subnet
192.168.0.0/24

其次,在您的服务器上安装、启动并启用 avahi-daemon(如果尚未激活),以便可以通过多播找到您的扫描仪。或者,如果您的扫描仪受 Airscan 支持,则安装 sane-airscan 软件包是一种替代方案。

如果您使用 iptables插入 nf_conntrack_sane 模块,以让防火墙跟踪 saned 连接。

Conntrack 助手似乎默认禁用。[2] 您可以使用以下命令激活它

# echo 1 > /proc/sys/net/netfilter/nf_conntrack_helper

要永久配置此项,请为 nf_conntrack 模块设置 nf_conntrack_helper=1 选项,请参阅 内核模块#使用 modprobe.d

现在启动/启用 saned.socket。您的扫描仪现在可以通过网络使用。有关更多信息,请参阅 saned(8)

注意: saned 有意拒绝共享使用 net: 后端(包括某些 USB 扫描仪)的扫描仪。在 FS#54786 中有一个允许这样做的粗略补丁,但请注意,它可能会在某些网络上引起问题。检查服务器上 scanimage -L 的输出以查看扫描仪 URL。

从远程工作站访问您的扫描仪

本文或本节正在考虑删除。

原因: 一旦共享本地扫描仪(如上所述),远程工作站应遵循正常说明(即安装的 #扫描仪驱动)。静态 IP 和 avahi-daemon 应移至该部分。(在 Talk:SANE 中讨论)
注意: 一些网络扫描仪需要不同的方法。请参阅 SANE/扫描仪特定问题

您可以从远程 Arch Linux 工作站访问启用网络的扫描仪。

首先,在 /etc/sane.d/net.conf 文件中指定服务器的主机名或 IP 地址

# static IP address
192.168.0.1
# or host name
stratus

其次,根据您在服务器端配置的内容,在远程工作站上安装、启动并启用 avahi-daemon 或安装 sane-airscan。

现在测试您的工作站的连接

$ scanimage -L

网络扫描仪现在也应该在某些 前端 中显示。

Windows 客户端

由于 SANE 的 Windows 端口似乎 不受支持、过时且难以获取,您可以尝试 SANEWinDSSaneTwain(旧)。

故障排除

另请参阅 SANE/扫描仪特定问题

无效参数

如果您在使用 xsane 或其他 sane 前端时收到“无效参数”错误,这可能是由以下原因之一造成的

缺少固件文件

未为使用的扫描仪提供固件文件(详情请参阅 #固件)。

错误的固件文件权限

所用固件文件的权限错误。 使用以下命令更正它们

# chown root:scanner /usr/share/sane/SCANNER_MODEL/FIRMWARE_FILE
# chmod ug+r /usr/share/sane/SCANNER_MODEL/FIRMWARE_FILE

多个后端声称拥有扫描仪

可能会发生多个后端支持(或声称支持)您的扫描仪的情况,而 sane 选择了一个最终不支持的后端(扫描仪将不会被 scanimage -L 显示)。 这发生在较旧的 Epson 扫描仪和 epson2 resp. epson 后端上。 在这种情况下,解决方案是在 /etc/sane.d/dll.conf 中注释掉不需要的后端。 在 Epson 案例中,这将是注释掉 epson2

/etc/sane.d/dll.conf
#epson2
epson

独立的 iscanAUR epkowa 后端也可能干扰您的 snapscan 后端(Epson 扫描仪)。 您可能在使用 scanimage -L 命令后立即收到此错误。 再次启动扫描仪应用程序(如 xsaneAUR)也可以解决问题。 否则,请检查您的 /etc/sane.d/epkowa.conf 是否有错误的配置,或删除 iscanAUR 软件包。

通过 xHCI 通信不起作用(较旧的扫描仪型号)

当通过 USB3 端口连接时,一些较旧的扫描仪型号无法工作。 如果您遇到此问题,请尝试在启动前端之前设置 SANE_USB_WORKAROUND=1 环境变量[3][4]

如果这不起作用,请尝试以下解决方法之一

  • 如果可用,请使用 USB2 端口代替 USB3 端口。
  • 通过 BIOS/EFI 禁用 xHCI。 随后将使用 eHCI,与扫描仪的通信将正常工作。 缺点是任何端口都无法达到 USB3 速度。
  • 在(某些)英特尔芯片组上,可以使用 setpci 命令将特定的 USB 端口路由到 xHCI 或 eHCI 控制器。 有关更多信息,请参阅 force-a-single-usb-3-0-port-to-work-as-usb-2-0 (向下滚动到显示“setpci”的位置)。 这样就可以使用简单的 shell 脚本切换单个 USB 端口。
  • 如果扫描仪支持,则通过网络连接扫描仪。

防火墙

当网络扫描扫描仪挂起时,则发生无效参数错误。

saned 使用数据端口范围,因此您必须启用与 6566/tcp 的连接以及来自 /etc/sane.d/saned.conf 的 data_portrange,或者为 sane 使用 conntrack 防火墙模块以启用数据端口,如上所述。

启动缓慢

如果您遇到启动缓慢的问题(例如 xsanescanimage -L 没有几乎立即返回结果),您不使用的驱动程序之一可能是罪魁祸首。

您可以通过编辑 /etc/sane.d/dll.conf 并注释掉您不使用的扫描仪驱动程序来解决此问题。 您可以使用 scanimage -L 来确定您需要哪些驱动程序

$ scanimage -L
device `brother4:net1;dev0' is a Brother DCP-L2550DW
device `v4l:/dev/video0' is a Noname Logitech Webcam C925e virtual device
device `escl:http://192.168.1.2:80' is a Brother DCP-L2550DW series adf,platen scanner

输出中 `: 之间的部分指示设备的驱动程序。 例如,如果您只想使用 Brother 扫描仪,而不是 网络摄像头 或通用扫描仪驱动程序,您可以注释掉 /etc/sane.d/dll.conf 中除 brother4 驱动程序之外的所有内容。

启动缓慢问题的另一个原因可能在于 /etc/sane.d/backend-name.conf 中的驱动程序特定配置文件; 例如,据报道,注释掉 /etc/sane.d/epson2.conf 中的 net autodiscovery 可以解决使用 USB 的 Epson 扫描仪的这些启动缓慢问题。

设备忙

本文或本节的事实准确性存在争议。

原因: 用户不应需要加入 scanner 组(参见 用户和组#Pre-systemd 组)(在 Talk:SANE 中讨论)

如果您的 USB 设备通过 scanimage -L 列出,但启动测试 scanimage pixma:04A9173E_11DAD1 --format=tiff --output-file test.tiff 始终返回“Device busy”错误,您可以尝试将您的用户名添加到 scanner 组 usermod -a -G scanner yourusername,然后通过在 /etc/modprobe.d/no-usblp.conf 中写入 blacklist usblp 来禁用 usblp 内核模块(它阻止 usblp 加载以支持扫描,xsane 和相关工具不需要,也可能与 CUPS 冲突)。 重新启动完成操作。[5]

除此之外,如果扫描模式设置为“计算机”,一些 Cannon 打印机将返回“device busy”。 将其设置为“远程扫描仪”模式应解决此问题。[6]

权限问题

使用 systemd,scannerlp 组已弃用。 无需将您的用户添加到这些组。 有关详细信息,请参见 用户和组#Pre-systemd 组

您也可以尝试更改 usb 设备的权限,但这不推荐,更好的解决方案是修复 Udev 规则,以便识别您的扫描仪。

首先使用 lsusb 检查连接的 usb 设备

Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 003: ID 04d9:1603 Holtek Semiconductor, Inc.
Bus 003 Device 002: ID 04fc:0538 Sunplus Technology Co., Ltd
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 006: ID 03f0:2504 Hewlett-Packard
Bus 001 Device 002: ID 046d:0802 Logitech, Inc. Webcam C200
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

在我们的示例中,我们看到扫描仪:Bus 001 Device 006: ID 03f0:2504 Hewlett-Packard。 这里 03f0vendorID2504productID

或者,以 root 权限运行 sane-find-scanner 也会给您相同的 vendorIDproductID

现在打开 /usr/lib/udev/rules.d/65-sane.rules,查看是否有包含您扫描仪的 vendorIDproductID 的行。 如果没有任何行,请创建新文件 /etc/udev/rules.d/65-sane-missing-scanner.rules,内容如下

ATTRS{idVendor}=="vendorID", ATTRS{idProduct}=="productID", MODE="0664", GROUP="lp", ENV{libsane_matched}="yes"

保存文件,拔出并重新插入扫描仪,文件权限现在应该正确了。

本文或本节的事实准确性存在争议。

原因: 需要将扫描仪添加到正确的后端文件,hp4200.conf 不适用于任何扫描仪。 (在 Talk:SANE 中讨论)

另一个技巧是,您可以将您的设备(扫描仪)添加到后端文件中

usb 0x03f0 0x2504 添加到 /etc/sane.d/hp4200.conf,使其看起来像这样

#
# Configuration file for the hp4200 backend
#
#
# HP4200
#usb 0x03f0 0x0105
usb 0x03f0 0x2504

并行端口扫描仪

连接到并行端口的所有设备都假定为打印机,并被赋予 lp 组。 创建一个 udev 规则以将相关的并行端口标记为 libsane_matched,或者将您的用户添加到 lp 用户组。 CUPS 也使用 lp 组进行对配置文件的只读访问,因此将用户添加到 lp 组存在潜在的安全隐患 - 有关更多信息,请参见 CUPS#连接接口

avahi-daemon 不是强制性的

本文或本节需要语言、wiki 语法或样式方面的改进。 请参阅 Help:Style 以供参考。

原因: 这是配置,而不是故障排除。 (在 Talk:SANE 中讨论)

某些扫描仪应用程序可能要求您在启动时启动 avahi-daemon。 这实际上是 SANE 的原因。 如果由于某种原因您不想启用 avahi-daemon 服务,因为您使用有线扫描仪,或者因为您的扫描仪驱动程序已经在设置时支持网络,则注释掉 SANE 配置中的 net 后端

/etc/sane.d/dll.conf
# The next line enables the network backend; comment it out if you do not
# need to use a remote SANE scanner over the network -- see sane-net(5)
# and saned(8) for details.
#net

然后重新启动 saned 守护程序。

设备 I/O 期间出错

如果您在使用 HP 扫描仪尝试扫描时收到 SANE: Error during device I/O (code=9),请确保您已安装 hplip-pluginAUR(请参阅 CUPS/打印机特定问题#HP)。

提示和技巧

scanimage 输出不令人满意

scanimage 输出不令人满意时,可以运行

$ scanimage --all-options

以请求列出后端公开的所有可用选项。 输出可能暗示不令人满意的输出是由于默认值太低,并说明可以显式设置哪些值可能会改善结果。

另请参阅