bscand

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Ausbaufähige Anleitung

Dieser Anleitung fehlen noch einige Informationen. Wenn Du etwas verbessern kannst, dann editiere den Beitrag, um die Qualität des Wikis noch weiter zu verbessern.


Anmerkung: Bisher wurde das Programm nur einem CanoScan LiDE 220 Scanner, der das genesys-backend verwendet, erfolgreich getestet. Bitte auch für andere Hardware testen!

Artikel für fortgeschrittene Anwender

Dieser Artikel erfordert mehr Erfahrung im Umgang mit Linux und ist daher nur für fortgeschrittene Benutzer gedacht.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

  1. Programme aus dem Quellcode erstellen

  2. Sourcecode patchen

  3. Installation von Programmen

  4. Ein Terminal öffnen

  5. Einen Editor verwenden

  6. mit Root-Rechten arbeiten

Inhaltsverzeichnis
  1. Installation
    1. Patchen des sane-backend-Quellcodes
    2. Erstellen der Programmdateien
  2. Anpassen der Konfigurationsdatei
  3. Starten des Dienstes
  4. Automatische Weiterverarbeitung
    1. Erstellen von DjVu-Dateien
  5. Probleme und Lösungen
    1. beep aktivieren
    2. lineart mit CanoScan LiDE 60
    3. Einstellungen zum Scannen
  6. Alternativen
  7. Links

bscand 🇬🇧 ist ein Programm, um Tasten am Scanner für Scanfunktionen verwenden zu können. Anders als andere Lösungen (scanbd, insaned) setzt bscand auf eine gepatchte sane-backends-Version (siehe SANE - Backends:), damit ist der Einsatz für alle sane-backends gewährleistet. Andere SANE-Programme bleiben voll einsatzfähig. Es muss eine SANE-Server installiert und auf dem Rechner funktionsfähig sein, da sowohl bscand als auch externe Programme darüber auf den Scanner zugreifen. bscand läuft als Daemon im Hintergrund, eine systemd-Unit existiert allerdings nicht, er muss manuell, oder über den Autostart aktiviert werden.

Das Programm ist noch in einem sehr frühen Entwicklungsstadium, die Dokumentation ist dürftig, es existiert auch keine manpage. Allerdings ist es derzeit anscheinend die einzige Lösung, mit der neben der Nutzung der Tasten tatsächlich externe (Scan-)Programme ohne größere Umwege eingesetzt werden können.

Installation

bscand ist nicht in den Quellen vorhanden und muss aus dem Quellcode erstellt werden[1], der von der Projektseite 🇬🇧 heruntergeladen werden kann. Zusätzlich benötigt man den Quellcode für SANE-backends, verwendbar sind die Versionen 1.0.25 (nicht getestet) und 1.0.27 (unter 18.04 getestet).

Hinweis!

Fremdsoftware kann das System gefährden.

Patchen des sane-backend-Quellcodes

Der Sourcecode für die sane-backends kann von der Downloadseite 🇬🇧 bezogen werden; nach der Überschrift RELEASE_1_0_25 bzw. 27 suchen, und den Code als Archiv herunterladen und entpacken (die Nutzung des aktuellsten Codes ist mit etwas Aufwand möglich, siehe Expertenhinweis). Dann die versionsentsprechenden patches aus dem entpackten bdscan-master/patches anwenden[2]. Dazu die patches aus dem bscand-master/patches-Verzeichnis nach .../sane-backends/ kopieren, im Terminal in das Verzeichnis wechseln und die patches mit

patch -p1 < 01-sane-backends-1.0.27-multiple-access-fix_v2.patch
patch -p1 < 03-sane-backends-1.0.27-failsafe_v2.patch 

einspielen, hier sind es die patches für sane-backends-1.0.27.

Experten-Info:

Grundsätzlich ist auch der Einsatz der aktuellen Entwicklerversion möglich (getestet mit der Version vom 12.05.2019); der ...failsafe_v2.patch hat schon Eingang in den master-branch erhalten, ist also nicht mehr nötig. Beim ...multiple-access-fix_v2 gibt einige Verschiebungen, daher im Anhang ein für die aktuelle Version angepasster patch ⮷.

Dann nach den Vorgaben in SANE/Kompilieren kompilieren, dabei darauf achten, dass das net-backend mit erstellt wird!

Die Konfiguration des SANE-Servers erfolgt für diese Variante in den Dateien in /usr/local/etc/sane.d, nicht in /etc/sane.d.

Außerdem müssen auch in der systemd-Unit saned@.service die Pfade für ExecStart= auf /usr/local/sbin/saned und Environment=SANE_CONFIG_DIR= entsprechend auf /usr/local/etc/sane.d gelegt werden, als User muss der angemeldete Benutzer verwendet werden. Bestehende systemd-Units werden am sichersten mit dem Befehl

sudo systemctl edit --full NAME_DER_UNIT_DATEI 

bearbeitet, es wird damit der eingerichtete System-Editor aufgerufen, die Datei wird dann nach /etc/systemd/system kopiert, und die Unit automatisch neugestartet (siehe Bestehende Units editieren).

Erstellen der Programmdateien

Benötigt werden die Pakete [3]

Wiki/Vorlagen/Installbutton/button.png mit apturl

Paketliste zum Kopieren:

sudo apt-get install libcups2-dev libconfig-dev libsane-dev libtiff-tools beep 

sudo aptitude install libcups2-dev libconfig-dev libsane-dev libtiff-tools beep 

Im Verzeichnis des entpackten Sourcecode-Archivs von bscand im Terminal[4] den Befehl

autoreconf -vfi 

ausführen, daraufhin das Programm erstellen und installieren (z.B. mit checkinstall).

Anpassen der Konfigurationsdatei

Die Konfiguration für das Auslösen von Aktionen über die Tasten am Scanner wird über die Datei bscand.cfg geregelt, zum Bearbeiten in einem Editor[5] öffnen. Die Datei wird beim Installieren nicht berücksichtigt, das Programm erwartet sie ohne Angabe der Option -c in /etc. Sie befindet sich im Verzeichnis des entpackten Quellcodes; man kann sie an den Ort eigener Wahl, z.B. nach ~/.config/bscand/ oder eben /etc verschieben.

Die Vorgaben sind für einen CanoScan LiDE 220 (genesys-backend) erstellt; sie lassen sich für andere Scanner mit anderen Tasten bei Bedarf umschreiben. Bei jedem erkannten Tastendruck sollte ein beep ertönen, Länge und Tonhöhe ist konfigurierbar (die Standardeinstellung sollte einen so gut wie unhörbaren Ton liefern, allerdings ist zur tatsächliche Aktivierung eine kleine Anpassung im Sourcecode nötig). Standardmäßig vorgesehen sind mit der "PDF"-Taste das Scannen in eine - oder Anhängen an eine - .tiff-Datei und daraus mit der " ▶︎|"-Taste eine PDF-Datei zu erstellen. Mit der "COPY"-Taste wird eine Kopie über den Standard-Drucker ausgedruckt, die "AUTO-SCAN"-Taste erstellt eine .tiff-Datei, die im festgelegten Ordner gespeichert wird. Vorgegebener Speicherort für die PDF- und .tiff-Dateien ist erst einmal /mnt/usb, aus Gründen, die nur der Entwickler kennt... Die "SEND"-Taste ist unbelegt, könnte ggf. mit einer Alternative zur Scan- oder Copy-Version belegt werden, oder die der Funktion der " ▶︎|"-Taste übernehmen, falls keine solche vorhanden ist (siehe zur alternativen Nutzung auch Automatische Weiterverarbeitung).

In der bscand.cfg können der Scanmodus (color, gray, lineart oder. ggf. andere Werte bei anderen backends) sowie die Auflösung für die Scans festgelegt werden. Die Ausgabegröße scheint nicht veränderbar zu sein es, es wird die gesamte Scannerfläche verwendet, auch gibt es keine Möglichkeiten, die Helligkeit, Kontrast, Gammawerte o.ä. zu beeinflussen. Es wird immer nur der erste gefundenen Scanner verwendet, momentan ist eine Festlegung bei mehreren Geräten nicht möglich. Weitere Geräte können aber normal verwendet werden.

Starten des Dienstes

Gestartet wird der Dienst im Terminal mit

bscand -c /PFAD/ZU/bscand.cfg & 

Zu Testzwecken sollte das & weggelassen werden.

Im Terminal erscheinen dann Meldungen zu den gefundenen Tasten mit dafür definierten Aktionen, erkannten Impulsen und Hinweise, wenn externe Anwendungen auf den Scanner zugreifen, hier eine Beispielausgabe für einen CanoScan LiDE 220:

bscand -c /PFAD/ZUR/bscand.cfg
bscand version 1.0.0
Button 'scan':
  Action: scan
Button 'email':
  Action: none
Button 'copy':
  Action: print
Button 'extra':
  Action: pdf
Button 'file':
  Action: append
Found device 'net:127.0.0.1:genesys:libusb:xxx:xxx'
found button 'scan'
found button 'file'
found button 'email'
found button 'copy'
found button 'extra'
found 5 buttons
found disable-dynamic-lineart at index 31
sem ret = 0
someone is accessing the scanner, wait a bit
sem ret = 0
someone is accessing the scanner, wait a bit
device should be free now, opening...
cannot open tty0button 'file' released
setting mode Gray
process (pid 4759) exited with status 0
cannot open tty0button 'email' released
process (pid 4761) exited with status 0
cannot open sane device 'net:127.0.0.1:genesys:libusb:xxx:xxx' - (Device busy)
device should be free now, opening...

Das Programm braucht ggf. einige Sekunden, bis es startbereit ist (Ausgabe sem ret = 0 - someone is accessing the scanner, wait a bit), nach Drücken einer Taste erscheint für die Standardversion cannot open tty0button 'file' released o.ä. Die Meldung process (pid 4761) exited with status 0 zeigt an, dass der intern gestartete Prozess erfolgreich beendet wurde, andere Zahlen würden auf einen Fehler im Ablauf hinweisen. Wenn ein externes Scanprogramm verwendet wird, meldet das Terminal immer wieder cannot open sane device 'net:127.0.0.1:genesys:libusb:xxx:xxx' - (Device busy) und device should be free now, opening..., bis das auf den Scanner zugreifende Programm geschlossen wurde.

Leider werden durch die interne PDF-Routine (verwendet wird tiff2pdf aus dem Paket libtiff-tools) Dateien in der sehr alten PDF-Version 1.2 erstellt. Die Dateien werden nach dem Muster scan-DATUM_UHRZEIT.ENDUNG im angegebenen Verzeichnis abgelegt, also z.B. etwas wie scan_20190513_83425.pdf.

Automatische Weiterverarbeitung

Durch einen Patch, den dankenswerterweise seahawk1986 erstellt hat, kann das Programm so erweitert werden, dass OCRmyPDF für die PDF-Erstellung mit Textlage eingesetzt wird, und die Verwendung der Email-Taste zum Erstellen einer Email mit einem über OCRmyPDF erstellten PDF im Anhang für das Standard-Email-Programm des angemeldeten Benutzers sorgt. Dafür werden die Programme OCRmyPDF und xdg-email (aus dem Paket xdg-utils) benötigt:

Wiki/Vorlagen/Installbutton/button.png mit apturl

Paketliste zum Kopieren:

sudo apt-get install ocrmypdf xdg-utils 

sudo aptitude install ocrmypdf xdg-utils 

Der Patch kann aus dem Forum bezogen werden, man kopiert ihn in das Hauptverzeichnis des entpackten Sourcecodes, wechselt im Terminal in das Verzeichnis, spielt ihn mit

patch -p1 < 9074418-bscand_pdf_ocr_mail.patch 

ein und erstellt/installiert das Programm.

Über die bcsand.cfg können dann zusätzlich die Aktionen pdf_ocr und pdf_ocr_email aufgerufen werden. Die Bedienung bleibt wie oben beschrieben (also zunächst einen oder mehrere Scans als temporäre .tiff-Datei erstellen, die dann per Tastendruck entweder zu einem PDF in Version A2-b (anpassbar) gespeichert werden, oder zusätzlich als Anhang über das E-Mail-Programm verschickt werden können).

Im Code muss ggf. der Ort für die installierte OCRmyPDF-Version angepasst werden; angegeben ist /usr/bin/local/ocrmypdf. Verwendet werden die Optionen ---pdf-renderer hocr -l deu. Die Optionen können vor Erstellung der Pakets in main.c, Zeilen 198 ff. bei Bedarf abgeändert und erweitert werden. Dabei muss für jede Option und dazu nötige Argument eine eigene durchnummerierte args[N]-Zeile existieren, da im Aufruf selbst keine Leerstellen enthalten sein können. argparse unterstützt für die Langform auch die Zuweisung mit einem =-Zeichen, also z.B. --pdf-renderer=hocr, dann wäre das ein Argument. Dasselbe ist bei -l=deu auch für die Kurzform der Fall.

Ebenso lassen sich die Optionen für xdg-email anpassen; in der im Patch angelegten Form wird eine Mail mit dem Betreff: Scanned PDF und dem Text "Please see attached file." erstellt. Die Angaben finden sich in main.c ab Zeile 230; es können ggf. auch nicht benötigte args entfernt werden. Dabei darauf achten, dass in der Zeile

const char* args[9];

die Nummer so angepasst wird, dass sie um zwei höher ist als die durchnummerierten args (mögliche Optionen für xdg-email siehe manpage 🇬🇧).

Erstellen von DjVu-Dateien

Mit einem weiteren Patch, der auf dem oben beschriebenen aufbaut, können auch DjVu-Dateien mit Textlage direkt erstellt werden. Voraussetzung zur Nutzung ist die Installation der Pakete

Wiki/Vorlagen/Installbutton/button.png mit apturl

Paketliste zum Kopieren:

sudo apt-get install didjvu ocrodjvu imagemagick 

sudo aptitude install didjvu ocrodjvu imagemagick 

Den Patchnach dem ersten einspielen:

patch -p1 < 9075162-bscand-djvuocr.patch 

Außerdem wird ein kleines bash-Skript benötigt, um didjvu zur DjVu-Erstellung verwenden zu können, das ggf. um weitere gewünschte Optionen erweitert werden kann:

1
2
3
4
5
#! /bin/bash

didjvu bundle --output ${1} /tmp/single???.png

rm -f /tmp/single*

Das Skript abspeichern und ausführbar machen. In main.c dann noch den Pfad zum Skript, ggf. auch zu den didjvu- und ocrodjvu-Programm-Dateien, anpassen. Dann kann in der bscand.cfg die Aktion djvu_ocr verwendet werden, das Verfahren ist analog zu der für die PDF-Erstellung. Die intern verwendete mehrseitige .tiff-Datei wird dazu mit convert in .png-Dateien zerlegt und diese mit didjvu in ein "bundled"-DjVu überführt. Als Abschluss erfolgt dann mit ocrodjvu die Erstellung einer Textlage.

Probleme und Lösungen

bscand funktioniert ggf. nicht gleichzeitig mit scanbd, scanbuttond oder insaned. Entsprechende Hintergrundprozesse, Units etc. sollten gestoppt sein, oder besser deren Start ganz unterbunden werden, es kann sonst zu unerwarteten Ergebnissen führen.

beep aktivieren

Um einen beep bei Tastendruck zu aktivieren, ist im Sourcecode (main.c, Zeile 127 ff.) tty0 vorgesehen. Allerdings kann der angemeldete Benutzer darauf nicht zugreifen (Ausgabe im Terminal "cannot open tty"). Abhilfe schafft es, dort die tty der aktuellen Sitzung zu verwenden, im Normalfall tty2 (ggf. in /dev/ überprüfen, auf welche tty der Nutzer Zugriffsrechte hat). Im Sourcecode diese tty-Nummer statt 0 einsetzen; in der Angabe zur Fehlermeldung kann dann gleich ein Zeilenvorschub \n am Ende eingefügt werden). Im Terminal muss zu Testzwecken das Programm dann mit vorgestelltem sudo ausgeführt werden[6], bei Eintrag des Programmaufrufs in den Autostart (ohne sudo!) funktioniert der beep dann aber wie erwartet.

lineart mit CanoScan LiDE 60

Für einen CanoScan LiDE 60 kann die Option lineart nicht verwendet werden. Der Scanner startet, allerdings können die Scans, die in lineart erstellt werden sollen, nicht beendet werden, im Terminal erscheint keine Meldung, oder ggf.:

setting of option hw lineart failed (Invalid argument) - maybe the scanner does not support it, ignoring

Der Schlitten hängt dann und fährt nach dem Scan nicht zurück, der Scanner kann nur extern nach Neustart bzw. Ab- und wieder Anstöpseln oder usbreset wieder in Betrieb genommen werden. Mit den Einträgen color oder gray funktioniert es wie gewünscht.

Einstellungen zum Scannen

Ob weitere Optionen, die z.B. in XSane in den "Erweiterte Optionen" aktiviert wurden, vom Programm gefunden und umgesetzt ist unklar. bscand zeigt beim Start im Terminal ggf. eine Meldung zu

found disable-dynamic-lineart at index 31

an, wenn "Extras -> dynamische Strichzeichnung abschalten" aktiviert wurde, andere Einträge werden nicht angezeigt, eine weitergehende Überprüfung ist im Sourcecode allerdings auch nicht vorgesehen.

Alternativen