Achtung: Dieses Tutorial ist mit Slackware 12.0 und dem dort standardmäßig aktiven UDEV nicht mehr nötig. Das Setzen der Gruppe "scanner" und der Berechtigungen auf "664" sollte durch das UDEV-Ruleset /etc/udev/rules.d/80-libsane.rules erledigt werden, und wird dann auch beim Einstecken des Scanners automatisch durchgeführt (kein erneutes Aufrufen von rc.usbscanner mehr, wenn das USB-Gerät später zugesteckt wird). Die Datei 80-libsane.rules ist weitestgehend selbsterklärend. Fehlende Scanner können hier einfach durch Anfügen einer neuen Zeile mit den passender Produkt-ID und Hersteller-ID aufgenommen werden.








Da es bei Kernel 2.6.x kein "generisches"-USB-Scannermodul mehr gibt, existiert bei der Verwendung von udev auch keine entsprechende Devicedatei.
Folglich muß auf andere Weise auf den Scanner zugegriffen werden. Dies geschieht über /proc mittels libusb. Dafür müssen aber die Berechtigungen in /proc/usb stimmen.
Genau hierfür habe ich das Skript rc.usbscanner geschrieben. Ich verwende es unter Slackware, aber es sollte eigentlich unter jeder Linuxdistribution funktionieren und kann als Startskript verwendet werden. Dazu einfach das Skript nach /etc/rc.d/rc.usbscanner kopieren, es mittels chmod u+x ausführbar machen und in die /etc/rc.d/rc.local folgende Zeilen anhängen:


if [ -x /etc/rc.d/rc.usbscanner ]; then
echo "Preparing USB-scanner"
/etc/rc.d/rc.usbscanner start
fi


Eine andere Möglichkeit seinen Scanner mit Kernel 2.6. zu verwenden wäre hotplugd entsprechend zu konfigurieren und ihn den Scanner einrichten zu lassen.

Aber nun das Skript:

#!/bin/sh

#
# /etc/rc.d/rc.usbscanner:
#
# Since Linux-Kernel 2.6x doesn't support a generic usb-scanner-modul
# (it is obsolete ;) there is no devicenode in /dev or /dev/usb for your
# scanner.
# But xsane and other programs can acces your scanner via libusb.
# Therefore the permissions for your scanner in /proc/bus/usb/ must be set.
# This does this script for you.
#
# I have written it for Slackware, but it also should work with other
# Linux distributions.
#
# Just adjust the vendorid and productid for your scanner in line
# 36 and 37 and assure, that the skript will be executed at startup.
# sane-find-scanner -q prints this values
#
# initially written by: Thomas Flaig, t.gf@freenet.de
#
# current version by Manuel Reimer, (Manuel _dot_ Reimer _at_ gmx _dot_ de)
#
# Last Change: 28.01.2007
#
#    This program is free software; you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation; either version 2 of the License, or
#    (at your option) any later version.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License
#    along with this program; if not, write to the Free Software
#    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
#

vendor=0x04b8
product=0x0122
group=scanner # Group which should be able to access the scanner
#  You shouldn'
t have to worry about anything from this line on.

usbscanner_main() {
    ### fetch the "data line" for the scanner definded by "vendor" and "product" ###
    line=`/usr/bin/sane-find-scanner -q | \
        sed -rn "s/.*\(vendor=${vendor}[ ,].*product=${product}[ \)].*libusb:([0-9]+:[0-9]+)$/\1/p" | \
        head -n1`
        # You determine the full Path of the Binary "sane-find-scanner"
        # with the Command "find /usr -name sane-find-scanner".

    ### Check if we got a match from sane-find-scanner ###
    if [ "$line" == "" ]; then
        echo "Scanner initialization error! No USB scanner found!"
        exit 1
    fi

    ### cut the parts from our "data line" ###
    bus=`echo "$line" | cut -d : -f 1`
    device=`echo "$line" | cut -d : -f 2`
   
    ### Try to find the device path ###
    devicepath="/proc/bus/usb/${bus}/${device}"
    if [ ! -w "$devicepath" ]; then
        devicepath="/dev/bus/usb/${bus}/${device}"
    fi
    if [ ! -w "$devicepath" ]; then
        echo "Scanner initialization error! Device cannot be found!"
        exit 1
    fi

    ### Set privileges ###
    case "$1" in
        'start' | 'restart')
            chown "root:${group}" "$devicepath"
            chmod g+w "$devicepath"
            ;;
        'stop')
            chown "root:root" "$devicepath"
            chmod g-w "$devicepath"
            ;;
    esac
}

case "$1" in
    'start')
        usbscanner_main start
        ;;
    'stop')
        usbscanner_main stop
        ;;
    'restart')
        usbscanner_main restart
        ;;
    *)
        echo "usage $0 start|stop|restart"
esac
#EOF


Kategorien
CategoryTipps CategoryHardware
There are no comments on this page.
Valid XHTML :: Valid CSS: :: Powered by WikkaWiki