aboutsummaryrefslogtreecommitdiff
path: root/utils/sane-backends/files
diff options
context:
space:
mode:
authorLuiz Angelo Daros de Luca <luizluca@gmail.com>2019-04-30 01:32:59 -0300
committerLuiz Angelo Daros de Luca <luizluca@gmail.com>2019-05-02 03:31:45 -0300
commit7dd2e1776eef60a8a5c739b5cad67d649946d393 (patch)
treea9e862e73e304706aec72d98960f6627d20276a9 /utils/sane-backends/files
parentfedc5cf5a45cd1cd6a4440724729c46d61ac3523 (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-xutils/sane-backends/files/usr/sbin/saned24
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