Linux und Ich

Blog über Ubuntu, Linux, Android und IT

Mit einem Tastendruck scannen

Mit einem Tastendruck scannen

| 19 Kommentare

Ich muss öfters Dokumente einscannen und als PDF abspeichern. Ein Job den eigentlich gscan2pdf wunderbar macht. Doch, wenn ich nur eine Seite einscannen möchte, so ist gscan2pdf einfach ein bisschen “zu viel”. Das Programm starten und sich durch die Dialoge zu hangeln dauert einfach länger als der Scan selber.

Als kleinen Workaround habe ich mir scan2pdf geschrieben. scan2pdf ist ein simples kleines Kommandozeilenprogramm, das eine Seite scannt und das Ergebnis als .pdf auf den Desktop abspeichert. Mehr kann und soll das Programm gar nicht machen.

Wer will kann es über

$ sudo wget http://linuxundich.de/static/scan2pdf-1.0.sh -O /usr/local/sbin/scan2pdf
$ sudo chmod +x /usr/local/sbin/scan2pdf

installieren. Das Programm scannt dabei eingelegte Dokumente als .tif. Damit es den Scan später in ein PDF umwandeln kann braucht es das Paket libtiff-tools. Dieses ist üblicherweise nicht bei einem Ubuntu installiert. Es muss daher via

$ sudo apt-get install libtiff-tools

nachinstalliert werden. Alle anderen Abhängigkeiten sind von Haus aus bei einem Ubuntu installiert. Danach kann man via

$ scan2pdf -m gray -r 150

scannen. Eine Eingabe eines Dateinamens habe ich nicht vorgesehen. Die Dateien werden nach dem Scan (bei mir) eh nochmal umbenannt. Als Optionen gibt es

$ scan2pdf --help
Usage: scan2pdf -m {lineart,gray,color} -r [resolution in dpi]
 -m: Scan mode, choose lineart, gray or color
 -r: Resolution in dpi

Beim ersten Aufruf des Programms erscheint ein kleiner Dialog, über den man seinen Scanner auswählen kann. Die Info wird dann zusammen mit ein paar Details zum Scanner in der Datei ~/.scan2pdf abgelegt.

Scannt man mehrere Dateien hintereinander, so werden sie als scan1.pdf, scan2.pdf usw. auf dem Desktop abgelegt. Die Namen und Pfade lassen sich bei Bedarf im Skript anpassen. Richtig elegant und bequem wird es, wenn der Scanner eine Tasten zum Auslösen einer Aktion besitzt.

Scanbutton an einem Canon CanoScan N650U

Diese Tasten kann man auch unter Linux benutzen. Eine Liste unterstützter Scanner findet man hier und Infos zum Programm – wie so oft – im Wiki von uu.de. Hat man das Programm über

$ sudo apt-get install scanbuttond 

installiert, so kann man über

$ scanbuttond -f
button 1 has been pressed on plustek:libusb:001:004
button 1 has been pressed on plustek:libusb:001:004

ausprobieren ob es funktioniert. Sobald Ausgaben beim Druck auf einen der Buttons am Scanner erscheinen funktioniert das Programm. Die Konfiguration des Programms erfolgt über die Datei /etc/scanbuttond/buttonpressed.sh. Hier habe ich mein kleines Skript eingetragen. Man kommentiert bspw. die Zeile

[...]
echo "button 1 has been pressed on $2"
[...]

aus und fügt nach ihr

[...]
/usr/local/sbin/scan2pdf -m gray -r 150
[...]

ein. Damit wird scan2pdf beim Druck auf die erste Taste ausgeführt und scannt das eingelegte Dokument mit Graustufen und 150dpi ein. Wer andere Werte bevorzugt trägt einfach eine andere Auflösung oder einen anderen Scanmodus ein. Nun fehlt nicht mehr viel. Nachdem man scanbuttond konfiguriert hat, muss man es nur noch ausführen

$ scanbuttond

Damit dies in Zukunft automatisch beim Einloggen in die Desktopumgebung passiert, muss man es für den Autostart noch unter “System -> Einstellungen -> Sitzung” als Startprogramm hinzufügen. Als Einstellungen wählt man

  • Name: scanbuttond
  • Befehl: scanbuttond
  • Kommentar: scanbuttond starten

Ab jetzt wird scanbuttond automatisch beim Einloggen gestartet und man kann über die Buttons des Scanners automatisch Scans auslösen.

(Bildquelle: Tim Regan, CC-BY, Flickr)

Autor: Christoph

Hallo, ich bin Christoph -- Linux-User, Blogger und pragmatischer Fan freier Software. Wie Ihr ohne Zweifel bemerkt haben solltet schreibe ich hier über Linux im Allgemeinen, Ubuntu im Speziellen, sowie Android und andere Internet-Themen. Wenn du Freude an meinen Artikel gefunden haben solltest, dann kannst du mir über Facebook, Google+ oder Twitter oder natürlich dem Blog folgen.

19 Kommentare

  1. Etwas Ähnliches gibt es im Wiki von debianforum.de, als nächstes muss ich mal deine Variante ausprobieren. Auf jeden Fall ist ein solches Script ein Segen, ich archiviere damit alle Dokumente, von denen ich eventuell mal eine Kopie benötige:

    http://wiki.debianforum.de/Scan2Pdf

    :-)

  2. Christoph, Dein Skript gefällt mir gut und funktioniert bei mir, nachdem ich ein paar kleine Macken umschifft habe. Wie es der Zufall will, habe ich auch einen Canon N650U.

    Zu den Macken: Mein Desktop-Verzeichnis heißt “desktop”, nicht “Desktop”. Um das Skript zum Laufen zu bringen, mußte ich die Variable OUTDIR entsprechend anpassen. Kein großes Ding, komfortabler wäre es aber, wenn das Desktop-Verzeichnis automatisch erkannt würde (sicher geht das irgendwie) oder zumindest für den Fall, daß ~/Desktop nicht existiert, ersatzweise ~ verwendet würde.

    Wenn ich nach dem ersten Aufrufen des Skripts und dem Auswählen des Scanners diesen aus- und wieder einstecke (möglicherweise gar in einen anderen USB-Anschluß), verabschiedet sich das Skript mit undurchsichtigen Fehlermeldungen. Nur durch Löschen von ~/.scan2pdf läßt es sich dann wieder zum Leben erwecken. Auch hier ist noch etwas intelligente Fehlerbehandlung vonnöten. (Und gehört die Konfigurationsdatei auf einem modernen Linux nicht eigentlich in ein Unterverzeichnis in ~/.config?)

    Damit scan2pdf beim Drücken der Scannertaste automatisch aufgerufen wird, muß man übrigens nicht unbedingt an /etc/scanbuttond/buttonpressed.sh herumzuschrauben (nicht jeder Benutzer kann oder will Dateien außerhalb des eigenen Verzeichnisses verändern). Man kann das auch einrichten, indem man scanbuttond mit dem Parameter buttonscript aufruft. Bei mir sieht das momentan so aus (unlink wegen des obigen Problems, und initscript scheint nötig zu sein, damit der Scanner überhaupt auf den Tastendruck reagiert):

    scanbuttond --initscript=sane-find-scanner --buttonscript='unlink ~/.scan2pdf && scan2pdf -m color -r 150'

    Danke für Deine Mühen und viel Spaß beim weiteren Feilen am Skript!

  3. Hi Christoph,
    coole Idee, nur leider scheint das mit dem Scanbutton mit einem HP PSC2210 nicht zu funktionieren. Zumindest reagiert scanbuttond -f nicht, wenn ich am Scanner drücke.

    Weiß jemand, woran das liegen könnte?

  4. Ich habe das Gleiche Problem. “Scanbutton” reagiert nicht auf einen Druck am Scanner. Auch kann ich nicht direkt vom Drucker aus meine Dateien einscannen, da dieser via W-Lan (HP PSC6324) mit meinem PC verbunden ist und ein Scan eigentlich nur via “direkter” Verbindung möglich ist. Mit X-Sane kann ich allerdings scannen.
    Hat evtl. jemand einen Lösungsvorschlag?

  5. @Sebastian
    Danke für deine Hinweise. Werde das Skript die Tage nochmal ergänzen und am besten noch gleich einen neuen Namen finden.

    @burli, ottl
    Schaut euch mal die Liste unterstützter Scanner an. Diese Scanner werden da nicht aufgeführt…

  6. Da mein Epson Perfection 4870 Photo nicht in scanbuttond bereits eingetragen ist. Wollte ich das nacharbeiten und scanbuttond kompilieren. Leider, trotz unauffälligem Kompilierdurchlauf, wurde scanbuttond nicht in Ubuntu installiert, die Dateien liegen noch immer im Quellcode und nicht in der Maschinensprache vor.

  7. @TFT
    Ich weiß nicht, ob ich dir hier helfen kann. Hast du
    http://wiki.ubuntuusers.de/Programme_kompilieren gelesen? Eventuell bist du mit der Frage in einem Forum besser aufgehoben.

  8. Hallo Christoph,
    finde dein Programm sehr nützlich für meine Belange. Leider läßt es sich nach der Installation nicht starten, sondern verabschiedet sich sofort nach Befehlseingabe in der Konsole mit den folgenden Fehlern:

    xyz@abc:~$ scan2pdf -m gray -r 150
    scanimage: setting of option --mode failed (Invalid argument)
    /tmp/file97I36I.tif: Cannot read TIFF header.
    tiff2pdf: Can't open input file /tmp/file97I36I.tif for reading.
    Error: /undefinedfilename in --file--
    Operand stack:
       --nostringval--   (/tmp/file97I36I.opt.pdf)   (/tmp/file97I36I.pdf)   (r)
    Execution stack:
       %interp_exit   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--   --nostringval--   --nostringval--   false   1   %stopped_push   1862   1   3   %oparray_pop   1861   1   3   %oparray_pop   1845   1   3   %oparray_pop   1739   1   3   %oparray_pop   --nostringval--   %errorexec_pop   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--   --nostringval--
    Dictionary stack:
       --dict:1150/1684(ro)(G)--   --dict:0/20(G)--   --dict:109/200(L)--
    Current allocation mode is local
    Last OS error: 2
    Current file position is 36516
    GPL Ghostscript 8.70: Unrecoverable error, exit code 1
    cp: Aufruf von stat für „/tmp/file97I36I.opt.pdf“ nicht möglich: No such file or directory
    

    Kannst Du mir weiterhelfen?
    Habe xubunutu 9.10 uptodate und auch die libtiff-tools installiert. Die Datei /tmp/file97I36I.tif existiert, hat Lese- und Schreibrecht und aber nur ist 0 byte groß. Beim ersten Start konnte ich zuerst meinen Scanner auswählen, dannach trat dann der Fehler auf.

    Deiner hoffentlich informativen Antwort sehe ich entgegen und danke Dir schon jetzt dafür. Gruß HP

  9. Hallo Henrik, hat ein bisschen gedauert, bis ich Zeit für dich habe… Öffne bitte mal ein Terminal und gib…

    scanimage -L
    

    …ein. Was wird dir ausgegeben?

  10. Hallo Christoph, die Ausgabe liefert

    abc@xyz:~$ scanimage -L
    device `mustek_usb:libusb:003:002' is a Mustek 1200 CU flatbed scanner
    

    Entschuldige, die Scanner-Angabe hatte ich schon oben angeben wollen. Bin irgendwie darüber hinweg gekommen. Der Scanner funktioniert sonst auch mit xsane etc. Bei gscan2pdf scannt er ein, hängt sich aber beim Export in pdf etc auf. Das obige Skript aus dem Debian-Forum funktioniert, es gefällt mir aber von der pdf-Qualität her nicht.

    Hoffe, daß ich diesmal an alle Angaben gedacht habe.

  11. Hallo Henrik, sorry dass ich so spät erst wieder auf das Thema komme. Der Mustek Treiber für sane scheint die Option “–mode” nicht zu kennen. Ich weiß jetzt leider nicht wie man dem Mustek Scanner die Bildart vermittelt. Mal sehen ob ich dazu was finde.

    Grüße
    Christoph

  12. Scannen unter Linux ist echt scheiße!

    gscan2pdf hat fast keine Features, automatischer Dokumenteneinzug wird nicht gelegentlich unterstützt, keine automatischen Korrekturfilter (damit weißes Papier auch weiß aussieht) etc.

    Und die Trottel basteln parallel an fünf Projekten, anstatt gemeinsam ein vernünftiges Programm zu entwickeln.

  13. @ Der Name
    da stellt sich die Frage warum Du Gehirnakrobat Dich überhaupt damit beschäftigst – willst wohl nur kostenlose Software abstauben und dann noch rummeckern… machs besser!

  14. Danke dir, dein Skript funktioniert bei mir perfekt.

    Gruß,
    Martin

  15. $scanbuttond -f

    Gibt folgendes aus

    # sane-find-scanner will now attempt to detect your scanner. If the
    # result is different from what you expected, first make sure your
    # scanner is powered up and properly connected to your computer.

    # No SCSI scanners found. If you expected something different, make sure that
    # you have loaded a kernel SCSI driver for your SCSI adapter.
    # Also you need support for SCSI Generic (sg) in your operating system.
    # If using Linux, try “modprobe sg”.

    found USB scanner (vendor=0x04a9 [Canon], product=0×1732 [MP240 series]) at libusb:001:004
    found USB scanner (vendor=0×0424, product=0xec00) at libusb:001:003
    # Your USB scanner was (probably) detected. It may or may not be supported by
    # SANE. Try scanimage -L and read the backend’s manpage.

    # Not checking for parallel port scanners.

    # Most Scanners connected to the parallel port or other proprietary ports
    # can’t be detected by this program.

  16. Hallo,

    hab mich gefreut endlich ein schoenes commandline Tool fuer den Scanner zu finden. Leider scheitert es mit der folgenden Fehlermeldung. Die Pakete sind alle installiert. OS ist openSuSE 12.1 Any idea?! :)

    mb@tommywonder:~/Downloads> sh scan2pdf-1.0.sh -m gray -r 150
    scan2pdf-1.0.sh: Zeile 39: tempfile: Kommando nicht gefunden.
    scanimage: open of device genesys:libusb:001:018 failed: Invalid argument
    .tif: Cannot read TIFF header.
    tiff2pdf: Can’t open input file .tif for reading.
    Error: /undefinedfilename in –file–
    Operand stack:
    –nostringval– (.opt.pdf) (.pdf) (r)
    Execution stack:
    %interp_exit .runexec2 –nostringval– –nostringval– –nostringval– 2 %stopped_push –nostringval– –nostringval– –nostringval– false 1 %stopped_push 1910 1 3 %oparray_pop 1909 1 3 %oparray_pop 1893 1 3 %oparray_pop 1787 1 3 %oparray_pop –nostringval– %errorexec_pop .runexec2 –nostringval– –nostringval– –nostringval– 2 %stopped_push –nostringval– –nostringval–
    Dictionary stack:
    –dict:1171/3371(ro)(G)– –dict:0/20(G)– –dict:116/200(L)–
    Current allocation mode is local
    Last OS error: 2
    Current file position is 36519
    GPL Ghostscript 9.00: Unrecoverable error, exit code 1
    cp: Aufruf von stat für „.opt.pdf“ nicht möglich: Datei oder Verzeichnis nicht gefunden

  17. Ach ja, noch die Ausgabe von scanimage -L:

    mb@tommywonder:~/Downloads> scanimage -L
    device `genesys:libusb:001:008′ is a Canon LiDE 110 flatbed scanner
    mb@tommywonder:~/Downloads>

  18. Sicherlich ein hübsches Script, leider unter Ubuntu wohl nicht mehr funktionsfähig, weil pdfopt nicht mehr in ghoistscript enthalten ist.
    Gibt es da Abhilfe?

Hinterlasse eine Antwort

Auf Linux und Ich darf anonym kommentiert werden. Die Felder für Name und E-Mail-Adresse dürfen beim Eintragen eures Kommentars leer bleiben. Ich freue mich aber über jeden Kommentar, zu dem der Autor mit seinem Namen steht.