diff options
author | Luiz Angelo Daros de Luca <luizluca@gmail.com> | 2019-04-30 01:32:59 -0300 |
---|---|---|
committer | Luiz Angelo Daros de Luca <luizluca@gmail.com> | 2019-05-02 03:31:45 -0300 |
commit | 7dd2e1776eef60a8a5c739b5cad67d649946d393 (patch) | |
tree | a9e862e73e304706aec72d98960f6627d20276a9 /utils/sane-backends/files | |
parent | fedc5cf5a45cd1cd6a4440724729c46d61ac3523 (diff) |
sane-backends: rebind printers to usblp after scan
While scanning, sane unbinds usb device from usblp module. This
patch creates a saned wrapper that keep track of all usb devices
binded to usblp before saned is launched and rebind them back
if not still bound after saned exits.
This workaround is only effective if saned is launched by a super
daemon like xinetd as it needs to exit after scan job finish. If
not, printing will not be available while saned service is running.
Write access to /sys/bus/usb/drivers/usblp/bind is required. So,
normally it would require root access.
Signed-off-by: Luiz Angelo Daros de Luca <luizluca@gmail.com>
Diffstat (limited to 'utils/sane-backends/files')
-rw-r--r-- | utils/sane-backends/files/etc/xinetd.d/sane-port (renamed from utils/sane-backends/files/xinet.d_sane-port) | 0 | ||||
-rwxr-xr-x | utils/sane-backends/files/usr/sbin/saned | 24 |
2 files changed, 24 insertions, 0 deletions
diff --git a/utils/sane-backends/files/xinet.d_sane-port b/utils/sane-backends/files/etc/xinetd.d/sane-port index 9119973f6..9119973f6 100644 --- a/utils/sane-backends/files/xinet.d_sane-port +++ b/utils/sane-backends/files/etc/xinetd.d/sane-port diff --git a/utils/sane-backends/files/usr/sbin/saned b/utils/sane-backends/files/usr/sbin/saned new file mode 100755 index 000000000..711492633 --- /dev/null +++ b/utils/sane-backends/files/usr/sbin/saned @@ -0,0 +1,24 @@ +#!/bin/sh + +usblp_driver="/sys/bus/usb/drivers/usblp" + +inuse="" +if [ -e /sys/bus/usb/devices ]; then + for usbdev_driver in /sys/bus/usb/devices/*/driver; do + [ -e "$usbdev_driver" ] || continue + [ "$(readlink -f "$usbdev_driver")" = "$usblp_driver" ] || continue + usbdev="${usbdev_driver%/*}" + inuse="$inuse ${usbdev##*/}" + done +fi + +/usr/lib/sane/saned "$@" +err=$? + +for usbdev in $inuse; do + [ -e "/sys/bus/usb/devices/$usbdev/driver" ] && continue + logger -t saned "binding device $usbdev back to usblp..." + printf '%s' "$usbdev" > "$usblp_driver/bind" +done + +exit $err |