Rechteproblem mit scanner unter wheezy/sid mit chuid / su

Einrichten des Druckers und des Drucksystems, Scannerkonfiguration und Software zum Scannen und Faxen.
Antworten
Kermit24
Beiträge: 317
Registriert: 29.04.2006 14:44:39

Rechteproblem mit scanner unter wheezy/sid mit chuid / su

Beitrag von Kermit24 » 15.06.2011 22:36:10

Hallo,
ich habe auf wheezy/sid updaten müssen. Jetzt habe offensichtlich ich ein seltsames Rechteproblem mit meinem Brother Multifunktionsfax. Als root läuft alles wunderbar.
Jedoch als user "saned", welcher auch der group "scanner" angehört, klappt es seltsamerweise nur, wenn ich mich direkt einlogge (ich habe dem Nutzer in der /etc/passwd testweise eine login-shell verpasst). Wenn ich als root "su saned" aufrufe, habe ich seltsamerweise keine Rechte zum Scannen.

Code: Alles auswählen

scanimage > /tmp/test.tif
scanimage: open of device brother3:bus3;dev1 failed: Invalid argument
Von Brother hatte ich übrigens in der Datei /dev/udev/rules.d/60-libsane.rules schon unter squeeze aufgenommen:

Code: Alles auswählen

# Brother
SYSFS{idVendor}=="04f9", MODE="0666", GROUP="scanner", ENV{libsane_matched}="yes"
Das eigentliche Problem ist folgendes: Über /etc/init.d/brotherkey ein kleiner daemon gestartet wird, welcher auf die Direkttasten am Gerät reagiert und dann einen entsprechenden Scanvorgang startet. Das hat unter squeeze noch einwandfrei funktioniert. Jetzt besteht wohl obiges Rechteproblem.

Hier mal das initscript

Code: Alles auswählen

#! /bin/sh
set -x
### BEGIN INIT INFO
# Provides:          brotherkey
# Required-Start:    $syslog $remote_fs
# Required-Stop:     $syslog $remote_fs
# Should-Start:      $network avahi
# Should-Stop:       $network
# X-Start-Before:    cups
# X-Stop-After:      cups
# Default-Start:     2 3 4 5
# Default-Stop:      1
# Short-Description: Brother Scan-Key Daemon
### END INIT INFO

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/local/Brother/sane/brscan-skey-0.2.1-3
NAME=brscan-skey-0.2.1-3
PIDFILE=/var/run/$NAME.pid
DESC="Brother Scan-Key Daemon"
USER="saned"

unset TMPDIR

test -x $DAEMON || exit 0

#if [ -r /etc/default/cups ]; then
#  . /etc/default/cups
#fi

. /lib/lsb/init-functions

case "$1" in
  start)
	log_begin_msg "Starting $DESC: $NAME"
	start-stop-daemon --start --background  --chuid $USER --quiet --oknodo --pidfile "$PIDFILE" --make-pidfile --exec $DAEMON
	log_end_msg $?
	;;
  stop)
	log_begin_msg "Stopping $DESC: $NAME"
	start-stop-daemon --stop --quiet --retry 5 --oknodo --pidfile $PIDFILE --exec $DAEMON && rm $PIDFILE
	log_end_msg $?
	;;
  reload|force-reload)
       log_begin_msg "Reloading $DESC: $NAME"
       start-stop-daemon --stop --quiet --pidfile $PIDFILE --name $NAME --signal 1
       log_end_msg $?
       ;;
  restart)
	log_begin_msg "Restarting $DESC: $NAME"
	if start-stop-daemon --stop --quiet --retry 5 --oknodo --pidfile $PIDFILE --exec $DAEMON && rm $PIDFILE; then
		start-stop-daemon --start --background  --chuid $USER --quiet --pidfile "$PIDFILE" --make-pidfile  --exec $DAEMON
	fi
	log_end_msg $?
	;;
  status)
	echo -n "Status of $DESC: "
	if [ ! -r "$PIDFILE" ]; then
		echo "$NAME is not running."
		exit 3
	fi
	if read pid < "$PIDFILE" && ps -p "$pid" > /dev/null 2>&1; then
		echo "$NAME is running."
		exit 0
	else
		echo "$NAME is not running but $PIDFILE exists."
		exit 1
	fi
	;;
  *)
	N=/etc/init.d/${0##*/}
	echo "Usage: $N {start|stop|restart|force-reload|status}" >&2
	exit 1
	;;
esac

exit 0
Wenn ich USER="saned" in USER="root" abändere, dann klappt alles. Auch wenn ich mich direkt als "saned" einlogge und den daemon von Hand starte. Aber über ein "su saned" und dann von Hand klappt es ebensowenig, wie über das init-script mit USER="saned".

Hat jemand eine Idee, woran das liegt, also was sich von squeeze nach wheezy geändert hat?

Benutzeravatar
feldmaus
Beiträge: 1316
Registriert: 14.06.2005 23:13:22
Lizenz eigener Beiträge: GNU General Public License
Wohnort: Deutschland

Re: Rechteproblem mit scanner unter wheezy/sid mit chuid / s

Beitrag von feldmaus » 16.06.2011 11:10:03

Hi,

wenn Du Dich mit deinem Benutzer einlogst und der Scanner läuft, erreichst Du Ihn mit XSane? Kannst Du was einscannen? Welche Scanner-Geräte werden aufgelistet? bitte führe mal <scanimage -L> aus! Und welchen Gruppen gehört dein Benutzer an? führe mal <id> aus!

Bitte logge Dich nicht als System-Benutzer ein, oder noch schlimmer ändere System-Benutzer!

Grüße Markus

Kermit24
Beiträge: 317
Registriert: 29.04.2006 14:44:39

Re: Rechteproblem mit scanner unter wheezy/sid mit chuid / s

Beitrag von Kermit24 » 16.06.2011 19:29:58

Hallo Feldmaus,
Du hast mein Problem wohl leider nicht verstanden.
mit scanadf, scanimage oder xsane kann ich einwandfrei scannen, wenn ich mit meinem Standard-Benutzer eingeloggt bin, welcher der Group "scanner" angehört. Mit scanimage, scanadf kann ich auch scannen, wenn ich als saned eingeloggt bin. xsane geht sicher auch, wollte aber mit saned nicht auch noch einen X-Server starten. Schließlich soll sich saned normalerweise niemals einloggen! saned ist auch in der Group "scanner"

scanimage -L listet natürlich auch meinen Scanner auf: "device `brother3:bus3;dev1' is a Brother MFC-7320 USB scanner"
Das ist ja alles nicht das Problem. Problem ist das der daemon "brscan-skey" offensichtlich keine Rechte mehr zum Scannen hat. Dieser daemon reagiert auf die Direkt-Scan-Tasten meines Fax und scannt mir mittels scanadf die Seiten ein und legt sie in /tmp ab. All das hat jahrelang unter lenny und squeeze funktioniert. Wenn ich den daemon 'brscan-skey' als eingeloggter Benutzer per Hand im Vordergrund starte, klappt das auch weiterhin wie es soll.
Nur soll der daemon natürlich automatisch über das init-script gestartet werden. Der daemon läuft auch (ps zeigt ihn an), doch er hat offensichtlich keine Rechte zum Scannen! Was ist also an wheezy anders als bei squeeze, bzw. wie kann ich das fixen. Ich möchte den daemon über das initscript nicht dauerhaft als root starten (was auch funktioniert!) :(

Auch laut <id> gehört der Benutzer saned der Gruppe scanner an! Es klappt ja auch, wenn sich saned direkt einloggt. Aber weder bei einem "su saned" mit gefolgtem "brscan-skey" noch mit "start-stop-daemon --start --chuid saned --exec /usr/local/Brother/sane/brscan-skey-0.2.1-3" funktioniert das scannen.
Da ein "su saned" mit gefolgten "scanimage > /tmp/test.tif" auch nicht funktioniert, liegt offensichtlich irgendein Rechteproblem vor! Direktes einloggen als saned gefolgt von einem "scanimage > /tmp/test.tif" funktioniert nämlich einwandfrei!
Nur wieso ist das so?


NACHTRAG:
Um es weiter zu verdeutlichen:
Als root starte ich den brscan-skey daemon im Vordergrund, quasi wie es auch das init-script macht, mit:

Code: Alles auswählen

start-stop-daemon --start --chuid saned --exec /usr/local/Brother/sane/brscan-skey-0.2.1-3 
Jetzt drücke ich die Scantasten am Gerät. Im Display steht "PC-Anschluss" und es passiert gar nichts mehr! Keine Ausgaben und kein Scanvorgang startet.
Mit Ctrl-C beendet ich den Daemon wieder und starte ihn erneut. Diesmal aber als root: Nun startet auch der Scanvorgang, wenn ich die Tasten am Gerät nutze:

Code: Alles auswählen

start-stop-daemon --start --chuid root --exec /usr/local/Brother/sane/brscan-skey-0.2.1-3
scan from USB(brother3:bus3;dev1)
scanimage: rounded value of br-x from 210 to 209.981
scanimage: rounded value of br-y from 297 to 296.973
Scanning -1 pages, incrementing by 1, numbering from 1
Scanning page 1
Scanned page 1. (scanner status = 5)
Scanning page 2
scanimage: sane_start: Document feeder out of documents

Seit diesem komplizierten udev habe ich immer nur Rechteprobleme! Früher war das mal alles einfach. Da hatte man statische Gerätedateien, wo man nur einmal die Rechte angepasst hat und gut war. Heute muss man diese blöden udev rules-Dateien anpassen, welche die Geräterechte setzt. Aber ich finde für den Scanner ja noch nicht mal ein Gerät im Dateisystem! Wo soll denn "USB(brother3:bus3;dev1)" zu finden sein? Unter /dev sehe ich nichts zutreffendes :(

Ich finde einfach nichts, was der gruppe 'scanner' gehört.

Code: Alles auswählen

`--# find /sys -group scanner
.-(/)------------------------------------------------------------(root@fitpc2i)-
`--# find /dev -group scanner
.-(/)------------------------------------------------------------(root@fitpc2i)-
`--# find /proc -group scanner

Benutzeravatar
feldmaus
Beiträge: 1316
Registriert: 14.06.2005 23:13:22
Lizenz eigener Beiträge: GNU General Public License
Wohnort: Deutschland

Re: Rechteproblem mit scanner unter wheezy/sid mit chuid / s

Beitrag von feldmaus » 16.06.2011 21:40:09

Hier zwei wichtige Links für Dich:
hald --> https://wiki.archlinux.de/title/HAL
udevd --> http://jmedia.media.h-da.de/man/lxadmin/ch19.html

Dein scanner wird wahrscheinlich über hald geseteuert, deshalb auch keine device-Datei. <lshal> und <hal-device> zeigen alle Geräte an die von hal gesteuert werden.

<start-stop-daemon> solltest Du mit <--verbose> starten lassen, dann bekommst Du mehr Meldungen, und schaue in dein Log-Dateien, vielleicht findest Du dort was. Die <--quiet> Option würde ich raus nehmen, sonst gibt er keine Meldungen raus.

Nagel mich nicht fest, aber ich hatte noch in Erinnerung das man Prozesse mit <gdb> oder <ddd> oder irgendeinem Debugger monitoren konnte. Dazu benötigst Du die PID-Nummer des Prozesses.

Grüße Markus

Kermit24
Beiträge: 317
Registriert: 29.04.2006 14:44:39

Re: Rechteproblem mit scanner unter wheezy/sid mit chuid / s

Beitrag von Kermit24 » 17.06.2011 16:12:45

feldmaus hat geschrieben:Hier zwei wichtige Links für Dich:
hald --> https://wiki.archlinux.de/title/HAL
udevd --> http://jmedia.media.h-da.de/man/lxadmin/ch19.html
Danke für die Links! Nur wirklich weiter bringen die mich auch nicht. An udev-rules habe ich schon oft rumfrickeln müssen. Für meinen scanner gibt es offebar aber keine Gerätedatei mehr.
Dein scanner wird wahrscheinlich über hald geseteuert, deshalb auch keine device-Datei. <lshal> und <hal-device> zeigen alle Geräte an die von hal gesteuert werden.
So ist es. Nur mit den Infos komme ich auch nicht wirklich weiter:

Code: Alles auswählen

udi = '/org/freedesktop/Hal/devices/usb_device_4f9_1eb_000A0N714493'
  info.linux.driver = 'usb'  (string)
  info.parent = '/org/freedesktop/Hal/devices/usb_device_3eb_902_noserial'  (string)
  info.product = 'MFC-7320'  (string)
  info.subsystem = 'usb_device'  (string)
  info.udi = '/org/freedesktop/Hal/devices/usb_device_4f9_1eb_000A0N714493'  (string)
  info.vendor = 'Brother Industries, Ltd'  (string)
  linux.device_file = '/dev/bus/usb/002/016'  (string)
  linux.hotplug_type = 2  (0x2)  (int)
  linux.subsystem = 'usb'  (string)
  linux.sysfs_path = '/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2'  (string)
  usb_device.bus_number = 2  (0x2)  (int)
  usb_device.can_wake_up = false  (bool)
  usb_device.configuration_value = 1  (0x1)  (int)
  usb_device.device_class = 0  (0x0)  (int)
  usb_device.device_protocol = 0  (0x0)  (int)
  usb_device.device_revision_bcd = 256  (0x100)  (int)
  usb_device.device_subclass = 0  (0x0)  (int)
  usb_device.is_self_powered = true  (bool)
  usb_device.linux.device_number = 16  (0x10)  (int)
  usb_device.linux.sysfs_path = '/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2'  (string)
  usb_device.max_power = 2  (0x2)  (int)
  usb_device.num_configurations = 1  (0x1)  (int)
  usb_device.num_interfaces = 3  (0x3)  (int)
  usb_device.num_ports = 0  (0x0)  (int)
  usb_device.product = 'MFC-7320'  (string)
  usb_device.product_id = 491  (0x1eb)  (int)
  usb_device.serial = '000A0N714493'  (string)
  usb_device.speed = 12.0 (12) (double)
  usb_device.vendor = 'Brother Industries, Ltd'  (string)
  usb_device.vendor_id = 1273  (0x4f9)  (int)
  usb_device.version = 2.0 (2) (double)
Da sehe ich keine Rechte oder ähnliches.

<start-stop-daemon> solltest Du mit <--verbose> starten lassen, dann bekommst Du mehr Meldungen, und schaue in dein Log-Dateien, vielleicht findest Du dort was. Die <--quiet> Option würde ich raus nehmen, sonst gibt er keine Meldungen raus.
Von Hand gestartet nutze ich die Option --quiet ja nicht. Aber selbst wenn ich von Hand noch ein --verbose hinzufüge, bekomme ich leider keine einzige Meldung mehr als ohne. Im syslog ist auch nichts zu sehen.

Nagel mich nicht fest, aber ich hatte noch in Erinnerung das man Prozesse mit <gdb> oder <ddd> oder irgendeinem Debugger monitoren konnte. Dazu benötigst Du die PID-Nummer des Prozesses.
Die PID herauszufinden wäre nicht das Problem. Aber das mit dem Debugger geht mir jetzt echt einen Schritt zu weit! Ich werde wohl oder übel den daemon als root laufen lassen müssen. :(

Trotzdem besten dank für Deine Mühe,
Kermit

Antworten