Ist ihr Scanner zu alt?
Kein Windows Treiber mehr verfügbar?
Funktioniert mit der neuen Software etwas nicht mehr wie es soll?
Kein Problem! Mit dieser Lösung können sie fast jeden Scanner verwenden.
Was Sie dazu benötigen und wie sie diesen einrichten, erkläre ich in diesem Artikel.
- Um was geht es hier genau?
- Was kann die Lösung?
- Was wird benötigt?
- Was erreichen Sie durch diese Lösung?
- Wie funktioniert die Lösung?
- Bereitstellung Linux System mit USB Anschluss
- Scanner testen mit LSUSB
- Scanner in Betrieb nehmen
- Scanner testen
- SaneD als NetzwerkScanner einrichten
- Automatisieren und Mehrseitige TIFF Dateien erstellen
- Scanner Tasten “zum Leben erwecken” mit INSANED
- Testen
- Hochladen der Dateien in ein entferntes Verzeichnis
- UDEV daemon für Ab- und Anstecken des Scanners aktivieren
- Anpassung Scan & Testen
- Für den Dauerbetrieb vorbereiten & Optimieren
- Über den Autor
Um was geht es hier genau?
Immer wieder werde ich mit Scannern konfrontiert, welche “noch gut” sind, jedoch nicht mehr mit der Software, den Treibern, oder dem Betriebssystem so funktionieren, wie es notwendig wäre.
In diesem Artikel zeige ich eine Lösung wie Sie mit einem Raspberry PI, einem ähnlichen Gerät oder einem alten PC auf Linux Basis Ihren Scanner in Betrieb nehmen können.
Was kann die Lösung?
Nach dem Aufbau des Linux Betriebssystems können Sie
- Fast jeden Scanner vollständig nutzen
- Automatischen Einzug nutzen
- Einseitig und Duplex Scan
- Alle Tasten des Scanners Individuell nach Ihren wünschen konfigurieren
- Kein zusätzliches tippen & klicken auf Bildschirmen und in Dialogen
- Autarker Computer für
- PDFs scannen,
- diese via E-Mail verschicken,
- die Scans auf lokale oder entfernte Speichermedien und USB-Sticks speichern etc.
Und wenn Ihre Scanner Software das alles vorher nicht konnte, können Sie dies mit der Lösung dennoch erreichen.
Was wird benötigt?
Einen RaspberryPI* oder vergleichbaren mini Computer*. Alternativ einen älteren oder gebrauchten Computer.
Geringe Linux Kenntnisse und einen Internetzugang für Download der Software.
Was erreichen Sie durch diese Lösung?
Sie sparen Zeit, dadurch das Sie die Lösung nur einmal einrichten müssen und Sie danach autark funktioniert. Sie konfiguriert sich auch nicht neu (stellt sich um) durch Windows oder sonstige Software Updates.
Sie sparen Geld, dadurch das keine Neuanschaffung eines Scanners notwendig ist.
Sie gewinnen eine Unabhängigkeit des Scanners vom verwendeten Computersystem.
Wie funktioniert die Lösung?
- Der Scanner wird mittels USB-Anschluss mit dem RaspberryPI verbunden
- Der Sane Scanner Daemon stellt die Schnittstelle zwischen Scanner und
- Ihrem Computer als “Netzwerkscanner” oder
- Dem lokalen Raspberry bereit
- Der InSane Daemon setzt die Sensor & Tastenaktionen skriptbasiert für Sie um.
Dann starten wir einfach durch.
Hinweis: Der Artikel ist eine Kurzform einer Dokumentation und muss sicherlich für Sie an der einen oder anderen Stelle individuell angepasst werden. Wenn Sie eine Hilfestellung benötigen, fragen Sie gerne jederzeit bei mir nach.
Bereitstellung Linux System mit USB Anschluss
In diesem Szenario verwende ich Ubuntu auf einem RaspberryPI B Computer und verbinde diesen via WLAN. Er ist nicht sehr schnell, zeigt jedoch das generelle Prinzip.
Je mehr Sie scannen, desto zielführender ist ein stärkeres System.
Ein Mini Computer wie nachfolgende, funktioniert als Bildschirmlose Lösung.
Eine Installationsanleitung für einen Raspberry PI finden Sie hier.
Die Installation eines Ubuntus mittels ISO Datei finden Sie hier.
Nach der Installation sollte zunächst ein Update durchgeführt werden
rpi-update
apt-get update
apt-get upgrade
Wahlweise noch die Netzwerkeinstellungen und WLAN anpassen. Hierzu die Dateien
Die Dateien /etc/network/interfaces und /etc/wpa_supplicant/wpa_supplicant.conf bleiben wie im Auslieferungszustand, stattdessen wird /etc/dhcpcd.conf angepasst wie folgt (hier beispielhaft):
interface eth0
static ip_address=192.168.178.71
static routers=192.168.178.111
static domain_name_servers=192.168.178.111
interface wlan0
static ip_address=192.168.2.125
static routers=192.168.2.1
static domain_name_servers=192.168.2.1
Scanner testen mit LSUSB
Für den ersten Test wird der Scanner initial angesteckt und gestartet der Befehl LSUSB zeigt uns eine Übersicht aller USB Geräte.
LSUSB -> Bus 001 Device 004: ID 04c5:114f Fujitsu, Ltd fi-6130
Hier erhalten wir auch die notwendigen Daten für die nächsten Schritte.
Ihr Scanner aufgeführt, so können Sie fortfahren.
Scanner in Betrieb nehmen
SANE Daemon für Scanfuktionen Installieren.
apt-get install sane cifs-utils psutils imagemagick
In /etc/sane.d/dll.conf alle Scannertreiber bis auf net und in obigem Beispiel fujitsu auskommentieren, da sonst evtl. Broadcast-Socket-Fehlermeldungen entstehen
sane-Server als root starten mit saned -a oder Eintrag in /etc/default/saned RUN=yes und RUN_AS_USER=root
Nutzer in Gruppe scanner aufnehmen mit usermod -a -G scanner <user>
vi /etc/sane.d/saned.conf eigenes Subnetz eintragen
SUBSYSTEM==”usb”, ATTRS{idVendor}==”04c5″, ATTRS{idProduct}==”114f”, GROUP=”saned”
sane-find-scanner -q
scanimage -L
Scanner testen
scanimage > test.jpg –format jpeg –resolution=300 -p
Wenn Datei lesbar -> dann alles gut (auch wenn zu kurz/zu breit etc).
Das passen wir alles später an.
SaneD als NetzwerkScanner einrichten
vi /etc/systemd/system/saned.socket
[Unit] Description=saned incoming socket [Socket] ListenStream=6566 Accept=yes MaxConnections=1 [Install] WantedBy=sockets.target
vi /etc/systemd/system/@saned.service
[Unit] Description=Scanner Service Requires=saned.socket [Service] ExecStart=/usr/local/sbin/saned User=saned Group=saned StandardInput=null StandardOutput=syslog StandardError=syslog Environment=SANE_CONFIG_DIR=/etc/sane.d
systemctl enable saned.socket
systemctl start saned.socket
Danach kann ich über SANE über das Netzwerk gescanet werden
Entsprechende Client Anwendungen finden Sie hier
http://www.sane-project.org/sane-frontends.html
Ich persönlich verwende zum Test diesen
https://sanetwain.ozuzo.net/#download
Automatisieren und Mehrseitige TIFF Dateien erstellen
scanimage –format tiff –batch=$(date +%Y%m%d_%H%M%S)_p%04d.tiff –resolution 300 –mode ‘color’ –source ‘ADF Duplex’ –page-height 297 -l 0 -t 0 -x 210 -y 297
Macht was es soll – generiert aber kein Multipage TIFF, sondern nur einzelne TIFFS
Danach die Scans zum PDF Dokumenten umwandeln
root@raspberrypi:~# convert *.tiff yourDocumentName.pdf
Wir möchten jedoch für unser Projekt Multipage TIFF Dateien
scanimage –format jpeg –batch=$(date +%Y%m%d_%H%M%S)_p%04d.jpeg –resolution 300 –mode ‘color’ –source ‘ADF Duplex’ –page-height 297 -l 0 -t 0 -x 210 -y 297
convert *.jpeg -adjoin $(date +%Y%m%d_%H%M%S).tiff
rm *.jpeg
Das daraus resultierende Dokument hat mehrere Seiten und kann weiterverwendet werden.
Scanner Tasten “zum Leben erwecken” mit INSANED
apt-get install libsane-dev
root@raspberrypi:/var/lib# mkdir insaned
root@raspberrypi:/var/lib# cd insaned/
root@raspberrypi:/var/lib/insaned# wget https://github.com/abusenius/insaned/releases/download/v0.0.3/insaned-0.0.3.tar.bz2
root@raspberrypi:/var/lib/insaned# tar xvjf insaned-0.0.3.tar.bz2
root@raspberrypi:/var/lib/insaned# cd insaned-0.0.3/
root@raspberrypi:/var/lib/insaned/insaned-0.0.3# make
Mehr details erhalten Sie unter
https://github.com/abusenius/insaned
https://wiki.ubuntuusers.de/insaned/
Damit der Scan auf Tastendruck funktioniert müssen wir den Event für SCAN modifizieren
Testen
Ausführen in der Console:
root@raspberrypi:/var/lib/insaned/insaned-0.0.3# ./insaned --dont-fork --events-dir=$PWD/events --log-file=$PWD/log.log -v
insaned: Fetching device list...
insaned: Starting polling sensors of fujitsu:fi-6130dj:80432 every 500 ms
insaned: Processing event 'page-loaded'
insaned: Processing event 'page-loaded'
insaned: Processing event 'page-loaded'
insaned: Processing event 'scan'
scanimage: rounded value of page-height from 297 to 296.994
scanimage: rounded value of br-x from 210 to 210.01
scanimage: rounded value of br-y from 297 to 296.994
Scanning infinity pages, incrementing by 1, numbering from 1
Scanning page 1
Scanned page 1. (scanner status = 5)
Scanning page 2
Scanned page 2. (scanner status = 5)
Scanning page 3
Scanned page 3. (scanner status = 5)
Scanning page 4
Scanned page 4. (scanner status = 5)
Scanning page 5
Scanned page 5. (scanner status = 5)
Scanning page 6
Scanned page 6. (scanner status = 5)
Scanning page 7
scanimage: sane_start: Document feeder out of documents
Batch terminated, 6 pages scanned
..converting
..finished job
Ab jetzt kann gescannt werden und alle Dateien liegen lokal.
Diese können nach Abschluss des Scans verschoben und weiterverarbeitet werden.
Hochladen der Dateien in ein entferntes Verzeichnis
In diesem Projekt wollen wir die Dateien vom Raspberry PI auf ein entferntes Verzeichnis verschieben.
Hierzu nutzen wir Rclone (https://rclone.org/) und nutzen die Vorteile, dass dieses Tool zahlreiche Cloud Zugriffe auf der Kommandozeile unterstützt.
root@raspberrypi:/var/lib# mkdir rclone
root@raspberrypi:/var/lib# cd r
-bash: cd: r: Datei oder Verzeichnis nicht gefunden
root@raspberrypi:/var/lib# cd rclone/
root@raspberrypi:/var/lib/rclone# wget https://downloads.rclone.org/rclone-current-linux-arm.zip
–2023-07-05 20:13:42– https://downloads.rclone.org/rclone-current-linux-arm.zip
Auflösen des Hostnamens downloads.rclone.org (downloads.rclone.org)… 95.217.6.16, 2a01:4f9:c012:7154::1
Verbindungsaufbau zu downloads.rclone.org (downloads.rclone.org)|95.217.6.16|:443 … verbunden.
HTTP-Anforderung gesendet, auf Antwort wird gewartet … 200 OK
Länge: 17177063 (16M) [application/zip]
Wird in »rclone-current-linux-arm.zip« gespeichert.
rclone-current-linux-arm.zip 100%[======================================================================>] 16,38M 1,94MB/s in 11s
2023-07-05 20:13:53 (1,56 MB/s) – »rclone-current-linux-arm.zip« gespeichert [17177063/17177063]
apt install unzip
unzip -j -d rclone-temp rclone-current-linux-arm.zip
rclone lsd privatecloud
Test
rclone copy /home/<DeinLokalesVerzeichnisDerWahl> privatecloud:<MeinRemoteVerzeichnisDerWahl>
UDEV Daemon für Anstecken, Abstecken und Schlafmodus des Scanners nutzen
Damit erhöhen wir die Fehlertoleranz der Lösung. Das ist notwendig wenn der Scanner eine Sleep Funktion hat oder dieser über einen USB Hub verbunden ist.
UDEV daemon für Ab- und Anstecken des Scanners aktivieren
#
# Example /usr/local/etc/devd/insaned.conf file
#
# Use this file to automatically start and stop insaned if your scanner turns off and insaned is
# continuously prints error messages.
#
# Adjust the following bits and copy to /usr/local/etc/devd/insaned.conf:
# * path to insaned executable
# * scanner vendor
# * scanner product (use lsusb or similar to get the values)
# * (optionally) username, group and device file permissions to restrict access
#
notify 1 {
match “subsystem” “DEVICE”;
match “type” “ATTACH”;
match “cdev” “ugen[0-9]+.[0-9]+”;
# TODO adjust vendor and product here
match “vendor” “0x04c5”;
match “product” “0x11a2”;
# TODO adjust username, group and permissions here
action “chown -L cups:saned /dev/$cdev && chmod -L 660 /dev/$cdev”;
# TODO adjust path to insaned here
action “/usr/local/bin/insaned -e /usr/local/etc/insaned/”;
};
notify 1 {
match “subsystem” “DEVICE”;
match “type” “DETACH”;
# TODO adjust vendor and product here
match “vendor” “0x04c5”;
match “product” “0x11a2”;
# TODO adjust path to insaned here
action “/usr/bin/killall -9 insaned”;
};
fujitsu:fi-6130dj:80432
vi /lib/udev/rules.d/80-Log_USB.rules
udevadm monitor
KERNEL[507.754898] remove /devices/platform/soc/20980000.usb/usb1/1-1/1-1.2/1-1.2:1.0 (usb)
KERNEL[507.756365] unbind /devices/platform/soc/20980000.usb/usb1/1-1/1-1.2 (usb)
KERNEL[507.772189] remove /devices/platform/soc/20980000.usb/usb1/1-1/1-1.2 (usb)
UDEV [509.480661] remove /devices/platform/soc/20980000.usb/usb1/1-1/1-1.2/1-1.2:1.0 (usb)
UDEV [509.579051] unbind /devices/platform/soc/20980000.usb/usb1/1-1/1-1.2 (usb)
UDEV [509.620445] remove /devices/platform/soc/20980000.usb/usb1/1-1/1-1.2 (usb)
KERNEL[516.626798] add /devices/platform/soc/20980000.usb/usb1/1-1/1-1.2 (usb)
KERNEL[516.634640] add /devices/platform/soc/20980000.usb/usb1/1-1/1-1.2/1-1.2:1.0 (usb)
KERNEL[516.639882] bind /devices/platform/soc/20980000.usb/usb1/1-1/1-1.2 (usb)
UDEV [516.838196] add /devices/platform/soc/20980000.usb/usb1/1-1/1-1.2 (usb)
UDEV [516.966166] add /devices/platform/soc/20980000.usb/usb1/1-1/1-1.2/1-1.2:1.0 (usb)
UDEV [517.146883] bind /devices/platform/soc/20980000.usb/usb1/1-1/1-1.2 (usb)
ATTRS{idVendor}==”046d”, ATTRS{idProduct}==”c519″, ACTION==”add”, RUN+=”/bin/su <BENUTZERNAME> -c ‘DISPLAY=:0 /usr/bin/numlockx on'”
ENV{ID_VENDOR_ID}==”046d”, ENV{ID_MODEL_ID}==”c519″, ACTION==”remove”, RUN+=”/bin/su <BENUZTERNAME> -c ‘DISPLAY=:0 /usr/bin/numlockx off'”
Lsusb
Bus 001 Device 006: ID 04c5:114f Fujitsu, Ltd fi-6130
lsusb -vs 001:006
root@raspberrypi:~# lsusb -vs 001:006
PROGRAM=”/usr/bin/killall -9 insaned”
udevadm info –query=all –attribute-walk –name=/dev/bus/usb/001/006
root@raspberrypi:~# udevadm info –query=all –attribute-walk –name=/dev/bus/usb/001/006
vi /lib/udev/rules.d/80-Log_USB.rules
SUBSYSTEMS==”usb”, ATTRS{idVendor}==”04c5″, ATTRS{idProduct}==”114f”, ACTION==”remove”, RUN+=”/usr/bin/killall -9 insaned”
SUBSYSTEMS==”usb”, ATTRS{idVendor}==”04c5″, ATTRS{idProduct}==”114f”, ACTION==”bind”, RUN+=”/usr/bin/killall -9 insaned”
Anpassung Scan & Testen
- Insaned als Service Starten
Cp /var/lib/insaned/insaned-0.0.3/systemd/insaned.service /lib/systemd/system/
vi /lib/systemd/system/insaned.service
#EnvironmentFile=/etc/default/insaned
EnvironmentFile=/var/lib/insaned/insaned-0.0.3
User=root
Group=root
Nice=0
#ExecStart=/usr/bin/insaned -p /var/run/insaned/insaned.pid ${INSANED_EXTRAOPTS}
ExecStart=/var/lib/insaned/insaned-0.0.3/insaned -p /var/run/insaned/insaned.pid –events-dir=/var/lib/insaned/insaned-0.0.3/events –log-file=/var/lib/insaned/insaned-0.0.3/log.log ${INSANED_EXTRAOPTS}
systemctl daemon-reload
systemctl enable insaned.service
systemctl start insaned.service
systemctl status insaned.service
ln -s /var/lib/insaned/insaned-0.0.3 /etc/insaned
journalctl -f -u insaned.service
mkdir -p /etc/insaned/events/
cp /var/lib/insaned/insaned-0.0.3/events/* /etc/insaned/events/
vi /etc/default/insaned
Danach Funktioniert der Scanner autark und kann zum Scannen verwendet werden.
Für den Dauerbetrieb vorbereiten & Optimieren
Image der SD Karte erstellen
dd if=/dev/mmcblk0 of=/media/greg/SanDisk256/sd_card_backup.img bs=4M status=progress
wget https://raw.githubusercontent.com/Drewsif/PiShrink/master/pishrink.sh
sudo chmod +x pishrink.sh
sudo mv pishrink.sh /usr/local/bin
pishrink.sh -z /media/greg/SanDisk256/sd_card_backup.img
Weitere Details können im Artikel von Fabian Steppat unter https://nerdiy.de/de_de/howto-raspberry-pi-system-sd-karte-als-image-sichern/ nachgelesen werden.
Optimierungsmaßnahmen der Rclone Sync
Der Sync sollte im Hintergrund laufen. Teilweise kommt es jedoch zu Abbrüchen und Fehlern. Diese können über die Parameter –low-level-retries und –retries reduziert werden.
–low-level-retries means that rclone tries each API call that many times before giving up.
–retries retries the whole sync that many times before giving up.
Details hierzu werden in einem Forum Artikel unter https://forum.rclone.org/t/how-best-to-use-retries-and-low-level-retries/20193 besprochen.
Overclocking des Raspberry PI
Wie jeder PC, kann auch der RPI etwas schneller gemacht werden. Details können hier nachgelesen werden.
Konvertierung mit niedriger Priorität starten
Der Festplattenzugriff auf dem RPI ist das Problem. Dadurch verzögern sich viele nachfolgende Prozesse und der RPI reagiert während dieser Zeit nicht. Dies kann in ImageMagic durch die nachfolgende Anpassung optimiert werden:
-limit memory 2mb -limit map 2mb -limit disk 2gb
Display mit HDMI Anschluss zur Anpassung der Scaneinstellungen
Dieser Punkt ist noch in Bearbeitung und wird bei Bedarf fertiggestellt. Kann jedoch ähnlich wie in der Lösung von Dr. Breinlinger unter https://www.drbreinlinger.de/Scanserver3/Scanserver3.htm realisiert werden.
Sein ScanGUI Script kann unter https://www.drbreinlinger.de/Downloads/ heruntergeladen werden.
Wirklich empfehlenswert.
Sollten Sie noch Fragen, Änderungs- oder Anpassungswünsche haben, zögern Sie nicht mich zu kontaktieren. Ich antworte in der Regel innerhalb von 24 Stunden.
Die mit * gekennzeichneten Internetlinks, sind Affiliate Links. Das benannte Produkt wird für Sie dadurch nicht teurer. Sie ermöglichen mir damit den Aufwand für das Zusammenstellen und -schreiben der Artikel, ein klein wenig zu refinanzieren. Dankeschön vorab für die Nutzung dieser Links.
Über den Autor
Gregor Tomitzek – IT Berater, Trainer und Mentor
Seit über 25 Jahren berate ich Firmen und private Personen in allen Belangen der Computertechnik. Als Leiter eines Infrastrukturteams bringe ich die technischen Anforderungen der Kunden zu Lösungen, und ermögliche dadurch ein besseres und schnelleres Arbeiten.
Durch meine langjährige Erfahrung, die Ausbildungen und der Nähe zu allen Unternehmensprozessen, unterstütze ich Leistungsträger, Teamleiter und Vorstände dabei, die Überlastung in IT-Abteilung zu senken und zugleich die Leistungsfähigkeit und Zufriedenheit von IT-Teams wahrnehmbar zu steigern.
Änderungshistorie
Erstellt: 2023-12-31 | Zuletzt geändert: 2023-12-31 |
Änderungshistorie: – 2023-12-31: Basis – Layout + Text |
2 Gedanken zu „Scanner autark betreiben – keine Windows Treiber mehr notwendig“
Sehr geehrter Herr,
ich habe einen Flachbettscanner PRIMAX COLORADO USB 19200.
Wo kann ich festszellen ob dieser Scanner für Ihre Methode in Frage kommt.
Guten Morgen Detlef,
gute Frage. Ich würde hier über die Herangehensweise mit LSUSB versuchen zu prüfen, ob dieser Scanner grundsätzlich beim einstecken erkannt wird. Laut dem Saned Forum gibt es aber auch Meldungen, das es immer wieder mit diesem Modell an Scanner Probleme gibt. Ich kann Sie alle nicht direkt nachvollziehen da ich selbst diesen Scanner nicht vor Ort zum testen habe. Aber es liest sich so, als würde dieser einen speziellen Kerneltreiber/Patch benötigt um als Scanner zunächst im Linuxsystem erkannt zu werden.
Mein Bauchgefühl sagt mir da – lieber auf Kleinanzeigen ein etwas neueres Modell für günstiges Geld holen und mit diesem dann durchstarten. Spart sicherlich Zeit.
Gerne können wir es aber einmal gemeinsam in einer Remote Session prüfen was genau beim Einstecken im Kernel passiert. Buche dir gerne einen Termin über meinen Kalender unter https://tomitzek.net/termin-buchen/ und dann können wir das gemeinsam herausfinden.
Lieben Gruß,
Gregor