Linux und Ich

Blog über Ubuntu, Linux, Android und IT

Mit einem Tastendruck scannen

Scan a page page with a single push of a button

| 15 Comments

Quite often I’ve got to scan documents and save them as PDF. Usually I do this with gscan2pdf but for just one page even such a great tool like gscan2pdf is too much. It takes more time to start the program, go through the menus etc. than the scan process itself.

As a simple work around I wrote scan2pdf. scan2pdf is a simple and small programm for the shell. It searches for a scanner, saves the settings to a config file, scans and saves the result into a PDF on your desktop.

Anzeige

If you’re insterested you can download and install it via

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

onto your system. scan2pdf uses .tif as a temporary format. To convert the image into pdf you need libtiff-tools as additionally package which is not installed inside Ubuntu by default. You’ve got to install it via.

$ sudo apt-get install libtiff-tools

Everything else which scan2pdf needs should be by default on your system. After this you can start scan2pdf via e.g.

$ scan2pdf -m gray -r 150

This will scan your document as greyscale image with a resolution of 150 dpi. The resulting file will be saved onto your desktop. I didn’t implement a way to define the name of the image since usually i change the name afterwards any way… The options of scan2pdf are

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

When you call the program for the first time you will get a small dialog where you can choose which scanner you like to use. This info (together with some settings) will be saved into ~/.scan2pdf. When you scan several pages in a row they will be saved as scan1.pdf, scan2.pdf, etc on your desktop.

scan2pdf will be more interesting when you’ve got a scanner with “action buttons”. You can use them under linux and call with them scan2pdf…

Scanbutton an einem Canon CanoScan N650U

Scanbutton an einem Canon CanoScan N650U

To use these buttons you need a small daemon called scanbuttond which you can installed out of the package sources of Ubuntu or Debian. There’s also a list of supported devices on the homepage of scanbuttond. After you installed the program

$ sudo apt-get install scanbuttond 

you can test it via

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

When you push the buttons of your scanner you should get a result like the one above. After this you should configure scanbuttond. You can do this inside the file /etc/scanbuttond/buttonpressed.sh. I replaced the “demo” line

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

with

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

so that scan2pdf is executed when i push the button on my scanner. I set scan2pdf to scan in greyscale and 150 dpi. Please choose your own settings. There’s not much left, than to start scanbuttond with

$ scanbuttond

I think that you don’t like to do this every time you start your computer, so you should add an entry inside “System -> Preferences -> Startup Applications” for scanbuttond…

  • Name: scanbuttond
  • Command: scanbuttond
  • Comment: Start scanbuttond

Your done. After you start your computer scanbuttond is up and running. When you hit the button on your scanner you will get a PDF on your desktop.

Author: 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.

15 Comments

  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

Leave a Reply

Required fields are marked *.