Hallo, On Oct 27 19:44 sus@justmail.de wrote (shortened):
ich verzweifle gerade bei dem Versuch einen Usb-Scanner unter 9.1 als user zu betreiben. ... Als root funktioniert alles einwandfrei.
Bei der Gelegenheit hier etwas mehr Information dazu: Die zentrale Software für den Scannerbetrieb liefert das "SANE Projekt": http://www.sane-project.org/ Die Software besteht aus "SANE-Backends" und "SANE-Frontends" und befindet sich bei SUSE LINUX im Paket "sane". Die eigentlichen Hardware-Treiber für die verschiedenen Arten von Scannern sind die sog. "SANE-Backends". Ein Backend greift aber nicht selbst direkt auf die Scannerhardware zu, sondern verwendet seinerseits den Kernel zusammen mit diversen Subsystemen, um die Datenübertragung zur Scannerhardware zu bewerkstelligen. Beispielsweise sind neben dem Kernel noch folgende Subsysteme involviert, um auf einen USB-Scanner zuzugreifen: * PAM (Pluggable Authentication Modules) * resmgr (Resource Manager) * libusb (Bibliothek für den Zugriff auf USB Geräte) * hotplug (Automatische Aktivierung von Hotplug-Geräten) Zusammen ergibt sich ein Stapel aus etlichen Schichten, der komplett funktionieren muss, damit man als normaler Benutzer aus einem Anwendungsprogramm auf einen USB-Scanner zugreifen kann: Benutzer | Anwendungsprogramm (Frontend) | SANE-Backends | libusb | resmgr <-- PAM <-- Anmeldung des Benutzers (Login) | USB-Kernelmodule <-- hotplug <-- Anschließen des Scanners (Plug in) | USB-Hardware im Rechner | USB-Kabelverbindung (evt. zusätzliche USB-Hubs) | Scanner Die korrekte Funktion aller unteren Schichten ist Voraussetzung für die Funktion einer höheren Schicht. Mit "scanimage -L" muss der Scanner angezeigt werden. Wenn nicht, dann kann SANE (genauer das Backend) nicht auf den Scanner zugreifen. Wenn "scanimage -L" nur dann den Scanner anzeigt, wenn es vom Benutzer root aufgerufen wird, dann kann zwar root auf den Scanner zugreifen, aber kein normaler Benutzer. Das Problem liegt dann in der "libusb + resmgr + PAM" Schicht. Bei der 9.1 wird kein PAM-Modul für den resmgr beim Anmelden via Textconsole aufgerufen. D.h. bei der 9.1 funktioniert der resmgr nur beim Anmelden via XDM/KDM. Bei der 9.1 gibt der resmgr den Zugriff nur für die USB-Scanner frei, deren Vendor- und Model-ID in /etc/hotplug/usb/sane-hardcoded.usermap oder /etc/hotplug/usb/sane.usermap eingetragen ist. So einen Eintrag sollte YaST automatisch machen. Dabei wird aber zusätzlich auch hotplug benötigt, damit die entsprechenden Geräte zur "Desktop" Klasse des resmgr hinzugefügt werden. Wenn hier also irgendwas schiefgeht, dann ist es für einen normalen Anwender bei der 9.1 nahezu unmöglich, alles entsprechend zu konfigurieren, so dass es am Ende wie gewünscht funktioniert. Bei 9.1 ist meines Wissens nur die grobe Methode via /etc/fstab mit vertretbarem Aufwand einem normalen Benutzer mit einem Einzelplatzsystem zu empfehlen, da alles andere zu kompliziert wird: Dazu den "usbfs" Eintrag in /etc/fstab von etwas in der Art: usbfs /proc/bus/usb usbfs noauto 0 0 in etwas in der Art usbfs /proc/bus/usb usbfs noauto,devmode=0666 0 0 ändern, also nur "devmode=0666" (oder ähliches, was passt) hinzufügen. Dann haben zwar alle auf das ganze usbfs freien Zugriff, aber bei einem Einzelplatzsystem ist das meiner Meinung nach vertretbar. Man kann es auch mit "devgid" (siehe "man mount") einer Gruppe zuweisen bzw. mit "devmode=0660" auf die Gruppe einschränken. Damit wird das evtl. auch für Mehrbenutzersysteme interessant. Ausblick für die 9.2: Bei der 9.2 sollte sich das sehr gebessert haben, denn * Bei der 9.2 sind alle USB Geräte (ausser Tastauren, Mäusen und Hubs) standardmässig in der "Desktop" Klasse des resmgr. * Bei der 9.2 funktioniert der resmgr auch beim Anmelden via Textconsole. Details zur Anmeldung via Textconsole bei der 9.2: Der resmgr wird beim Anmelden via Textconsole oder XDM/KDM von einem PAM-Modul aufgerufen und über jede neue Anmeldung eines Benutzers informiert. Das ist in folgenden PAM-Konfigurationsdateien festgelegt: * Standardmäßig für Login via Textconsole in /etc/pam.d/login * Standardmäßig für Login via XDM/KDM in /etc/pam.d/xdm und /etc/pam.d/xdm-np * Optional für Login via ssh in /etc/pam.d/sshd Damit wird erreicht, dass standardmäßig nur lokal angemeldete Benutzer Zugriff haben. Wenn ein Benutzer so angemeldet ist, dass der Zugriff erlaubt ist, dann ist der Zugriff für alle Prozesse dieses Benutzers erlaubt. Für Pseudo-Terminals (pts) wird kein PAM-Modul aufgerufen da es sich um keine echte Anmeldung (login) am System handelt. Daher wird hier der resmgr nicht informiert. Das ist bedeutsam, wenn nach Anmeldung via Textconsole die graphische Oberfläche mit "startx" gestartet wird, denn Terminalemulationsprogramme (wie z.B. xterm oder die KDE-Terminalemulation) verwenden Pseudo-Terminals. * Wird die graphische Oberfläche mit "startx" gestartet, dann läuft der Benutzerprozess (die Login-Shell) auf der Textconsole weiter und der Zugriff bleibt auch unter der graphischen Oberfläche erlaubt. * Wird die graphische Oberfläche aus Sicherheitsgründen mit "startx & exit" gestartet, dann wird der Benutzerprozess auf der Textconsole beendet und unter der graphischen Oberfläche ist kein Zugriff mehr möglich. * Wird die graphische Oberfläche aus Sicherheitsgründen mit "exec startx" gestartet, dann läuft der Benutzerprozess auf der Textconsole weiter und der Zugriff bleibt auch unter der graphischen Oberfläche erlaubt. Die Login-Shell wurde aber beendet und durch "startx" ersetzt. Gruss, Johannes Meixner -- SUSE LINUX AG, Maxfeldstrasse 5 Mail: jsmeix@suse.de 90409 Nuernberg, Germany WWW: http://www.suse.de/