🌐saned – Scanner im Netzwerk teilen
Hängt der Scanner an einem anderen Rechner, reicht das net-Backend jeden SANE-Aufruf über TCP an den Dienst saned weiter. Der ruft auf seiner Seite die ganz normalen Backends auf – für das Frontend sieht der entfernte Scanner aus wie ein lokaler.
🧭Der Weg eines Aufrufs
Laptop (Client) scanner.example.org (Server)
┌──────────────────────┐ ┌──────────────────────────────┐
│ simple-scan │ │ systemd: saned.socket :6566 │
│ │ sane_open( │ │ └► saned@.service (saned) │
│ │ "net:scanner. │ TCP 6566 Steuerung (RPC) │ │ sane_open("pixma:…")│
│ │ example.org: │ ────────────────────────────► │ ▼ │
│ ▼ pixma:…") │ │ libsane (dll) │
│ libsane (dll) │ TCP 10000-10100 Bilddaten │ ▼ │
│ └► net-Backend │ ◄════════════════════════════ │ pixma-Backend ── USB ──►🖨️
│ net.conf │ │ saned.conf (Zugriff) │
└──────────────────────┘ └──────────────────────────────┘💡 Zwei Verbindungen
Steuerung über 6566/tcp (Dienstname
sane-port). Nach SANE_NET_START nennt der Server einen zweiten Port für die Bilddaten – festlegbar mit data_portrange.⚠️ Keine Verschlüsselung
saned überträgt Bilder und Passwörter ungeschützt. Die Manpage empfiehlt, im offenen Netz einen sicheren Tunnel (z. B. SSH/VPN) zu nutzen, und saned nie als root laufen zu lassen.
✅ Endlosschleife vermeiden
Standardmäßig benutzt saned selbst keine Netzwerk-Scanner (Option
-n erlaubt es) – sonst könnte er sich über das net-Backend selbst fragen.🛡️Wer darf scannen? (saned.conf)
saned vergleicht die Adresse des Clients mit der Zugriffsliste: Hostnamen, IP-Adressen oder Netze in CIDR-Schreibweise. localhost ist immer erlaubt.
Eine Zeile mit nur + erlaubt jeden Host – laut saned(8) ein Sicherheitsrisiko.
✅ Zugriff erlaubt
Regel: 192.0.2.0/24
⚙️Einrichten
🖥️ Server (am Scanner)
# Debian/Ubuntu sudo apt install sane-utils # Zugriff erlauben echo '192.0.2.0/24' | sudo tee -a /etc/sane.d/saned.conf # lokal testen – der Scanner muss hier funktionieren scanimage -L # Dienst über systemd-Socket aktivieren sudo systemctl enable --now saned.socket ss -ltn 'sport = :6566'
💻 Client
# net muss in /etc/sane.d/dll.conf aktiv sein grep -n '^net' /etc/sane.d/dll.conf # Server eintragen echo 'scanner.example.org' | sudo tee -a /etc/sane.d/net.conf # optional: connect_timeout = 5 # oder nur für diese Sitzung export SANE_NET_HOSTS=scanner.example.org scanimage -L device `net:scanner.example.org:pixma:12345678_ABCDEF' is a …
🔬Das Protokoll auf dem Draht
Das SANE-Netzwerkprotokoll ist ein einfaches RPC-Protokoll: Der Client schickt einen RPC-Code und die Argumente, der Server antwortet. Alle Zahlen sind 4-Byte-Words in Netzwerk-Byte-Reihenfolge (big-endian).
Schritt 1 / 10 · Tasten ← →
Steuerverbindung :6566
SANE_NET_INIT (0)
00 00 00 00 01 00 00 03 00 00 00 05 61 6e 6e 61 00
17 Bytes · alle Words big-endian
RPC-Code 0, dann Versionscode des Clients – im Build-Feld steht die Protokollversion (hier 3) – und der Benutzername.
Vereinfacht: zwischen OPEN und START holt der Client außerdem die Optionsdeskriptoren (4), setzt Optionen (5) und fragt die Parameter ab (6). Benutzername und Werte sind Beispiele.
| RPC-Code | Name | Zweck |
|---|---|---|
| 0 | SANE_NET_INIT | Verbindung aufbauen, Versionscode + Benutzername austauschen |
| 1 | SANE_NET_GET_DEVICES | Geräteliste des Servers abfragen |
| 2 | SANE_NET_OPEN | entferntes Gerät öffnen (ggf. mit Autorisierung) |
| 3 | SANE_NET_CLOSE | Gerät schließen |
| 4 | SANE_NET_GET_OPTION_DESCRIPTORS | alle Optionsdeskriptoren auf einmal holen |
| 5 | SANE_NET_CONTROL_OPTION | Option lesen, setzen oder auf automatisch stellen |
| 6 | SANE_NET_GET_PARAMETERS | Bildparameter abfragen |
| 7 | SANE_NET_START | Scan starten – Antwort enthält den Port der Datenverbindung |
| 8 | SANE_NET_CANCEL | laufenden Scan abbrechen |
| 9 | SANE_NET_AUTHORIZE | Benutzer/Passwort für eine Ressource senden |
| 10 | SANE_NET_EXIT | Sitzung beenden, Verbindung schließen |