bscand
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Dieser Artikel ist mit keiner aktuell unterstützten Ubuntu-Version getestet! Bitte teste diesen Artikel für eine Ubuntu-Version, welche aktuell unterstützt wird. Dazu sind die Hinweise zum Testen von Artikeln zu beachten.
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:
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 bscand-master/patches anwenden[2]. Dazu die patches aus dem bscand-master/patches-Verzeichnis nach .../sane-backends/ kopieren, im Terminal in das Verzeichnis wechseln und 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]
libcups2-dev
libconfig-dev (universe)
libsane-dev
libtiff-tools
beep (universe, optional)
Befehl zum Installieren der Pakete:
sudo apt-get install libcups2-dev libconfig-dev libsane-dev libtiff-tools beep
Oder mit apturl installieren, Link: apt://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:
ocrmypdf
xdg-utils
Befehl zum Installieren der Pakete:
sudo apt-get install ocrmypdf xdg-utils
Oder mit apturl installieren, Link: apt://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
didjvu
ocrodjvu
imagemagick
Befehl zum Installieren der Pakete:
sudo apt-get install didjvu ocrodjvu imagemagick
Oder mit apturl installieren, Link: apt://didjvu,ocrodjvu,imagemagick
Den Patch ⮷ nach 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¶
Tasten am Scanner verwenden - Übersicht
scanbuttond - das allerdings schon lange nicht mehr weiterentwickelt wird
scanbd - der Nachfolger von scanbuttond
insaned - Programm, über das ohne SANE-Server und net-backend Scannertasten verwendet werden können
Links¶