[[Vorlage(Getestet, bionic)]] [[Vorlage(Ausbaufähig, "Bisher wurde das Programm nur einem CanoScan LiDE 220 Scanner, der das genesys-backend verwendet, erfolgreich getestet. Bitte auch für andere Hardware testen!")]] [[Vorlage(Fortgeschritten "")]] {{{#!vorlage Wissen [:Programme kompilieren: Programme aus dem Quellcode erstellen] [:patch:Sourcecode patchen] [:Pakete installieren: Installation von Programmen] [:Terminal: Ein Terminal öffnen] [:Editor:Einen Editor verwenden] [:mit Root-Rechten arbeiten:] }}} [[Inhaltsverzeichnis()]] [github:fariouche/bscand:bscand] {en} 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/#Backend:SANE - Backends]), damit ist der Einsatz für alle sane-backends gewährleistet. Andere SANE-Programme bleiben voll einsatzfähig. Es muss eine [:SANE-Scanserver_im_Netzwerk: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 [:man: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 [github:fariouche/bscand:Projektseite] {en} 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). [[Vorlage(Fremd, Software, "")]] == Patchen des sane-backend-Quellcodes == Der Sourcecode für die sane-backends kann von der [https://gitlab.com/sane-project/backends/releases Downloadseite] {en} 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 {{{#!vorlage Befehl 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. {{{#!vorlage Experten 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 [https://media-cdn.ubuntu-de.org/wiki/attachments/09/19/01-backends-master-20190412-multiple-access-fix_v3.patch patch] {dl}. }}} Dann nach den Vorgaben in [:SANE/Kompilieren:] kompilieren, dabei darauf achten, dass das net-backend mit erstellt wird! Die Konfiguration des [:SANE-Scanserver_im_Netzwerk: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 {{{#!vorlage 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 [:systemd/Units/#Bestehende-Unit-editieren: Bestehende Units editieren]). == Erstellen der Programmdateien == Benötigt werden die Pakete [3] {{{#!vorlage Paketinstallation libcups2-dev libconfig-dev, universe libsane-dev libtiff-tools beep, universe, optional }}} Im Verzeichnis des entpackten Sourcecode-Archivs von bscand im Terminal[4] den Befehl {{{#!vorlage 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 [:Soundausgabe_Systemlautsprecher: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 [#beep_aktivieren 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 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 {{{#!vorlage Befehl 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 [user: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: {{{#!vorlage Paketinstallation ocrmypdf xdg-utils }}} Der Patch kann aus dem [https://media-cdn.ubuntu-de.org/forum/attachments/44/20/9074418-bscand_pdf_ocr_mail.patch Forum] bezogen werden, man kopiert ihn in das Hauptverzeichnis des entpackten Sourcecodes, wechselt im Terminal in das Verzeichnis, spielt ihn mit {{{#!vorlage Befehl 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 [https://manpages.ubuntu.com/manpages/bionic/en/man1/xdg-email.1.html manpage] {en}). == 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 {{{#!vorlage Paketinstallation didjvu ocrodjvu imagemagick }}} Den [https://media-cdn.ubuntu-de.org/forum/attachments/53/20/9075162-bscand-djvuocr.patch Patch] {dl} __nach__ dem ersten einspielen: {{{#!vorlage Befehl 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: {{{#!code bash #! /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 [:ImageMagick#convert:convert] in '''.png'''-Dateien zerlegt und diese mit didjvu in ein "[:DjVu/#bundled-documents: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 = * [:Scanner/Software/#Tasten-am-Scanner-verwenden:Tasten am Scanner verwenden] {Übersicht} - Ü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 = * [github:fariouche/bscand:Projektseite] {en} * [:Scanner:] {Übersicht} #tag: Grafik, Hardware, Büro, Kommunikation, Scanner, PDF, djvu, OCR