Hallo,

ich hatte mir in den Kopf gesetzt, die Tasten an meinem alten Epson Perfection640 benutzen zu können und eine ganze Weile rumprobiert. Anfangs mit scanbuttond [1] - damit habe ich es geschafft [2] - allerdings wird diese Software seit geraumer Zeit nicht mehr aktiv weiter entwickelt.

Schließlich bin ich auf scanbd [3] aufmerksam geworden und nach einigen Mails mit dem Autor des Programms lässt sich scanbd auch unter Arch relativ einfach installieren - im Beispiel für meinen Epson Scanner der Weg über die Backends von scanbuttond.
Das ist möglicherweise nicht für jeden erforderlich, eine Liste mit unterstützten Geräten fehlt aber offenbar - mit Geräten deren Tasten direkt von Sane unterstützt werden sollte es klappen, ebenso mit jenen, die von scanbuttond unterstützt werden:

Vorab zur Info - sane (der "globale", mit den Konfigs in /etc) muss bei Verwendung von scanbd so konfiguriert werden, dass er via Netzwerk auf den Scanner zugreift [4], auch wenn der Scanner direkt per USB am lokalen Rechner hängt. Grund ist, dass scanbd auf diese Weise Resourcenkonflikte verhindert in dem er sowohl die Scannertasten dauerhaft abruft (und somit das Device belegt) als auch beim Aufruf von sane selber zwischengeschaltet ist und den Scanvorgang einfach an den eigentlich scannenden saned (dessen Konfigs dann unter /usr/local/etc/scanbd liegen) durchreicht.

Eine gute Idee ist es vor dem Basteln sicherzustellen das sane mit dem Scanner funktioniert sowohl lokal als auch via Netz funktioniert. Außerdem kann man bei Kenntnis des verwendeten sane Backends die dll.conf später zusammenkürzen.

... in einem Bastel-Verzeichnis ...
svn co https://scanbd.svn.sourceforge.net/svnroot/scanbd/trunk
cd trunk
Da ich wegen meines alten Scanners auf die scanbuttond-Backends zurückgreifen muss und eben diese mit der aktuell via core-Repository gelieferten libusb-compat noch nicht funktionieren (kein Fehler, der Scanner wird einfach nicht erkannt) nutze ich ein den Sourcen beiliegendes PKGBUILD vor dem Kompiliervorgang [5].
Pacman gibt deswegen beim nächsten Syyuu eine Warnung aus - wie man das löst steht hier ... [6].
cd contrib
makepkg
makepkg -i
cd ..
USE_SCANBUTTOND=yes make -e clean all
USE_SCANBUTTOND=yes make install
Wenn der Scanner von Sane direkt unterstützt wird, dann vereinfacht sich der Prozess ein wenig:
USE_SANE=yes make -e clean all
USE_SANE=yes make install

Jetzt ist die Datei /etc/xinetd.d/sane wie folgt anzupassen:
service sane-port
{
        port        = 6566
        socket_type = stream
        wait        = no
        user        = root
        group       = scanner
        server      = /usr/local/bin/scanbd
        server_args = scanbd -m -c /usr/local/etc/scanbd/scanbd.conf
        disable     = no
                  }

Außerdem kopiert man aus dem Verzeichnis /etc/sane.d die Dateien saned.conf, dll.conf und die .conf vom verwendeten Sane-Backend (hier liegt die sane.d Konfig für den physisch angeschlossenen Scanner) nach /usr/local/etc/scanbd


in der /usr/local/etc/scanbd/dll.conf trägt man den Namen des verwendeten Backends ein:
epson2

... in der /etc/sane.d/dll.conf trägt man hingegen nur das net-Backend ein - Grund ist, dass scanbd ja alle Anfragen an sane.d "wrappen" muss - nicht nur die direkt vom Netz kommen.
net

... in der /etc/net.conf entfernt man das Kommentarzeichen vor localhost
localhost

... und je nach Bedarf die Konfig-Datei /usr/local/etc/scanbd/scanbuttond/backends/meta.conf für die scanbuttond-Backends
epson

Jetzt sollte es klappen:
/usr/local/bin/scanbd -df -c /usr/local/etc/scanbd/scanbd.conf
Ausgabe bei mir:
(...)
/usr/local/bin/scanbd: Loading /usr/local/etc/scanbd/scanbuttond/backends/epson.so
/usr/local/bin/scanbd: meta-backend: attaching backend: Epson USB
/usr/local/bin/scanbd: epson-backend: init
/usr/local/bin/scanbd: meta-backend: attached scanner "Epson Perfection 640"
/usr/local/bin/scanbd: Scanning for local-only devices
/usr/local/bin/scanbd: found device: Perfection 640 Epson epson:libusb:001:008
(...)
/usr/local/bin/scanbd: button 3 has been pressed.
/usr/local/bin/scanbd: value trigger: numerical
/usr/local/bin/scanbd: trigger action for device Perfection 640 with script /usr/local/etc/scanbd/test.script
(...)

Wenn die Konfiguration passt, erkennt scanbd die Scannertasten und ein lokal ausgeführtes scanimage -L führt zu folgendem (bzw. ähnlichem) Ergebnis:
scanimage -L
device `net:localhost:epson2:libusb:001:010' is a Epson Perfection640 flatbed scanner

Was jetzt noch fehlt sind angepasste Scripte für die einzelnen Scannertasten - damit werde ich mich je nach Wetter und Stress auf Arbeit wohl im Laufe der kommenden Woche beschäftigen - alternativ postet jemand sein Script ...


[1] http://scanbuttond.sourceforge.net/
[2] http://www.computer-forum.net/viewtopic.php?t=5264
[3] http://scanbd.sourceforge.net/
[4] https://wiki.archlinux.org/index.php/USB_Scanner_Support#Network_scanning
[5] https://bugs.archlinux.org/task/23936
[6] https://forum.archlinux.de/viewtopic.php?id=20885


[edit]Korrektur Fehler lokale Verwendung von sane[/edit]
Für die Skripte muss man zunächst wissen, welche Taste welche SCANBD_ACTION auslöst. Dazu habe ich die Variable debug in der scanbd.conf auf 4 gesetzt (wenn alles läuft wieder auf 1 stellen) und scanbd im Debug-Modus gestartet, wenn man dann eine Taste am Scanner drückt sollte man etwas in der Art sehen:
/usr/local/bin/scanbd -df -c /usr/local/etc/scanbd/scanbd.conf
(...)
/usr/local/bin/scanbd: append string PWD=/usr/local/etc/scanbd to signal trigger
/usr/local/bin/scanbd: append string USER=root to signal trigger
/usr/local/bin/scanbd: append string HOME=/root to signal trigger
/usr/local/bin/scanbd: append string SCANBD_DEVICE=epson:libusb:001:010 to signal trigger
/usr/local/bin/scanbd: append string SCANBD_ACTION=web to signal trigger
Interessant ist die Zeile SCANBD_ACTION=web - für die betreffende Taste wird also das mit "web" verbundene Skript ausgeführt - für die Tasten meines Scanners benötige ich email, web und copy.


... für die scanbuttond-Backends muss die Sektion devices in der scanbd.conf entfernt werden.

        action email {
                filter = "^email$"
                string-trigger {
                        from-value  = ""
                        to-value    = "^email.*"
                }
                desc   = "Scan to email"
                # script must be an absolute pathname to the action script without arguments
                script = "/usr/local/etc/scanbd/pdf-sw-multi.script"
        }
        action web {
                filter = "^web$"
                string-trigger {
                        from-value  = ""
                        to-value    = "^web.*"
                }
                desc   = "Scan to web"
                # script must be an absolute pathname to the action script without arguments
                script = "/usr/local/etc/scanbd/pdf-sw.script"
        }
        action copy {
                filter = "^copy$"
                string-trigger {
                        from-value  = ""
                        to-value    = "^copy.*"
                }
                desc   = "Copy to printer"
                # script must be an absolute pathname to the action script without arguments
                script = "/usr/local/etc/scanbd/kopie.script"
        }


... hier mein Kopier-Skript:
#!/bin/bash

DATE=`date +%Y%d%m-%H%M%S`

WORK="/home/alex/"

TMPFILE=$WORK$DATE

scanimage --device-name $SCANBD_DEVICE --format tiff --resolution 300 -l 0 -t 0 -x 215mm -y 280mm  > ${TMPFILE}".tiff"

tiff2ps -z -w 8.27 -h 11.69 ${TMPFILE}".tiff" | lpr -P "FS920"

rm ${TMPFILE}".tiff"


... hier mein Skript für mehrseitige PDFs - der Scanner hat keinen Einzug und die Mühe im Nachhinein aus Einzel-PDFs ein großes zu machen wollte ich mir sparen - daher wird hier nur eine TIFF gescant und nicht gelöscht:
#!/bin/bash

# Script für mehrseitige PDFs

# Script scannt nur in TIFF - Zusammenbau der erstellten TIFFs zu einem PDF im Script für Einzelseiten

DATE=`date +%Y%d%m-%H%M%S`

WORK="/home/work/"

TMPFILE=$WORK$DATE".tiff"

scanimage --device-name $SCANBD_DEVICE --format tiff --resolution 300 -l 0 -t 0 -x 215mm -y 280mm  > ${TMPFILE}

... und hier das Skript für Einzelseiten, welches außerdem alle vorab gescanten TIFF-Dateien mit der zuletzt gescanten zu einem PDF zusammenfügt:
#!/bin/bash

# Script scannt eine Seite und fügt alle bereits vorhandenen TIFFs zu einer und dann zu einem PDF zusammen

WORK="/home/work/"

DATE=`date +%Y%d%m-%H%M%S`

DEST="/home/alex/"

TMPFILE=$WORK$DATE".tiff"

scanimage --device-name $SCANBD_DEVICE --format tiff --resolution 300 -l 0 -t 0 -x 215mm -y 280mm  > ${TMPFILE}

tiffcp -c lzw $WORK*.tiff $DEST"document.tiff"

tiff2pdf -j -q 85 -u m -p "A4" -f $DEST"document.tiff" > $DEST${DATE}.pdf

rm $WORK*

rm $DEST"document.tiff"

chown alex:users ${DEST}${DATE}.pdf

So - Kommentare, Verbesserungen, alternative Skripte sind gern gesehen 😃
ein Jahr später
  • [gelöscht]

Hallo atomical,

super Beiträge!

Eine Frage hätte ich noch, da ich das ganze noch nicht durchschaue:

Ich nutze einen Scanner mit Tasten an einem Scan-Server. Kann man auch hier die Tasten verwenden? Am Server direkt wird es wohl klappen, aber was ist mit den Clients?


Danke.
maart
3 Jahre später
  • [gelöscht]

maart schriebHallo atomical,

super Beiträge!
Eine Frage hätte ich noch, da ich das ganze noch nicht durchschaue:
Ich nutze einen Scanner mit Tasten an einem Scan-Server. Kann man auch hier die Tasten verwenden? Am Server direkt wird es wohl klappen, aber was ist mit den Clients?

Danke.
maart
Hallo maart!

Bist du sicher, dass du das Prinzip verstanden hast? Scanbd ist grundsätzlich (fast) ausschließlich dafür gedacht, dass man den Scanner - wie von profanen WinzigWeich-Systemen gewohnt - per Tasten steuern kann. Allerdings geht es noch einen Schritt weiter, indem es unterstützte Scanner _zusätzlich_ als netzwerkweit verfügbare Peripherie zur Verfügung stellt und so dem kundigen Benutzer ermöglicht, für die immer mal wieder vorkommenden Sonderfälle maßgeschneiderte Scans per GUI-Anwendungen (wie z.B. xsane) anzufertigen. Hauptsächlich jedoch dient scanbd dazu, die Eintasten-Bedienbarkeit der Scanner auch der Linux-Welt zur Verfügung zu stellen, um z.B. einen Einzugsscanner mit zu erfassenden Dokumenten zu bestücken, dann auf den Knopf Scan zu drücken, ein Käffchen zu schlürfen und hernach die fertig eingescannten (und bei Bedarf gleich noch per OCRmyPDF maschinenlesbar gemachten) PDFs digital zu archivieren. Wofür brauchst du da noch Clients, abgesehen von oben genannten Sonderfällen?

Cheers
Waal
Ich bezweifle mal, dass er dir nach drei Jahren noch antworten wird.
Nach vier Jahren, der Post davor war auch schon ein Nekropost...