insaned

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

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. Installation von Programmen

  2. Starten von Programmen

  3. Ein Terminal öffnen

  4. Einen Editor verwenden

  5. mit Root-Rechten arbeiten

Inhaltsverzeichnis
  1. Funktionsweise
  2. Installation
    1. Manuelle Installation
    2. Paket für 64-bit-Systeme
  3. Funktionstest
  4. Verwendung
    1. Optionen
  5. Probleme und Lösungen
    1. Fehler bei der Ausführung von GUI-Progra...
    2. Verwendung eines E-Mail-Programms als an...
    3. Scanner wird extern nicht gefunden
    4. Verwendung von mehreren Scannern
  6. Alternativen
  7. Links

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 wiederkehrend, 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!

Wiki/Icons/synaptic.png

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:

Die Pakete können für Ubuntu 18.04 heruntergeladen werden. Nachdem man sie für die korrekte Ubuntuversion und Architektur geladen hat, müssen DEB-Pakete noch installiert werden.

Hinweis!

Fremdpakete können das System gefährden.

In den Skripten werden Programme aus

Wiki/Vorlagen/Installbutton/button.png mit apturl

Paketliste zum Kopieren:

sudo apt-get install libtiff-tools 

sudo aptitude install 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