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: [PATCH] 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/Makefile | 10 ++++---- .../xinetd.d/sane-port} | 0 utils/sane-backends/files/usr/sbin/saned | 24 +++++++++++++++++++ 3 files changed, 30 insertions(+), 4 deletions(-) rename utils/sane-backends/files/{xinet.d_sane-port => etc/xinetd.d/sane-port} (100%) create mode 100755 utils/sane-backends/files/usr/sbin/saned diff --git a/utils/sane-backends/Makefile b/utils/sane-backends/Makefile index f4077c3a1..774428d7f 100644 --- a/utils/sane-backends/Makefile +++ b/utils/sane-backends/Makefile @@ -1,6 +1,6 @@ # # Copyright (C) 2006-2016 OpenWrt.org -# Copyright (C) 2017-2018 Luiz Angelo Daros de Luca +# Copyright (C) 2017-2019 Luiz Angelo Daros de Luca # # This is free software, licensed under the GNU General Public License v2. # See /LICENSE for more information. @@ -10,7 +10,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=sane-backends PKG_VERSION:=1.0.27 -PKG_RELEASE:=2 +PKG_RELEASE:=3 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=http://fossies.org/linux/misc \ https://alioth.debian.org/frs/download.php/file/4146/ @@ -193,9 +193,11 @@ define Package/sane-daemon/install $(INSTALL_DIR) $(1)/etc/sane.d $(INSTALL_CONF) $(PKG_INSTALL_DIR)/etc/sane.d/saned.conf $(1)/etc/sane.d/ $(INSTALL_DIR) $(1)/usr/sbin - $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/* $(1)/usr/sbin/ + $(INSTALL_BIN) ./files/usr/sbin/saned $(1)/usr/sbin/saned + $(INSTALL_DIR) $(1)/usr/lib/sane/ + $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/saned $(1)/usr/lib/sane/saned $(INSTALL_DIR) $(1)/etc/xinetd.d - $(CP) ./files/xinet.d_sane-port $(1)/etc/xinetd.d/sane-port + $(CP) ./files/etc/xinetd.d/sane-port $(1)/etc/xinetd.d/sane-port endef define Package/sane-daemon/conffiles diff --git a/utils/sane-backends/files/xinet.d_sane-port b/utils/sane-backends/files/etc/xinetd.d/sane-port similarity index 100% rename from utils/sane-backends/files/xinet.d_sane-port rename to 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