[[Vorlage(Getestet, bionic)]] [[Vorlage(Fortgeschritten)]] {{{#!vorlage Wissen [:Pakete installieren: Installation von Programmen] [:Programme_starten: Starten von Programmen] [:Terminal: Ein Terminal öffnen] [:Editor: Einen Editor verwenden] [:mit Root-Rechten arbeiten:] }}} [[Inhaltsverzeichnis()]] [github:abusenius:insaned] {en} ist ein einfaches Programm, das als Dienst auf Tastendruck an [:SANE:]-fähigen Scannern lauscht, und auf erkannte Impulse hin Skripte zu Scannen startet. Das Programm entstand, weil dem Entwickler unter [:scanbuttond:] keine Tasten am Scanner angezeigt wurden und er mit [:scanbd:] wegen der komplizierten Einrichtung keinen Erfolg hatte. Das Programm ist leider nicht sonderlich gut dokumentiert, es existiert auch keine [:man:manpage]. Die Entwicklung stagniert anscheinend; letzte minimale Bearbeitung des Sourcecodes erfolgte im Oktober 2017. = Funktionsweise = Insaned prüft kontinuierlich, ob eine Taste am Scanner gedrückt wurde und startet bei einem Impuls das zugeordnete Skript. Der Dienst wird über eine [:systemd:systemd-Unit] bereitgestellt. Da auf einen Tastendruck nur alle `N` Millisekunden (eingestellt sind 500) gelauscht wird, muss die Taste mindestens solange gedrückt gehalten werden, um das Skript zu starten. Insaned löst das gleiche Ereignis innerhalb von 2500 Millisekunden nur einmal aus, um ungewollte Wiederholungen zu unterbinden. Insaned verwendet [wikipedia_en:File_locking#Lock_files:lockfiles], die mit Aufruf der Skripte erstellt werden, um das Gerät während der Ausführung von Scanbefehlen für andere Funktionen/Tastendrücke zu sperren. Insaned sollte mit allen [:SANE:]-backends und Geräten funktionieren, für welche die Tasten als `Sensors` ausgegeben werden (Ausgabe von `scanimage -A`). Das "Polling" erzeugt keine besondere CPU-Last, führt allerdings zu einiger I/O-Last. Daher könnte es ggf. nachteilig sein, den Daemon auf einem Laptop zu verwenden, da es den USB-Bus daran hindert, in einen Stromsparmodus zu wechseln, und ggf. sogar den Standby-Modus des Laptops verhindert - das ist bisher allerdings nicht ausreichend überprüft. {{{#!vorlage Warnung insaned ist nicht mit [:scanbuttond:] kompatibel! Wenn beide Programme installiert sind, kann es zu unerwarteten Ergebnissen führen, da __beide__ auf Tastendruck reagieren, und ggf. gleichzeitig versuchen, auf den Scanner zuzugreifen! }}} [[Bild(Wiki/Icons/synaptic.png, 48, align=right)]] = Installation = Das Programm ist nicht in den offiziellen Ubuntu-Quellen vorhanden. == Manuelle Installation == Dazu den Sourcecode von der [github:abusenius/insaned:Projektseite] {en} als '''zip'''-Datei oder via [:Git:] herunterladen, ggf. entpacken. Die manuelle Kompilierung liefert zwar eine verwendungsfähige insaned-Programmdatei (ein `make`-Aufruf genügt, eine '''configure'''-Datei existiert nicht), allerdings ist keine Installationsroutine vorgesehen, es kann so auch nicht ohne Weiteres ein Paket erstellt werden. Der manuelle Aufruf des Programms liefert aber eine funktionsfähige Alternative, direkt E-Mails mit einen gescannten Bild als Anhang zu erstellen - da das Programm dann unter dem angemeldeten Benutzer läuft, für den standardmäßig auch Email-Konten eingerichtet sind. Als provisorisch Lösung kann ein Aufruf dieser Version über einen Eintrag im [:Autostart:] erfolgen. Allerdings können auch bei entsprechender Konfiguration nicht zwei Scanner - einer über die systemd-Version, einer über den Autostart - angesprochen werden. == Paket für 64-bit-Systeme == [[Vorlage(Fremdpaket, [github:abusenius:abusenius], dl, https://github.com/abusenius/insaned/releases/download/v0.0.3/insaned_0.0.3-0ubuntu1_amd64.deb, bionic)]] In den Skripten werden Programme aus {{{#!vorlage Paketinstallation libtiff-tools, universe }}} verwendet. = Funktionstest = Um die Funktion zu testen, kann insaned aus einem Terminal[2] heraus gestartet werden, mit der Option `--dont-fork` wird das Programm nicht "daemonisiert", sondern bleibt im Vordergrund. Allerdings muss zuvor der Daemon, der sofort mit abgeschlossenen Installation des '''deb'''-Pakets startet, gestoppt werden! {{{#!vorlage Befehl insaned --dont-fork --events-dir=/etc/insaned/events --log-file=/var/log/insaned.log -vv }}} Weiter Informationen bekommt man mit {{{#!vorlage Befehl insaned --help --list-sensors }}} Der Daemon startet dann ohne weitere Initiierung beim Systemstart. Ggf. muss er aber neugestartet werden, wenn zunächst kein Scanner erkannt wird (Fehlermeldungen im Statusaufruf, Neustart mit `sudo systemctl restart insaned`). {{{#!vorlage Hinweis insaned kann nicht gleichzeitig mit [:scanbd:] verwendet werden. Sollte scanbd installiert sein, müssen die Units '''scanbd.service''' und '''scanbm.socket''' gestoppt, und ggf. ganz abgeschaltet werden (Befehle `sudo systemctl disable scanbd.service` und `sudo systemctl disable scanbm.socket`). }}} = Verwendung = Die Scanskripte, die sich standardmäßig in '''/etc/insaned/events/''' befinden, sind für den Canon LiDE 210/220 mit fünf Tasten ausgelegt, können aber den eigenen Bedürfnissen und Gegebenheiten angepasst werden (Editor[4] mit Rootrechten[5] nötig). Sie legen bei Aufruf jeweils eine Sperrdatei '''insaned.scan.lock''' im '''tmp'''-Verzeichnis an, die die Ausführung von Befehlen über Tastendrücke unterbindet, bis der ausgelöste Prozess beendet ist, dann wird sie wieder gelöscht. Zusätzlich ist ein Beispiel-Skript ('''example''') vorhanden, das bereits die Routine zum Anlegen des Lockfiles enthält, und als Ausgangspunkt für eigene Funktionen (z.B. ein [#Scanner-wird-extern-nicht-gefunden Sleep-Skript]) verwendet werden kann. Standardmäßig sind die Tasten mit den am Canon LiDE 210/220 angegebenen Funktionen belegt; die ''"PDF"''-Taste (`file` in der Ausgabe von `scanimage -A`) erstellt eine PDF-Datei, bei wiederholtem Druck wird direkt eine weitere Seite als PDF erzeugt, mit der ''" ▶︎|"''-Taste (intern `extra`) dann daraus ein mehrseitiges PDF-Dokument erstellt - das muss allerdings innerhalb von 10 Minuten (anpassbar in '''file''') nach dem letzten Scan erfolgen, da ansonsten durch Tastendruck auf ''"PDF"'' ein neues Dokument angelegt wird. ''"AUTO SCAN"'' (`scan`) scannt die Vorlage ein, erstellt ein .'''jpg''' und öffnet es - wenn installiert - in [:Gwenview:], ''"COPY"'' (`copy`) schickt den Scan an den Standard-Drucker, ''"SEND"'' (`email`) erstellt ein '''.jpg''', das in als Anhang einer Mail in [:Thunderbird:] geöffnet werden soll (siehe [#Verwendung-eines-E-Mail-Programms-als-angemeldeter-Benutzer Probleme und Lösungen]). Allerdings landen ggf. Dateien im Verzeichnis '''/root''', weil als Speicherort die `$HOME`-Variable angegeben ist, was bei standardmäßiger Nutzung unter dem Benutzer `root` eben dieses Verzeichnis ist. Das sollte - zumindest bei Nutzung auf einem Desktop-Rechner - im '''file''' und im '''scan'''-Skript entsprechend für den angemeldeten Benutzer angepasst werden. Für anders benannte `Sensors` müssten Skripte entsprechend den von `insaned -L` bzw `scanimage -A` ausgegebenen Namen bezeichnet werden. == Optionen == {{{#!vorlage Tabelle <-3 rowclass="titel"> insaned-Optionen +++ <-2 rowclass="kopf">Aufruf Funktion +++ `-d` `--device-name=DEVICE` Verwendet das angegebene Gerät statt des ersten gefundenen, bei mehreren Scannern mit dem gleichen backend muss zusätzlich spezifiziert werden (z.B. `genesys:libusb:003:006`) +++ `-f` `--log-file=DATEI` Verwendet die angegebene Datei statt des Standards ('''/var/log/insaned.log''') +++ `-e` `--events-dir=VERZEICHNIS` Soll die Skripte aus dem angegebenem Verzeichnis statt die aus dem Standardverzeichnis ('''/etc/insaned/events''') ausführen. +++ `-s` `--sleep-ms=NUM` Setzt den `sleep`-Wert zum Abfragen der Tasten für die angegebene Zeit in Millisekunden statt des Standards (500 ms), möglich sind Werte zwischen 50 und 5000 ms +++ `-n` `--dont-fork` Den Prozess nicht im Hintergrund ausführen (sinnvoll zum Testen) +++ `-L` `--list-sensors` Listet die überwachten Tasten mit dem derzeitigen Status auf und beendet dann den Prozess (siehe auch `--device-name`) +++ `-w` `--suspend-after-event` Setzt das Polling für 15 Sekunden nach Ausführung eines Skriptes aus, sinnvoll wenn es Probleme mit der Ausführung der Skripte gibt, standardmäßig gesetzt. +++ `-p` `--pid-file=DATEI` Wenn diese Option gesetzt ist, erstellt der Daemon die angegebene Datei und schreibt die [wikipedia:Process_identifier:PID] hinein, sobald er in den Hintergrund läuft. +++ `-v` `--verbose` Ausführlichere Status-Meldungen ausgeben. +++ `-h` `--help` Die Hilfe ausgeben, danach schließt das Programm. +++ `-V` `--version` Versionsangabe ausgeben, danach schließt das Programm. }}} Diese Optionen können auf der Kommandozeile, oder auch in '''/etc/default/insaned''', bei `INSANED_EXTRAOPTS`, verwendet werden. Die Kurz-Optionen werden mit einer Leerstelle getrennt (z.B. `-d epson`) die Langversionen mit einem = direkt angehängt (z.B. `--device-name=epson`). Allerdings hat die Angabe zu `--event-dir` als Extraoption unter systemd keine Auswirkung, der Aufruf wird in `systemctl status insaned` zwar angezeigt, es werden tatsächlich aber weiter die Skripte aus '''/etc/insaned/events''' eingesetzt. Die Log-Funktion scheint ebenfalls nicht ganz ausgereift zu sein; ob überhaupt etwas gelogt wird, ist - zumindest bei der händisch installierten Version - anscheinend eher zufällig. = Probleme und Lösungen = == Fehler bei der Ausführung von GUI-Programmen == Falls unter der systemd-Version von den Skripten aufgerufene Programme nicht starten, und im Log Angaben wie {{{ Unable to init server: Verbindung ist gescheitert: Verbindungsaufbau abgelehnt Failed to initialize gtk+: Anzeige kann nicht geöffnet werden: }}} erscheinen, hat der `root`-Benutzer, unter dem insaned anscheinend laufen muss, keinen Zugriff auf die [:XServer:]-Sitzung des angemeldeten Benutzer. Mit dem Befehl. {{{#!vorlage Befehl xhost +si:localuser:root }}} kann dieser Zugriff für die momentan Sitzung gewährt werden. Um das dauerhaft zu ermöglichen, müsste der Befehl in den [:Autostart:] aufgenommen werden. Ggf. kann auch in den Skripten vor Aufruf von GUI-Programmen ein {{{ export DISPLAY=:0 }}} eingefügt werden, für die Nutzung des '''scan'''-Skriptes ist beides nötig - Log-Angaben bleiben allerdings ggf. komplett aus. == Verwendung eines E-Mail-Programms als angemeldeter Benutzer == Standardmäßig können [:Internetanwendungen/#E-Mail:E-Mail-Programme] nicht direkt verwendet werden; sie werden von `root` geöffnet, und müssten dann für den Benutzer `root` auch konfiguriert sein - was auf Desktop-Rechnern nicht sonderlich sinnvoll ist. Lösen lässt sich dieses Problem, indem man im '''email'''-Skript statt des direkten Aufrufs des E-Mail-Programms ein Skript als angemeldeter Benutzer aufruft, das dann das E-Mail-Programm mit dem Attachment startet, hier eine Variante, die [:Evolution:] verwendet. Dazu in '''email''' statt des Thunderbird-Aufrufs die Zeilen {{{ export DISPLAY=:0 su - BENUTZER -c "sh /PFAD/ZU/evolution.sh $OUTFILE" >> "$INSANED_LOGFILE" 2>&1 }}} mit den entsprechenden Angaben einfügen. Das Skript selbst z.B. im Home-Verzeichnis unter '''evolution.sh''' ablegen und ausführbar machen: {{{#!code bash #!/bin/bash evolution "mailto:?attach=${1}" echo "Evolution started with attachment ${1}" >> /tmp/insaned.log }}} Über diesen Umweg startet dann Evolution ein Mail mit dem eingescannten Bild als Anhang für den angemeldeten Benutzer, im Log erscheint eine entsprechende Meldung. Universeller ist die Verwendung von [:xdg-utils#xdg-email:xgd-email], wie z.B. für [:bscand:] verwirklicht, welches das eingerichtete Standard-Email-Programm aufrufen kann. == Scanner wird extern nicht gefunden == Bei laufendem insaned wird der Scanner von externen Scanprogrammen normalerweise nicht gefunden bzw. als "besetzt" gemeldet. Das Problem lässt mit einem [:scanbd/#Sleep-Skript:Sleep-Skript] lösen, Voraussetzung ist ein funktionsfähiger [:SANE-Scanserver_im_Netzwerk:SANE-Server]. Dazu muss eine der Tasten mit diesem Skript belegt werden; allerdings unter einem der vorgegebenen `Sensor`-Namen. Dann beim Aufruf der externen Programme das net-Backend verwenden, auch wenn ggf. die lokale Version ebenfalls angezeigt wird! == Verwendung von mehreren Scannern == Mit der Option `-d` kann insaned angewiesen werden, ein bestimmtes Gerät auszuwählen. Theoretisch sollte ein Eintrag in '''/etc/default/insaned''' bei den `INSANED_EXTRAOPTS` dazu möglich sein. Leider startet aber der Service nicht mehr, wenn das Device am Anfang der Optionen eingetragen wird, es hat aber keinen Effekt, wenn die Option am Ende steht. Es ist aber möglich, das gewünschte Device über einer Änderung der Unit '''insaned.service''' anzusprechen, indem man die Option direkt bei `ExecStart` einträgt. Unter den [github:abusenius/insaned/issues/14:insaned-issues] {en} wird eine andere Lösung vorgeschlagen, die ebenfalls zum Erfolg führt: In '''insaned.service''' bei `ExecStart` die `{}` um die Variable `$INSANED_EXTRAOPTS` entfernen, dann werden die Werte aus '''/etc/default/insaned''' korrekt eingelesen. {{{#!vorlage Hinweis 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 neugestartet. (siehe [:systemd/Units/#Bestehende-Unit-editieren: Bestehende Units editieren]). }}} Zusätzlich können Probleme auftreten, wenn mehrere Geräte mit dem selben Backend verwendet werden sollen und sich durch Neuanschlüsse/Verbindungen die Device/Bus-Nummern verändern sollten. = Alternativen = * [:Scanner/Software/#Tasten-am-Scanner-verwenden:] {Übersicht} - Übersicht * [:scanbuttond:] - das allerdings schon lange nicht mehr weiterentwickelt wird. * [:scanbd:] - der Nachfolger von scanbuttond. * [:bscand:] - ein Programm, das durch eine gepatchte SANE-backend-Version die Tasten direkt zugänglich macht; verwendet das net-backend. = Links = * [github:abusenius/insaned:Projektseite] {en} * [github:coaxial/insaned-config:insaned-config] {en} - Skripte für insaned, allerdings auch dort keine funktionierende E-Mail-Funktion für die systemd-Version. #tag: Grafik, Büro, Kommunikation, Scanner