ubuntuusers.de

nach upgrade auf 26.04 funktioniert scanbd nicht mehr

Status: Gelöst | Ubuntu-Version: Xubuntu 26.04 (Resolute Raccoon)
Antworten |

DoktorSeltsam

Anmeldungsdatum:
11. Februar 2007

Beiträge: 733

Wohnort: Hamburg

Die Konfiguration in /etc/scanbd und /etc/sane.d ist unverändert. In der /etc/scanbd/scanbd.conf sind user und group auf meinen User gesetzt. Für die action scan ist ein Script in meinem home-Verzeichnis hinterlegt. So hat es mit 25.10 noch funktioniert - ein Druck auf den Scanbutton am Fujitsu ScanSnap ix500, und das Script hat einen Scan ausgelöst. Seit dem upgrade reagiert der Button nicht mehr. Ich habe den Dienst mit

sudo systemctl stop scanbd

gestoppt und im debug-Modus manuell gestartet:

SANE_CONFIG_DIR=/etc/scanbd scanbd -f -d7 

Folgendes wird geloggt:

scanbd: get_sane_option_value
scanbd: setting env: SCANBD_FUNCTION=1
scanbd: setting env: PATH=/home/martin/.local/bin:/home/martin/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/martin/.dotnet/tools
scanbd: setting env: PWD=/home/martin
scanbd: setting env: USER=martin
scanbd: setting env: HOME=/home/martin
scanbd: setting env: SCANBD_DEVICE=fujitsu:ScanSnap iX500:1559390
scanbd: setting env: SCANBD_ACTION=scan
scanbd: append string fujitsu:ScanSnap iX500:1559390 to signal scan_begin
scanbd: now sending signal scan_begin
scanbd: append string SCANBD_FUNCTION_MODE=Lineart to signal trigger
scanbd: append string SCANBD_FUNCTION=1 to signal trigger
scanbd: append string PATH=/home/martin/.local/bin:/home/martin/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/martin/.dotnet/tools to signal trigger
scanbd: append string PWD=/home/martin to signal trigger
scanbd: append string USER=martin to signal trigger
scanbd: append string HOME=/home/martin to signal trigger
scanbd: append string SCANBD_DEVICE=fujitsu:ScanSnap iX500:1559390 to signal trigger
scanbd: append string SCANBD_ACTION=scan to signal trigger
scanbd: now sending signal trigger
scanbd: now flushing the dbus
scanbd: unref the signal
scanbd: using absolute script path: /home/martin/scan.sh
scanbd: waiting for child: /home/martin/scan.sh
scanbd: Can't seteuid root: Operation not permitted
scanbd: child /home/martin/scan.sh exited with status: 1
scanbd: append string fujitsu:ScanSnap iX500:1559390 to signal scan_end

Das entscheidende ist wohl scanbd: Can't seteuid root: Operation not permitted. Ich habe versucht,User + group auf root zu ändern oder die Standardwerte saned/scanner zu nehmen. Leider genau das gleiche. Ich fand Bugreports, wonach in /lib/udev/rules.d/99-saned.rules die group von saned auf scanner zu ändern. Hat leider auch nichts gebracht, und ich weiß auch nicht, wie es in der funktionierenden Version 25.10 aussah. Mein User ist in den Gruppen scanner und saned enthalten.

Wenn ich ~./scan.sh unter meinem User manuell ausführe, klappt der Scan.

Wenn ich sudo SANE_CONFIG_DIR=/etc/scanbd scanbd -f -d7 aufrufe, funktioniert es. Egal ob als User oder als root gestartet, wird jeweils

scanbd: reading config file /etc/scanbd/scanbd.conf
scanbd: debug on: level: 7
scanbd: dropping privs to uid martin
scanbd: dropping privs to gid martin
scanbd: drop privileges to gid: 1000
scanbd: Running as effective gid 1000
scanbd: drop privileges to uid: 1000
scanbd: Running as effective uid 1000

geloggt. Der einzige Unterschied den ich sehe ist, dass bei manueller Ausführung von scanbd als root dies für das Ausführen des Scriptes geloggt wird:

scanbd: using absolute script path: /home/martin/scan.sh
scanbd: waiting for child: /home/martin/scan.sh
scanbd: setgid to gid=1000
scanbd: setuid to uid=1000
scanbd: exec for /home/martin/scan.sh
scanbd: octal mode for /home/martin/scan.sh: 100755
scanbd: file uid: 1000, file gid: 1000

Warum kann scanbd das unter meinem User und group laufende Script nur als root ausführen? Nächste Frage wäre dann, unter welchem User scanbd eigentlich ausgeführt wird, wenn es über systemd gestartet wird.

martin@martin-desktop:~$ sudo systemctl status scanbd
● scanbd.service - LSB: Scanner button events daemon
     Loaded: loaded (/etc/init.d/scanbd; generated)
     Active: active (exited) since Sat 2026-05-02 15:51:39 CEST; 6min ago
 Invocation: aa2526b063a44ecdbb6cf14d749b7e02
       Docs: man:systemd-sysv-generator(8)
    Process: 28815 ExecStart=/etc/init.d/scanbd start (code=exited, status=0/SUCCESS)
   Mem peak: 2.2M
        CPU: 15ms

Bedeutet exited, dass der Dienst gar nicht läuft? ps aux |grep scanbd zeigt auch keinen laufenden Prozess an. Aber wieso ist anhand des Logs

Mai 02 15:51:39 martin-desktop systemd[1]: Starting scanbd.service - LSB: Scanner button events daemon...
Mai 02 15:51:39 martin-desktop scanbd[28815]:  * /etc/sane.d/net.conf should contain a value for connect_timeout
Mai 02 15:51:39 martin-desktop scanbd[28815]:  * /etc/sane.d/dll.conf should contain only the net backend
Mai 02 15:51:39 martin-desktop systemd[1]: Started scanbd.service - LSB: Scanner button events daemon

kein Abbruch erkennbar? Die beiden Zeilen sind doch nur Hinweise - es heißt ja "should" und nicht "must"

DoktorSeltsam

(Themenstarter)

Anmeldungsdatum:
11. Februar 2007

Beiträge: 733

Wohnort: Hamburg

Ich habe leider nur eine rudimentäre Datensicherung meiner 25.10-Installation und kann nicht exakt abgleichen, was ich dort vorher evtl. geändert hatte. Fakt ist, dass scanbd eigentlich schon immer über ein init.d-Script gestartet wird. Darin gibt es diese Funktion:

# Function to check for common configuration mistakes
#
do_check_config()
{
	grep '^connect_timeout' /etc/sane.d/net.conf > /dev/null || log_warning_msg "/etc/sane.d/net.conf should contain a value for connect_timeout"
	egrep -v '(net|^#|^$)'  /etc/sane.d/dll.conf > /dev/null && do_abort "/etc/sane.d/dll.conf should contain only the net backend"
	egrep -x '(net)'        /etc/sane.d/dll.conf > /dev/null || do_abort "/etc/sane.d/dll.conf should contain the net backend"
	egrep -x '(net)'        /etc/scanbd/dll.conf > /dev/null && do_abort "/etc/scanbd/dll.conf must not contain the net backend"
	pidof saned > /dev/null && do_abort "It was detected that saned is already running. This will lead to problems. scanbd will not be started. Please stop saned before trying again. Most likely you activated RUN=yes in /etc/default/saned.  Change that to 'no'."
}

Wie man sieht, resultiert der fehlende connect_timeout-Eintrag in /etc/sane.d/net.conf nur in einer Warnung, während die anderen Checks (obwohl mit gleichlautend formulierter Meldung ("should contain ...") zu einem Abbruch führen, ohne dass dies aus der Log-Meldung erkennbar ist! Es darf nichts anderes als net in der /etc/sane.d/dll.conf stehen, und es muss net darin stehen. In der /etc/scanbd/dll.conf darf net hingegen nicht drin stehen. Nun kann man sich natürlich die Frage stellen,warum diese Konfigurationsdateien denn nicht gleich so ausgeliefert werden, dass man nichts rauslöschen oder reinschreiben muss... Allerdings wird das im wiki-Eintrag alles beschrieben.

Ich kann nur vermuten, dass ich unter 25.10 mir einen eigenen systemd-Service eingerichtet hatte, der ohne das init.d-Script lief. Dieser Service wurde dann wahrscheinlich beim upgrade durch eine vom systemd-sysv-generator erzeugte /etc/systemd/system/scanbd.service überschrieben.

Ich habe mich jetzt am wiki orientiert und das Scannen per Knopfdruck geht wieder!

Antworten |