From 7dd2e1776eef60a8a5c739b5cad67d649946d393 Mon Sep 17 00:00:00 2001 From: Luiz Angelo Daros de Luca Date: Tue, 30 Apr 2019 01:32:59 -0300 Subject: 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 --- utils/sane-backends/files/etc/xinetd.d/sane-port | 14 ++++++++++++++ utils/sane-backends/files/usr/sbin/saned | 24 ++++++++++++++++++++++++ utils/sane-backends/files/xinet.d_sane-port | 14 -------------- 3 files changed, 38 insertions(+), 14 deletions(-) create mode 100644 utils/sane-backends/files/etc/xinetd.d/sane-port create mode 100755 utils/sane-backends/files/usr/sbin/saned delete mode 100644 utils/sane-backends/files/xinet.d_sane-port (limited to 'utils/sane-backends/files') diff --git a/utils/sane-backends/files/etc/xinetd.d/sane-port b/utils/sane-backends/files/etc/xinetd.d/sane-port new file mode 100644 index 000000000..9119973f6 --- /dev/null +++ b/utils/sane-backends/files/etc/xinetd.d/sane-port @@ -0,0 +1,14 @@ +# default: off +# description: The saned provides scanner service via the network. \ +# Applications like kooka, xsane or xscanimage can use the remote \ +# scanner. +service sane-port +{ + socket_type = stream + port = 6566 + wait = no + user = root + group = root + server = /usr/sbin/saned + disable = yes +} 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 diff --git a/utils/sane-backends/files/xinet.d_sane-port b/utils/sane-backends/files/xinet.d_sane-port deleted file mode 100644 index 9119973f6..000000000 --- a/utils/sane-backends/files/xinet.d_sane-port +++ /dev/null @@ -1,14 +0,0 @@ -# default: off -# description: The saned provides scanner service via the network. \ -# Applications like kooka, xsane or xscanimage can use the remote \ -# scanner. -service sane-port -{ - socket_type = stream - port = 6566 - wait = no - user = root - group = root - server = /usr/sbin/saned - disable = yes -} -- cgit v1.2.3