当我尝试在 Debian 10(Buster)上安装时iscan-perfection-v370-bundle-2.30.4.x64.deb
,我可以看到以下消息:
expr: syntax error: missing argument after „-“
tail: invalid number of lines: „/lib/udev/rules.d/60-libsane.rules“
注意:第二条消息出现在基于语言环境的翻译中;我已将其翻译回英语。
执行/sbin/dpkg-reconfigure iscan-data
会导致完全相同的消息。
因此,扫描仪仅供超级用户使用;超级用户可以iscan
完美地执行。
输出dpkg --status iscan-data
:
Package: iscan-data
Status: install ok installed
[...]
问题是什么?如何解决?
答案1
/sbin/dpkg-reconfigure iscan-data
执行/usr/lib/iscan-data/make-policy-file
所提供的 1.39.1 版本,其中包含以下代码:
get_footer () {
case "$MODE" in
udev)
line_count=`cat $1 | wc -l`
last=`sed -n '/{idProduct}/ =' $1 | tail -n 1`
num_lines=`expr $line_count \- $last`
tail -n $num_lines $1
;;
*)
mesg "internal error: inconsistent $MODE handling" >&2
exit 3
;;
esac
}
它确定/lib/udev/rules.d/60-libsane.rules
有 86 行($line-count
),但无法识别包含 的最后一行{idProduct}
。原因是/lib/udev/rules.d/60-libsane.rules
Debian 10 中不包含任何这样的行。
不幸的是,get_header ()
显然也不get_stanza ()
适用于 Debian 10。因此,结果/lib/udev/rules.d/60-iscan.rules
是无用的。
如果没有适当的udev
配置,普通用户将无法访问扫描仪。
我的解决方案是手动创建/lib/udev/rules.d/60-iscan-manual.rules
将在软件包更新后继续存在的文件iscan-data
,但当软件包被卸载(或者其更新不再支持我的扫描仪)时,可能会产生错误匹配。它包含一个与我的特定扫描仪型号相匹配的条目。我从的输出中获取了和iscan
的值,因此请根据您的特定型号调整这些值:idVendor
idProduct
lsusb
Bus 001 Device 026: ID 04b8:014a Seiko Epson Corp.
这是我的60-iscan-manual.rules
:
# rules apply to "add" action only
# ================================
ACTION!="add", GOTO="iscan_man_rules_end"
# distribute to respective rules
# ==============================
ENV{DEVTYPE}=="usb_device", GOTO="iscan_man_usb_rules"
SUBSYSTEM=="usb_device", GOTO="iscan_man_usb_rules"
GOTO="iscan_man_rules_end"
# USB rules
# =========
LABEL="iscan_man_usb_rules"
# rules for supported USB scanners
ATTRS{idVendor}=="04b8", ATTRS{idProduct}=="014a", ENV{libsane_matched}="yes"
# disable USB autosuspend, if the device was matched
ENV{libsane_matched}=="yes", TEST=="power/control", ATTR{power/control}="on"
GOTO="iscan_man_rules_end"
# END
# ===
LABEL="iscan_man_rules_end"