• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[Gelöst] : USB Scanner Zugriffsrechte

flosbach

Newbie
Ich habe das Problem, das ich ploetzlich meinen Scanner als user xyz nicht mehr verwenden kann. Aber als user root.
Ich weiss, das Thema wurde schon behandelt. Ich hab auch ziemlich viel gelesen und nix hat geholfen.

Was habe ich :
Suse 10.0
Scanner EPSON 1660 Photo ( USB )
Einrichtung per Yast2 verlief OK
sane-find-scanner :
>> found USB scanner (vendor=0x04b8 [EPSON], product=0x011e [EPSON Scanner]) at libusb:1:5 <<

scanimage -L (als user root ) :
>> device `epson:libusb:1:5' is a Epson GT-8300 flatbed scanner <<

Eintrag im resource file >> /etc/resmgr.conf.d/50-scanner.conf <<
>> add usb:vendor=0x04b8,product=0x011e scanner <<

Und trotzdem kann ich also user den scanner nicht benutzen.

juergen@linux:~> scanimage -L

No scanners were identified. If you were expecting something different,
check that the scanner is plugged in, turned on and detected by the
sane-find-scanner tool (if appropriate). Please read the documentation
which came with this software (README, FAQ, manpages).

Was laeuft da schief ?

Ich benutze den scanner nicht so haeufig,
Ich halte das System per YOU immer sicher
Ich halte das System immer Up-Date per Yast und den Repositories von Packman und anderen.

Ich weiss also nicht nach welchem Update der Scanner nicht mehr funktionierte. Denn er hat mal funktioniert.

Der letzte update war von KDE3.5.4 auf KDE 3.5.5

Wer kann mir da weiterhelfen.

Juergen
 
http://www.linux-club.de/ftopic11568-0-asc-20.html hast Du gelesen? Ich weiß nicht in wie fern das veraltet ist, aber dein nächstes Stichwprt wäre dann udev.rules
 
OP
F

flosbach

Newbie
Ich wuerde lieber Sane wieder zum laufen bringen. Ich kenn mich damit halt aus ( wenns tut :lol: ).
Ich hab die Hinweise in der Suse DB zum Anschliessen eines Scanners unter Suse 10.0 gelesen und die Hinweise auf der Sane Seite.
Auf der Sane Seite wird ja nur auf die Scripte unter dem Verzeichniss tools/udev verwiesen. Die original Scripte sind bei mir korrekt installiert und ausfuehrbar.
Auch der Eintrag in /etc/resmgr.conf.d/50-scanner.conf ist korrekt
Code:
# Use /usr/sbin/lsusb to create entries like:
# add usb:vendor=0x1a2b,product=0x3c4d scanner
# to grant access to USB scanners:
add usb:vendor=0x04b8,product=0x011e scanner

Ach ja, ich hab ja noch garnicht gesagt welche sane Version ich habe. Vielleicht liegt da der Hund begraben.

Version 1.0.18-0.pm.2
Architektur x86_64

Irgendwelche Ideen wie ich den Scanner als User ansprechen kann ?

Juergen
 

Neotron

Hacker
Bei einem Epson-Scanner brauchst Du das Programm iscan. Denn bei den Scannern heutzutage muss die Firmware erst mal in den Scanner geladen werden. Das Zauberwort lautet epkowa. Und das macht iscan. Läuft das erst mal, dann geht auch sane.

Ich hab meinen 2580 genau so am Laufen.

Auf der Avasys-Seite (Link in meinem oberen Posting) gibt's ein PDF in dem das genau beschrieben ist.
 
OP
F

flosbach

Newbie
Ich hab iscan (1.15.0.2-4) installiert. Leider hat's keinen Erfolg gebracht :? . Als user oder root bekomme ich die gleiche Meldung :
Could not send command to scanner
Check the scanner's status.
Der Skanner wird fom System aber gesehen. Die Kommandos "sane-find-scanner" und "scanimage -L" liefern ja die erwarteten Ergebnisse.

Juergen
 
OP
F

flosbach

Newbie
Hab vergessen zu sagen das die Programme "sane-find-scanner" und "scanimage -L" natuerlich nur als user "root" die Ergebnisse liefern. Als normaler user sehen diese Programme keinen scanner.

Juergen
 

Knappe

Hacker
Hallo,

hatte fast das gleiche Problem, allerdings konnte bei mir der Scanner grundsaetzlich nicht von "normalen" Usern angesprochen werden.

Habe aber gestern das Problem wie folgt fuer SuSE 10.0 geloest :

Mit Hilfe des Befehls
Code:
# lsusb
als root feststellen, ob Scanner ueberhaupt erkannt wird. Wenn nicht, dann erst einmal andere Postings hierzu lesen !

Bei mir erscheint dann als Beispiel
# lsusb
Bus 2 Device 1: ID 0000:0000
Bus 1 Device 2: ID 03f0:0601 Hewlett-Packard ScanJet 6300c
Bus 1 Device 1: ID 0000:0000

Der Scanner HP 6300 ist also am Bus 1, als Device 2 angeschlossen.

Hierfuer erzeugt SuSE folgenden Eintrag
/proc/bus/usb/001/002

Mit
Code:
ls -l /proc/bus/usb/001/002

erscheint dann bei mir folgende Ausgabe :
-rw-r--r-- 1 root root 57 2006-11-28 09:12 /proc/bus/usb/001/002
Auch wenn hier Eigentuemer/Gruppe mit "root:root angegeben sind -> dieses spielt hier ueberhaupt keine Rolle !


Der Trick besteht naemlich darin, dass SuSE 10.0 noch andere Eintraege fuer USB-Devices erzeugt (und diese sind dann entscheidend fuer die Zugriffe !) :

Fuer jedes USB-Device wird unter
jeweils ein weiterer Eintrag erzeugt.

In meinem Fall erscheinen dann bei
Code:
# ls -l /dev/usb*

folgende Eintraege :
crw-rw---- 1 root root 189, 0 2006-11-28 09:30 /dev/usbdev1.1
crw-rw---- 1 root root 189, 1 2006-11-28 09:31 /dev/usbdev1.2
crw-rw---- 1 root root 189, 128 2006-11-28 09:30 /dev/usbdev2.1

Fuer meinen Scanner entscheident ist der 2.'te Eintrag (Bus 1, Device 2 siehe auch oben) :
crw-rw---- 1 root root 189, 1 2006-11-28 09:31 /dev/usbdev1.2

Damit nun bestimmte User einer Gruppe (hier bei mir die Gruppe Scanner) darauf zugreifen koennen, muessen die Rechte und Zuordnungen wie folgt angepasst werden :
Code:
#  chown root:scanner /dev/usbdev1.2
#  chmod 0660  /dev/usbdev1.2

Das Ergebnis ist jetzt fuer meinen Scanner :
crw-rw---- 1 root scanner 189, 1 2006-11-28 09:31 /dev/usbdev1.2

Ab sofort koennen alle Mitglieder der Gruppe Scanner auf das USB-Device zugreifen !

Wenn jetzt allerdings der Server/Rechner neu gestartet wird, sind diese Attribute ggf. wieder verloren.

Um dieses zu verhindern, bestehen (mind.) zwei Moeglichkeiten

1. Alternative

In der Datei
/etc/udev/rules.d/50-udev.rules
werden u.a. auch die USB-Geraete beim Systemstart von SuSE automatisch gesetzt.

Hier muss folgende Zeile (bei mir Zeile Nr. 225) von
Code:
SUBSYSTEM="usb_device", PROGRAM="/bin/sh -c 'X=%k X=$${X#usbdev} B=$${X%%%%.*} D=$${X#*.}; echo bus/usb/$$B/$$D'", SYMLINK+="%c"
auf
Code:
SUBSYSTEM="usb_device", PROGRAM="/bin/sh -c 'X=%k X=$${X#usbdev} B=$${X%%%%.*} D=$${X#*.}; echo bus/usb/$$B/$$D'", SYMLINK+="%c", GROUP="scanner"
Wie man sieht ist nur die "GROUP=scanner" angehaengt worden.

Beim naechsten Systemstart sind dann alle USB-Devices mit der Zuordnung "scanner" versehen.

So elegant das erscheinen mag, es sind aber eben ALLE USB-Devices jetzt mit diesem Attribut vesehen.


2. Alternative

Um diese o.g. Verallgemeinerung der Gruppierung zu verhindern koennte man in der Datei
/etc/init.d/boot.local
die Befehle
Code:
chown root:scanner /dev/usbdev1.2
chmod 0660  /dev/usbdev1.2
einfuegen.

Dann wird eben nur noch dieses eine Device mit anderen Rechten beim Systemstart versehen.

Hier besteht allerdings die Problematik, dass bei Aendung des USB-Devices (anderer Bus, andere Device-Nr) der Inhalt der "boot.local' nicht mehr 'greift'.


Das Vernuenftigste waere daher wohl, ein kleines Script zu schreiben, das
1. von der /etc/init.d/boot.local ausgefuehrt wird und
2. zunaechst feststellt, wo SuSE beim Systemstart das USB-Scanner-Device eingehaengt hat und
3. nur fuer dieses Device dann die Rechte (wie eben genannt) aendert.

Alle anderen Hinweise in diesem Forum (z.B. die /etc/fstab zu aendern), andere udev-Regeln aufzustellen, etc. haben bei mir NICHT zum gewuenschten Ergebnis gefuehrt.

Daher hoffe ich, dass die typische SuSE-Problematik einer sehr unintelligenten Verwaltung der USB-Devices - hier speziell der Verwaltung von Scannern - mit dieser kleinen Anleitung auch von anderen umgangen werden kann.
:wink:
 
OP
F

flosbach

Newbie
Hab noch mal weiter gegraben.

sane-find-scanner als user "root" liefert :
Code:
<SNIP>
found USB scanner (vendor=0x04b8 [EPSON], product=0x011e [EPSON Scanner]) at libusb:2:9
<SNIP>

scanimage -L als user "root" liefert :
Code:
device `epson:libusb:2:9' is a Epson GT-8300 flatbed scanner

Das File /etc/udev/rules.d/50-udev.rules enthaelt nur eine Zeile die auf einen Scanner hinweist.
Code:
KERNEL=="usbscanner*",          NAME="%k", MODE="644"

Ja, und das Kommando
> udevinfo -a -p /sys/class/usb_device/usbdev2.9

ergibt
Code:
linux:/sys/bus/usb/devices/usb2/2-9 # udevinfo -a -p /sys/class/usb_device/usbdev2.9

udevinfo starts with the device the node belongs to and then walks up the
device chain, to print for every device found, all possibly useful attributes
in the udev key format.
Only attributes within one device section may be used together in one rule,
to match the device for which the node will be created.

device '/sys/class/usb_device/usbdev2.9' has major:minor 189:136
  looking at class device '/sys/class/usb_device/usbdev2.9':
    KERNEL=="usbdev2.9"
    SUBSYSTEM=="usb_device"
    SYSFS{dev}=="189:136"

follow the "device"-link to the physical device:
  looking at the device chain at '/sys/devices/pci0000:00/0000:00:02.1/usb2/2-4':
    BUS=="usb"
    ID=="2-4"
    DRIVER=="usb"
    SYSFS{bConfigurationValue}=="1"
    SYSFS{bDeviceClass}=="ff"
    SYSFS{bDeviceProtocol}=="ff"
    SYSFS{bDeviceSubClass}=="ff"
    SYSFS{bMaxPacketSize0}=="64"
    SYSFS{bMaxPower}=="  2mA"
    SYSFS{bNumConfigurations}=="1"
    SYSFS{bNumInterfaces}==" 1"
    SYSFS{bcdDevice}=="0100"
    SYSFS{bmAttributes}=="c0"
    SYSFS{configuration}==""
    SYSFS{devnum}=="9"
    SYSFS{idProduct}=="011e"
    SYSFS{idVendor}=="04b8"
    SYSFS{manufacturer}=="EPSON"
    SYSFS{maxchild}=="0"
    SYSFS{product}=="EPSON Scanner"
    SYSFS{speed}=="480"
    SYSFS{version}==" 2.00"

  looking at the device chain at '/sys/devices/pci0000:00/0000:00:02.1/usb2':
    BUS=="usb"
    ID=="usb2"
    DRIVER=="usb"
    SYSFS{bConfigurationValue}=="1"
    SYSFS{bDeviceClass}=="09"
    SYSFS{bDeviceProtocol}=="01"
    SYSFS{bDeviceSubClass}=="00"
    SYSFS{bMaxPacketSize0}=="8"
    SYSFS{bMaxPower}=="  0mA"
    SYSFS{bNumConfigurations}=="1"
    SYSFS{bNumInterfaces}==" 1"
    SYSFS{bcdDevice}=="0206"
    SYSFS{bmAttributes}=="e0"
    SYSFS{configuration}==""
    SYSFS{devnum}=="1"
    SYSFS{idProduct}=="0000"
    SYSFS{idVendor}=="0000"
    SYSFS{manufacturer}=="Linux 2.6.13-15.12-default ehci_hcd"
    SYSFS{maxchild}=="10"
    SYSFS{product}=="EHCI Host Controller"
    SYSFS{serial}=="0000:00:02.1"
    SYSFS{speed}=="480"
    SYSFS{version}==" 2.00"

  looking at the device chain at '/sys/devices/pci0000:00/0000:00:02.1':
    BUS=="pci"
    ID=="0000:00:02.1"
    DRIVER=="ehci_hcd"
    SYSFS{class}=="0x0c0320"
    SYSFS{device}=="0x005b"
    SYSFS{irq}=="50"
    SYSFS{local_cpus}=="1"
    SYSFS{modalias}=="pci:v000010DEd0000005Bsv00001043sd0000815Abc0Csc03i20"
    SYSFS{subsystem_device}=="0x815a"
    SYSFS{subsystem_vendor}=="0x1043"
    SYSFS{vendor}=="0x10de"

  looking at the device chain at '/sys/devices/pci0000:00':
    BUS==""
    ID=="pci0000:00"
    DRIVER=="unknown"

Es sieht so aus als ob scanimage einen Treiber fuer den scanner sieht, udev aber nicht.

Wie kann das sein ?

Juergen
 
OP
F

flosbach

Newbie
Hallo "Knappe"

Ich hab meinen letzten Beitrag wohl etwas uebereilt geschrieben. Hatte deinen Beitrag noch nicht gesehen.

Und genau das hat mir jetzt geholfen. Zumindest sieht mein scanimage den scanner jetzt aus meinem user-account heraus.

Danke. :D

Juergen
 

Knappe

Hacker
@flosbach
zumindest sieht mein scanimage den scanner jetzt aus meinem user-account heraus

Jetzt nur noch dafuer sorgen, dass beim naechsten Systemstart das Device immer noch von den Usern aus angesprochen werden kann !

Vielleicht doch noch ein kleines Script schreiben (koennte ich auch gebrauchen) :wink:

Wenn alle Probleme geloest -- dann geloest, bitte :D
 
OP
F

flosbach

Newbie
Hallo Knappe

Was meinst Du mit
dass beim naechsten Systemstart das Device immer noch von den Usern aus angesprochen werden kann !

Die udev-rule die du erstellt hast ist doch nix dynamiches. Die wird doch nicht vom System ueberschrieben und ist somit auch nach einem Systemstart gueltig.

Bei mir ist der Scanner jetzt auch nach einem neuerlichen Systemstart sichtbar.

Ist das bei dir nicht so ?

Juergen
 

Knappe

Hacker
Hallo "flosbach",

Bei mir ist der Scanner jetzt auch nach einem neuerlichen Systemstart sichtbar.
Ist das bei dir nicht so ?

Doch ist es, aber eben nur "in der Regel".

Ich hatte den Fall, dass nach einem Systemstart von SuSE der Scanner als ein anderes Device am gleichen Bus "gehaengt" wurde.

Also, aus
-rw-r--r-- 1 root root 57 2006-11-28 09:12 /proc/bus/usb/001/002
wurde von SuSE
-rw-r--r-- 1 root root 57 2006-11-28 09:12 /proc/bus/usb/001/003
gemacht !

Daraus habe ich geschlossen, dass man sich nicht darauf verlassen darf, das ein USB-Device grundsätzlich immer die gleiche Device-Nr. von SuSE zugeteilt bekommt !

Daher auch die beiden o.g. Alternativen zur "Umgehung" dieser Problematik, mehr nicht :wink:

P.S.
Die udev-rule die du erstellt hast ist doch nix dynamiches
Nein nicht ich, aber SuSE hat sie erstellt und sie ist statisch; allerdings werden nun alle USB-Geraete der Grupppe "scanner" zugeordnet und das ist widerum nicht immer gewollt und sinnvoll ! :roll:
 
OP
F

flosbach

Newbie
Hallo Knappe

Ich hab deine Aenderungen im 50-udev.rules file gemacht und es funktioniert. Aber Du hast recht, das Script hat hier keine Ahnung welches device am Bus haengt. Und somit kann jetzt jedes usb_device in der Gruppe "scanner" landen.

Ich hab mich jetzt aber wieder erinnert, das ich mit udev rules schon mal im Zusammenhang mit meinen Palm devices gespielt habe. Und da habe ich gelernt, das man in den Regeln mehr Info vom neu angeschlossenen device abfragen kann um nur auf ein bestimmtes device zu reagieren.
Ich muesste mich doch mal etwas tiefer mit dem Thema beschaeftigen.

Die eigenen Rules habe ich damals nach dem Vorschlag aus einem anderen Forum in das File /etc/udev/rules.d/10-custom.rules geschrieben.
Code:
BUS="usb", SYSFS{product}="Palm Handheld", KERNEL="ttyUSB*",NAME="pilot", MODE="666"
BUS="usb", SYSFS{product}="palmOne Handheld", KERNEL="ttyUSB*",NAME="pilot", MODE="666"

Wie Du siehst, wird auf das device "Palm Handheld" oder "palmOne Handheld" reagiert.

Das sollte mit dem Scanner doch auch moeglich sein. Und dann wird nur auf genau den einen scanner reagiert.

Juergen
 

Justix

Member
Hallo Jürgen

Ich habe Deinen Artikel zum Problem mit dem Epson Scanner überflogen und kann Dir vielleicht helfen.
Per Zufall habe ich genau heute auch meinen Epson Scanner installiert (in meinem Fall Epson Perfection 3490 Foto) was ohne Probleme funktionierte.

Dazu habe ich folgendes Vorgehen gewählt (bei mir ist es zuvor auch nie gegangen darum war ich dieses mal sehr vorsichtig)
1. Unter YaST Kotrollzentrum -> Hardware -> "Scanner" auswählen
2. Nach dem erstellen der Treiberdatenbank das passende Firmwareupdate oder den passenden Treiber markieren.
3. Und hier kam der Punkt an dem ich begann sorgfältig zu überlegen u. A. wegen dem "oder" bei Punkt 2. Die Lösung war bei mir das Firmwareupgrade und nicht der Treiber. Also hab ich via Smart das Paket "iscan-firmware" ausgewählt und installiert.
4. Als nächstes habe ich in der Treiberdatenbank Weiter gedrückt und die Folgende Fehlermeldung weggeklickt (ich hatte auch nicht viel andere Möglichkeiten).
5. Danach kannst Du mit dem Programm Kooka zu Scannen versuchen. Ein Neustart ist jedoch zu empfehlen. Kooka stürzte bei mir zuerst einmal ab erkannte jedoch das Epson Gerät von Anfang an und konnte dann auch scannen beim zweiten Mal.

Tja Jürgen, ich hoffe Dir weitergeholfen zu haben.

Freundliche Grüsse

Andrea Manuel Just
 
OP
F

flosbach

Newbie
Danke Justix

Aber ich habe meinen Scanner schon wieder am laufen.
Wie gesagt. Er war auch schon seit langem am laufen. Und dann ploetzlich, .... nix mehr. Da ich stets aktuelle Software haben will hole ich mir haeufiger die neuesten RPMs ueber Yast und/oder Smart von den diversen Repositories und dabei muss ich mir wohl was verbogen haben.
Aber jetzt, mit den Informationen von "Knappe" hab ich meinen Scanner wieder.

Trotzdem, vielen Danke fuer deine Hilfe.

Juergen
 

Justix

Member
Hallo Jürgen

Und wie wärs, wenn Du in diesem Fall in den Betreff [Gelöst] schreibst? Dann hätte ich mir die Arbeit sparen können.
 
Mißverständnis: Geh auf deinen ersten Post, klicke den [edit] Button und setze dann in den Titel ein [gelöst] oder [solved] vor den original Titel
 
Oben