Browse Source

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>
lilik-openwrt-22.03
Luiz Angelo Daros de Luca 5 years ago
parent
commit
7dd2e1776e
3 changed files with 30 additions and 4 deletions
  1. +6
    -4
      utils/sane-backends/Makefile
  2. +0
    -0
      utils/sane-backends/files/etc/xinetd.d/sane-port
  3. +24
    -0
      utils/sane-backends/files/usr/sbin/saned

+ 6
- 4
utils/sane-backends/Makefile View File

@ -1,6 +1,6 @@
#
# Copyright (C) 2006-2016 OpenWrt.org
# Copyright (C) 2017-2018 Luiz Angelo Daros de Luca <luizluca@gmail.com>
# Copyright (C) 2017-2019 Luiz Angelo Daros de Luca <luizluca@gmail.com>
#
# 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


utils/sane-backends/files/xinet.d_sane-port → utils/sane-backends/files/etc/xinetd.d/sane-port View File


+ 24
- 0
utils/sane-backends/files/usr/sbin/saned View File

@ -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

Loading…
Cancel
Save