Linux 版 EPSON Image Scan!(Perfection V370 版 iscan 2.30.4)无法在 Debian 10(Buster)上正确安装

Linux 版 EPSON Image Scan!(Perfection V370 版 iscan 2.30.4)无法在 Debian 10(Buster)上正确安装

当我尝试在 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.rulesDebian 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的值,因此请根据您的特定型号调整这些值:idVendoridProductlsusb

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"

相关内容