[[Vorlage(getestet, bionic, focal)]] {{{#!vorlage Wissen [:Pakete_installieren: Installation von Programmen] [:Terminal: Ein Terminal öffnen] [:mit Root-Rechten arbeiten:] [:Editor: Einen Texteditor öffnen] [:Benutzer_und_Gruppen: Umgang mit Benutzer und Gruppen] [:Rechte: Rechte von Dateien ändern] }}} [[Inhaltsverzeichnis()]] [[Bild(SANE/sane.png, 100, left)]] [[Bild(./Saned_Konzept_Client-Server.png, 350, align=right)]] Das Besondere an [:SANE:] ist, dass es einen Dienst zur Verfügung stellt, welcher so konfiguriert werden kann, dass ein am Server angeschlossener Scanner (oder mehrere) im Netzwerk für andere Rechner transparent zur Verfügung steht. Dieses Programm heißt `saned` (''sane'' ''d''aemon). Alle Funktionen des Scanners sind verwendbar, als wäre das Gerät direkt am Client angeschlossen. So ist zum Beispiel im Büro der zentrale Scanner auf allen vernetzten Rechnern und den mittels [:WLAN:] angebunden Notebooks verfügbar; auch über Virtuelle Maschinen lassen sich Scanner so verwenden. Die Konfiguration eines solchen Servers ist eigentlich nicht schwer - man darf nur die Übersicht über die verschiedenen Konfigurationsdateien nicht verlieren, deren Fülle letztendlich einen Tribut an die Sicherheit des Betriebs im Netzwerk darstellen. {{{#!vorlage Hinweis Einige netzwerkfähige Scanner lassen sich auch ohne Netzwerkkonfiguration direkt über das [https://sane-project.gitlab.io/website/sane-backends.html#S-ESCL escl-Backend] {en} betreiben, das mit SANE 1.0.29 Bestandteil von SANE geworden ist. Zur Verwendung in älteren Sane-Versionen gibt es eine Anleitung im Wiki: [:Howto/Scanner_über_Airscan_einrichten:]. }}} = Voraussetzungen = Die Grundvoraussetzungen zum Betrieb eines Scanservers ist natürlich ein funktionierender Scanner, der direkt am Scanserver angeschlossen ist. Alles dazu ist in Ubuntu vorinstalliert und muss nicht konfiguriert werden. Dies wird u.a. im Artikel [:Scanner:] beschrieben. Es muss weiterhin folgendes Paket installiert [1] werden, welches den Scandaemon `saned` und das Terminalprogramm [2] `scanimage` enthält: {{{#!vorlage Paketinstallation sane-utils }}} = Konfiguration des Servers = {{{#!vorlage Hinweis Alle Konfigurationsdateien auf dem Server und auch den Clients müssen mit administrativen Rechten[3] editiert werden. Bei Verwendung einer nach [:SANE/Kompilieren:] erstellten Version erfolgt die Konfiguration auf dem Server 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. 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]). }}} Es gilt folgende Vorgehensweise, da [:systemd:] verwendet wird. Gestartet wird saned über zwei Dateien in '''/lib/systemd/system''', '''saned.socket''' und '''saned@.service'''. Der Socket lauscht dabei ständig am sane-port 6566 auf eingehende Requests, um __nur im Bedarfsfall__ den Daemon zu starten. Ein manuelles Starten ist nicht mehr möglich, ein Versuch führt zu Fehlermeldungen, ist aber auch nicht nötig. Mit {{{#!vorlage Befehl sudo systemctl status saned.socket }}} kann die Funktion des Sockets überprüft werden, die Ausgabe sieht in etwa so aus: {{{ ● saned.socket - saned incoming socket Loaded: loaded (/lib/systemd/system/saned.socket; enabled; vendor preset: enabled) Active: active (listening) since Mi 2016-05-25 16:46:07 CEST; 2h 17min ago Listen: [::]:6566 (Stream) Accepted: 0; Connected: 0 Mai 25 16:46:07 rechenername systemd[1]: Listening on saned incoming socket. }}} Falls der Socket nach dem Rechnerstart nicht aktiv sein sollte, hilft der Befehl {{{#!vorlage Befehl sudo systemctl start saned.socket }}} Um `saned.socket` gleich ab Systemstart laufen zu lassen, muss einmalig {{{#!vorlage Befehl sudo systemctl enable saned.socket }}} ausgeführt werden. Damit wird ein [:ln/#Symbolische-Verknuepfungen:Symlink] '''/etc/systemd/system/sockets.target.wants/saned.socket''' auf '''/lib/systemd/system/saned.socket''' gelegt. Wenn der automatische Start von `saned.socket` nicht mehr benötigt wird, kann das mit `sudo systemctl disable saned.socket` wieder abgestellt werden. Sobald ein Programm den Dienst anfordert (z.B. [:XSane:], oder `scanimage`), wird `saned` gestartet, aber sobald es nicht mehr benötigt wird, auch wieder beendet. Bei z.B. über das net-backend laufendem XSane sieht eine Ausgabe von {{{#!vorlage Befehl sudo systemctl status saned@*.service }}} (das '''*''' ist wichtig!) in etwa so aus: {{{ ● saned@0-192.168.xxx.xx:6566-192.168.xxx.xx:38046.service - Scanner Service (192.168.xxx.xx:38046) Loaded: loaded (/lib/systemd/system/saned@.service; indirect; vendor preset: enabled) Active: active (running) since Mi 2016-05-25 18:47:01 CEST; 6min ago Main PID: 2181 (saned) CGroup: /system.slice/system-saned.slice/saned@0-192.168.xxx.xx:6566-192.168.xxx.xx:38046.service └─2181 /usr/sbin/saned Mai 25 18:47:01 rechnername systemd[1]: Started Scanner Service (192.168.xxx.xx:38046). Mai 25 18:47:01 rechnername saned[2181]: saned (AF-indep+IPv6+systemd) from sane-backends 1.0.25git starting up Mai 25 18:47:01 rechnername saned[2181]: check_host: access by remote host: ::ffff:192.168.xxx.xx Mai 25 18:47:01 rechnername saned[2181]: init: access granted to saned-user@::ffff:192.168.xxx.xx }}} (Mehr Einzelheiten im [post:8291983:Forum].) = Rechte für USB-Scanner anpassen = Bei USB-Scannern müssen ggf. auf dem Server die Zugriffsrechte für USB-Geräte in der Datei '''/lib/udev/rules.d/50-udev-default.rules''' in einem Editor mit Root-Rechten [3] von {{{ # libusb device nodes SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", MODE="0664" }}} in {{{ # libusb device nodes SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", MODE="0666" }}} geändert werden. Achtung, auch diese Änderung kann bei einem Systemupdate überschrieben werden und muss ggf. neu gemacht werden. Alternativ ist es auch möglich, den Benutzer[5] `saned` in die Gruppen `plugdev` und `scanner` aufzunehmen. Damit erhält dieser Benutzer Schreibrechte auf den Scanner. Für einige Multifunktionsgeräte kann es notwendig sein, `saned` ebenfalls in die Gruppe `lp` aufzunehmen. = Netzwerkzugriff für Clients auf dem Host (Server) freigeben = {{{#!vorlage Hinweis Häufige Fehlerquelle - die Rechner, die den Scanner auf dem Server verwenden wollen, müssen explizit freigegeben werden. }}} In der Datei '''/etc/sane.d/saned.conf''' werden mit einem Texteditor die Hostnamen eingetragen, die auf den Scanserver zugreifen dürfen. Einträge können zum Beispiel sein {{{ 192.168.0.5 # IP-Adresse für einen einzelnen Rechner rechner1.zuhause # Alias Name für einen einzelnen Rechner 192.168.0.0/24 # Alle Rechner mit Adressen 192.168.0.1 bis 192.168.0.254 }}} Man sollte in jedem Fall die Verwendung des Scandienstes auf bekannte Rechner/Netze einschränken und __niemals__, wie teilweise zu lesen mit "+" global freigeben. = Konfiguration des Client = In der Datei '''/etc/sane.d/net.conf''' wird mit einem Texteditor die Netzwerkadresse desjenigen Rechners (Host) eingetragen, an dem der Scanner angeschlossen ist. Es können auch mehrere Scanserver angegeben werden. {{{ 192.168.0.5 # IP-Adresse für einen einzelnen Rechner meinserver1.zuhause # Aliasname einzweitersever.firma # Aliasname }}} SANE sucht dann auf all diesen Rechnern nach Scannern, was jedoch zu Wartezeiten auf dem Clientrechner führen kann. Hier sollte man also keine Netzwerkadressen für ganze Netzwerke (z.B. `192.168.0.0/24`) angeben, sondern nur einzelne Rechner. In der Regel erfolgt die Erkennung dann innerhalb weniger Sekunden. Ist der Rechner - oder gar mehrere - nicht erreichbar, so kann dies zu sehr langen Wartezeiten führen. Mit dem folgenden Eintrag in die '''/etc/sane.d/net.conf''' kann die Wartezeit auf z.B. 10 Sekunden pro Server festgelegt werden: {{{ connect_timeout = 10 }}} {{{#!vorlage Experten Konfiguriert man die Clientdateien auch auf dem Scanserver selbst, so erhält man __zwei__ Scannerangaben auf diesem Rechner. Einen, welcher direkt über das für den jeweiligen Scanner verwendete SANE-Backend (z.B. `epson`) auf den Scanner zugreift und einen, welcher über das lokale Netzwerk des Rechners zur Verfügung gestellt wird (SANE-Backend `net:SERVER:...`). Das kann für bestimmte Programme nötig sein, z.B. für [:SwingSane:]. }}} = Testen = == Im Terminal == Zum Testen in einem Terminal [2] verwendet man `scanimage -L`, hier ein Beispiel mit einem Epson-Scanner. {{{#!vorlage Befehl scanimage -L }}} ergibt am Scanserver folgende Ausgabe: {{{ device `epson:/dev/sg2' is a Epson Perfection1200 flatbed scanner }}} und am Client: {{{ device `net:server:epson:/dev/sg2' is a Epson Perfection1200 flatbed scanner }}} Um bei mehreren Geräten einen erkannten Scanner für den Test - oder auch für den Aufruf einer speziellen Anwendung wie `scanimage` - festzulegen, kann man global die [:Umgebungsvariable:] `SANE_DEFAULT_DEVICE` setzen oder einem Befehl voranstellen. {{{ SANE_DEFAULT_DEVICE='net:server:epson:/dev/sg2' }}} == In der grafischen Oberfläche == Zum Testen in der grafischen Oberfläche verwendet man ein beliebiges [:Scanner/Software:Scanprogramm]. {{{#!vorlage Hinweis Bei der Verwendung des [#Passwortschutz Passwortschutzes] des `saned` muss bekannt sein, ob das jeweilige Programm diese Funktion unterstützt (bei dem Programm [:XSane:] ist dies z.B. der Fall, mit [:gscan2pdf:] gibt es damit Probleme). }}} [[Bild(./sanetwain-main.png, 200, right)]] = Zugriff über SaneTwain von Windows-Clients aus = Der Zugriff funktioniert auch über Windows-Rechner (getestet, allerdings nur für die veralteten Versionen Windows 7 (64-bit) und XP (32-bit)); dazu kann das Programm [https://sanetwain.ozuzo.net/ SaneTwain] {en} verwendet werden. Auf dem Ubuntu-Server muss ggf. der eigene Benutzer in der Gruppe `saned` aufgenommen werden [5], damit der Zugriff dauerhaft erfolgen kann. Im SaneTwain-Einstellungsdialog, der beim ersten Programmstart erscheint, muss die IP-Adresse des Servers angegeben werden, dann kann auf den/die angeschlossenen Scanner zurückgegriffen werden; ggf. auch der Benutzername des derzeit am Server angemeldeten Benutzers. Der Funktionsumfang der Software ist mit einfacheren SANE-Programmen vergleichbar, reicht aber nicht an [:XSane:] heran. Hier gilt außerdem, wie bei allen SANE-Programmen, dass der Funktionsumfang stark von Möglichkeiten der verwendeten Hardware abhängig ist. Nähere Einzelheiten zur Konfiguration und Benutzung findet man auf der Projektseite. Für Mac-Clients sollte der Zugriff über das Programm [http://www.ellert.se/twain-sane/ Twain-Sane] {en} erfolgen können (nicht getestet!). == Alternativen zu SaneTwain == Da die Unterstützung von SaneTwain für Windows in der 64-bit-Version nicht gewährleistet werden kann, hier noch eine Alternative. Die Software heißt SaneWinDS und funktioniert auch unter Windows 8.1 mit 64 bit [sourceforge:sanewinds:SaneWinDS, Download bei Sourceforge] {dl}. Es können die Tasten am Scanner genutzt werden, um einen neuen Scanvorgang auszulösen und kontinuierlich in ein PDF-File zu speichern. Eine weitere Alternative ist [:SwingSane:], mit dem SANE-Netzwerk-Scanner unter Linux, Windows und OS2 verwendet werden können. == SANE-Scanner via Android == Mit [https://play.google.com/store/apps/details?id=com.sane.droid&hl=de SANEDroid] {de} oder [https://play.google.com/store/apps/details?id=org.avmedia.insanescanner&hl=de InSaneScanner] {de} kann auch über Android-Handys und Tablets auf SANE-Netzwerkscanner zugegriffen werden. Die Programme stellen einfache Scan-Funktionen zur Verfügung, können aber nicht mit einem passwortgeschützen `saned` verwendet werden. = Problemlösungen = {{{#!vorlage Hinweis Wenn ein Scanprogramm vom Server oder einem der Clienten aus auf den Scanner zugreift, wird er normalerweise von anderen Rechnern solange nicht gefunden, bis das jeweilige Programm beendet ist! }}} == Unter Benutzer saned kein Zugriff auf Scanner möglich == Wenn - wie z.B. unter 20.04 der Fall - es zwar Ausgaben zu `saned.socket` {{{#!vorlage Befehl sudo systemctl status saned.socket }}} gibt, aber weder `scanimage -L` noch andere Programme Zugriff auf den Netzwerk-Scanner erhalten, kann es helfen, auf dem Server in '''/lib/systemd/system/saned@.service''' statt des vorgegebenen `USER`-Eintrags `saned` den aktuellen Benutzer einzutragen. Der muss dann allerdings Mitglied der Gruppe `saned` sein. == Provisorische Anleitung bei Problemen == Wenn trotz fehlerfreier Konfiguration Scanner bei Verwendung von [:systemd:] nicht angesprochen werden können, aber Programme wie [:SwingSane:] oder die Flatpak-Version von [:Paperwork:] verwenden werden sollen, die über das net-backend auf Scanner zugreifen müssen, können ggf. die Dateien in '''/lib/systemd/system''', die den Service regeln (das sind '''saned.socket''', '''saned@.service''' und '''saned.service''') umbenannt oder gelöscht werden (Rootrechte nötig). Danach die nachfolgende Anleitung befolgen. Achtung, diese Änderung wird von einem Update des Pakets '''sane-utils''' wieder überschrieben und müsste daraufhin wiederholt werden. Allerdings können bei diesem Vorgehen z.B. XSane oder [:Simple Scan:] ggf. vom Server aus nicht auf das Netzwerk-backend zugreifen sonder "nur" über den direkten Weg, auch die unten beschriebenen Testverfahren greifen nicht! Mit der Ausgabe von {{{#!vorlage Befehl sudo service saned status }}} lässt sich aber zumindest feststellen, ob Verbindungen zum Netzwerkscanner erfolgreich waren oder nicht. === saned beim Systemstart unter der provisorischen Anleitung starten === Der Netzwerk-Daemon `saned` wird standardmäßig nicht beim Hochfahren des Rechners gestartet. Dazu muss für diese Methode in einem Editor[4] mit Root-Rechten in der Datei '''/etc/default/saned''' auf allen verwendeten Rechnern der Eintrag {{{ # Set to yes to start saned RUN=no }}} zu {{{ # Set to yes to start saned RUN=yes }}} geändert werden. Auch ein Neustart hilft nicht, wenn die Datei nicht abgeändert wird. === Neustart saned unter der provisorischen Anleitung === Nach Änderungen an der Konfiguration muss der `saned`-Daemon im Terminal [2] auf dem Server und dem Client mit folgendem Befehl neu gestartet werden: {{{#!vorlage Befehl sudo service saned restart }}} == Benutzer in saned-Gruppe aufnehmen == Ggf. ist es allgemein nötig, den aktuellen Benutzer auf dem Server mit in die [:Benutzer_und_Gruppen:Gruppe] `saned` aufzunehmen, damit der Zugriff von den Clienten auf den Scanner möglich ist. Ggf. ist es trotz Aufnahme auch nötig, in '''/etc/default/saned''' (s.o.) den Eintrag `RUN_AS_USER=saned` in `RUN_AS_USER=BENUTZENAME` umzuwandeln. == Portfreigabe im Netzwerk == Bei aktuellen Ubuntu-Versionen ist die Freigabe standardmäßig aktiviert, ggf. auf dem Server die Datei '''/etc/services''' überprüfen. Es muss folgender Eintrag vorhanden sein, ansonsten nachtragen: {{{ sane-port 6566/tcp sane saned # SANE network scanner daemon }}} Wie viele andere Netzwerkdienste ist `saned` hier einer speziellen Netzwerk-Portnummer (`6566`) zugeordnet, wodurch er über das [wikipedia:TCP:]-Netzwerkprotokoll angesprochen werden kann. Aus Sicherheitsgründen ist der `saned`-Daemon über die `saned`-Gruppe abgesichert. Damit ist das Protokoll, welches SANE benutzt, auch im Netzwerk ansprechbar. {{{#!vorlage Experten Neben dem Port `6566` verwendet der Scandaemon `saned` einen weiteren Datenport, welcher vom jeweiligen Betriebssystem festgelegt wird - nachzulesen in der [:man:Manpage] von `saned`. Deswegen müssen ggf. bei älteren Ubuntuversionen alle Ports auf dem Server größer 1024 für einkommende Datenverbindungen von Clients freigeschaltet werden. Bei der Verwendung z.B. von [http://www.simonzone.com/software/guarddog/ guarddog] {en} als Firewall für Ubuntu hat die benutzerdefinierte Freigabe des Port 6566 völlig zur einwandfreien Funktion ausgereicht; in einem [:FritzBox:]-Netzwerk ist keine Freigabe erforderlich. }}} == SANE-Netzwerkbackend aktivieren == In aktuellen Ubuntu-Versionen ist der Netzwerktreiber schon aktiviert. Ggf. die Datei '''/etc/sane.d/dll.conf''' überprüfen, die bestimmt, welche SANE-Backends aktiv sind. Das für das Netzwerk zuständige Backend heißt `net` und bewirkt, dass nach Netzscannern gesucht wird. In der Datei '''/etc/sane.d/dll.conf''' muss also die Zeile {{{ net }}} eingetragen und __nicht__ mit einem "#" am Anfang auskommentiert sein. {{{#!vorlage Experten Gelegentlich wird das Gerät nicht mehr unter der ursprünglichen Geräteadresse - z.B. '''/dev/sg2''' - gefunden. Dies kann passieren, wenn das Gerät z.B. vom SCSI- oder USB-Bus getrennt und neu angeschlossen wurde, und dann unter einer anderen Geräteadresse geführt wird, z.B. '''/dev/sg3'''. Kommt dies öfter vor, so empfiehlt es sich, eine [:udev:]-Regel anzulegen, welche auch beim "Reconnect" eine eindeutige Gerätedatei erzeugt (z.B. '''/dev/epson1250''' für einen Epson Scanner). Der Artikel [:udev:] erklärt die Vorgehensweise ausführlich. }}} Wird der Scanner auch dann nicht gefunden, so geht man folgendermaßen vor: 1. Prüfen, ob der Scanner am Scanserver funktioniert (siehe [#Testen Testen]). Es kann auch sinnvoll sein, verschiedene Benutzer zu testen, ob sie auf dem Scanserver auch den Scanner sehen können. So sollte man den Test zuerst mit `root` machen danach mit einem anderen Benutzer. 1. Netzwerkverbindung prüfen. * Steckverbindungen o.k.? * Firewall aktiv und Port 6566 nicht freigegeben? Zum Beispiel in einem Terminal [2] den Server vom Client aus an `ping`en oder mit `telnet` die Verbindung zum Port 6566 prüfen{{{#!vorlage Befehl ping IPdesScanServers }}}{{{#!vorlage Befehl telnet IPdesScanServers 6566 }}} 1. Wurde nach dem Editieren der Konfigurationsdateien der `saned` gestartet bzw. neu gestartet (nicht unter 16.04)? 1. Anleitung von [#Voraussetzungen vorne] nochmal Punkt für Punkt durchgehen. Weiterführende Hinweise findet man in den [#Links Links] auf der Seite über den "SANE Network Daemon". = Sicherheitsaspekte = == Firewall == Zur generellen Empfehlung, wie beim Einsatz einer [:Personal_Firewalls:Firewall] vorzugehen ist, wurde schon [#Portfreigabe-im-Netzwerk weiter oben] hingewiesen. Es muss der Port `6566` geöffnet sein. == Passwortschutz == Den Scandaemon `saned` auf dem Server kann man seit der SANE-Version 1.0.4 für einzelne Benutzer und Scanner passwortgeschützt betreiben. Dies gilt für Zugriffe mit dem Programmen `scanimage` und [:XSane:], andere [:Scanner/Software: Scanprogramme] sollten erst auf die Zusammenarbeit mit dieser Funktionalität hin getestet werden. Dazu muss die Konfigurationsdatei '''/etc/sane.d/saned.users''' erstellt werden. In dieser kann zeilenweise einem Benutzer ein Passwort zugeordnet werden. Das Passwort kann 127 Zeichen lang sein (kein `\r`, `\n`, `\000` erlaubt). Hier am Beispiel eines Epson-Scanners und des Benutzers `joe`. {{{ # /etc/sane.d/saned.users # benutzername:password:backend joe:mein*sicheres+passwort:epson }}} Damit Benutzer das Passwort nicht immer wieder eintippen müssen, können sie in ihrem Heimatverzeichnis in einem versteckten Unterverzeichnis '''.sane''' in der Datei '''pass''' das Passwort speichern. Dazu muss sowohl der Benutzername, als auch die genaue Bezeichnung des zu verwendenden Scanners angegeben werden. Letzteres erfährt man über die Eingabe von `scanimage -L` in einem Terminal [2] auf dem Client. {{{ # ~/.sane/pass # benutzername:password:ressource joe:mein*sicheres+passwort:net:server:epson:/dev/sg2 }}} Wichtig: Damit diese Datei nicht von anderen gelesen werden kann, sollte man die Rechte[6] zum Lesen und Schreiben der Datei '''pass''' unbedingt auf den eigenen Benutzer beschränken, z.B. in einem Terminal [2]: {{{#!vorlage Befehl chmod 0600 ~/.sane/pass }}} Um serverseitige Attacken zu verhindern, sollte das Programm `scanimage` in Zusammenhang mit der Verwendung des Passwortschutz mit dem Parameter `--accept-md5-only` aufgerufen werden. Für andere Programme sind keine ähnlichen Vorgehensweisen bekannt. Ebenso ist es klug, für den Scannerzugriff ein anderes als das reguläre Benutzerpasswort zu verwenden! = Links = * [:Scanner:] und [:Scanner/Software:Software] - Installation von Scannern und Scannersoftware * [https://mein.homelinux.com/wiki/sane Artikel Einrichtung von saned] {de}, geht auch auf ältere Versionen ein * [https://web.archive.org/web/20180102235035/http://www.xsane.org/ct/sane-ct-21-99-190.html Artikel der Zeitschrift CT aus dem Jahr 1999] {de} - Älterer, aber grundsätzlich wertvoller und stimmiger Artikel zum Thema * [ubuntu_doc:community/ScanningHowTo: Scanning HowTo] {en} - Ubuntu Community Documentation * [https://sane-project.gitlab.io/website/ SANE Homepage] {en} - Links aus der `saned`-Manpage * [https://penguin-breeder.org/sane/saned/ SANE Network Daemon] {en} - für Fortgeschrittene, gute Hinweise zum Absichern des saned (Passwortschutz) und zum Troubleshooting * [https://sanetwain.ozuzo.net/ SaneTwain] {en} - Windows-Client für SANE-Server * [http://www.ellert.se/twain-sane/ Twain-Sane] {en} - Mac-Client für SANE-Server * [:SwingSane:] - Java-Programm zur Nutzung von SANE-Netzwerkscannern #tag: Netzwerk, Hardware, Scanner, Büro