insaned
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.
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:
insaned 🇬🇧 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 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-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 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.
Achtung!
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!
Installation¶
Das Programm ist nicht in den offiziellen Ubuntu-Quellen vorhanden.
Manuelle Installation¶
Dazu den Sourcecode von der Projektseite 🇬🇧 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¶
Von abusenius werden folgende DEB-Pakete angeboten:
[bionic bionic] ⮷
Die unterstützten Ubuntu-Versionen und Architekturen werden aufgelistet. Nachdem man sie für die korrekte Ubuntu-Version und Architektur geladen hat, müssen die DEB-Pakete noch installiert werden.
Hinweis!
Fremdpakete können das System gefährden.
In den Skripten werden Programme aus
libtiff-tools (universe)
Befehl zum Installieren der Pakete:
sudo apt-get install libtiff-tools
Oder mit apturl installieren, Link: apt://libtiff-tools
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!
insaned --dont-fork --events-dir=/etc/insaned/events --log-file=/var/log/insaned.log -vv
Weiter Informationen bekommt man mit
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
).
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 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 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¶
insaned-Optionen | ||
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 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.
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 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:
1 2 3 | #!/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 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 Sleep-Skript lösen, Voraussetzung ist ein funktionsfähiger 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 insaned-issues 🇬🇧 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.
Hinweis:
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 neugestartet. (siehe 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 (Abschnitt „Tasten-am-Scanner-verwenden“) - Ü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¶
Projektseite 🇬🇧
insaned-config 🇬🇧 - Skripte für insaned, allerdings auch dort keine funktionierende E-Mail-Funktion für die systemd-Version.