La scansione dei documenti cartacei è qualcosa che oggi diamo per scontata. Tale funzionalità è stata demandata quasi interamente ai nostri cellulari che sono dotati di applicazioni apposite. Tuttavia questa soluzione non sempre ideale in ogni contesto. Infatti quando si tratta di scansionare decine di documenti uno scanner tradizionale può garantire un lavoro più rapido e preciso.
In un'abitazione, o più spesso in un'azienda, non sempre è possibile avere uno scanner dedicato per ogni PC. Quindi è necessario affidarsi a servizi di condivisione delle periferiche nella rete locale. Non tutti gli scanner dispongono però di tale funzionalità. Per ovviare a tale problematica è possibile realizzare uno scanner server con cui condividere tutti gli scanner fisicamente connessi a un dispositivo con i diversi terminali presenti nella LAN.
In questa guida scopriremo come realizzare un semplice scanner server sfruttando Raspberry Pi. In modo tale da condividere i diversi scanner, connessi alla board ARM, con i PC collegati al medesimo router. Si tratta dunque di una soluzione software perfetta per riciclare vecchi scanner che non hanno la possibilità di connettersi nativamente tramite WI-FI, o cavo ethernet, alla LAN.
L'hardware per il nostro progetto
Per questo progetto abbiamo bisogno di un Raspberry Pi 4 model B, l'edizione con 8GB di Ram va più che bene. Se lo si desidera è possibile affidarsi anche all'edizione precedente della board, Raspberry Pi 3 model B. Infatti lo scanner server non necessità di un quantitativo di risorse molto elevato. Ovviamente è necessaria una scheda microSD da almeno 64GB, per ospitare il sistema operativo che anima il device, e per la prima configurazione vi consigliamo anche di dotarvi di mouse, tastiera e monitor con cavo HDMI.
Installazione e configurazione di Raspberry Pi OS
Iniziamo con il download della distribuzione Linux Raspberry Pi OS, che viene realizzata dai creatori del dispositivo, e di un imaging tool a nostra scelta. Noi vi consigliamo di adottare Raspberry Pi Imager, ovvero la comoda utility dei coder del progetto che è stata pensata appositamente per realizzare dei media d'installazione con Raspberry Pi OS.
Avviamo quindi Raspberry Pi Imager. Il tool presenta una GUI davvero semplice e lineare. Basta cliccare su "Choose OS" per selezione il file ISO di Raspberry Pi OS, successivamente si deve scegliere la voce "Choose Storage" per impostare la microSD su cui eseguire il flash. Infine clicchiamo su "Write" per avviare il processo. Una volta ultimata la procedura disconnettiamo la microSD dal PC ed inseriamola nell'apposito alloggiamento del Raspberry Pi.
Siamo quindi pronti per connettere il dispositivo all'alimentazione e ad eseguire il primo boot. Non dimentichiamoci inoltre di collegare mouse, tastiera e monitor cosi da poter completare il wizard di prima configurazione. L'installazione di Raspberry Pi OS è davvero semplice, basta seguire la procedura guidata. Non la tratteremo nel dettaglio e passeremo direttamente alla configurazione software dello scanner server.
Installazione e configurazione di SANE
Per gestire e amministrare gli scanner connessi a Raspberry Pi utilizzeremo SANE. Si tratta di un'API pensata per fornire accesso standardizzato ad un vasto bacino di scanner presenti in commercio. Il pacchetto di questo set di librerie è presente nei repository software della distribuzione, quindi basta invocare il gestore di pacchetti tramite shell per poterlo installare:
sudo apt install sane hplip
Oltre a SANE abbiamo indicato al sistema di scaricare ed installare hplip, un pacchetto dedicato agli scanner HP che potrebbe tornare utile a diversi utenti.
Adesso siamo pronti per vedere se tutto funziona correttamente. Connettiamo alle porte USB i nostri scanner e verifichiamo che SANE riesca a rilevarli con questo comando da inserire su bash:
sudo sane-find-scanner -q
Si dovrebbe quindi ricevere un output del genere:
found USB scanner (vendor=0x05a7 [EPSON], product=0x1935 [GS4890 series]) at libusb:001:008
Ora per sicurezza verifichiamo che il nostro scanner sia supportato anche da SANE:
scanimage -L
Se tutto dovesse funzionare correttamente dovremmo visualizzare un output simile al seguente:
device `epson:04A9191929' is a EPSON Model GS4890 Series multi-function peripheral
Ora effettuiamo una prova di scansione:
scanimage > scansioneditest.jpg --format jpeg --resolution=300 -p
Nel dettaglio abbiamo indicato a SANE di eseguire una scansione e di realizzare un'immagine chiamata scansioneditest.jpg
con una risoluzione di 300 DPI. L'opzione "-p
" alla fine del comando ci consente di monitorare i progressi della scansione in tempo reale.
Configurare lo Scanner Server con SANE
Dobbiamo quindi abilitare il demone di SANE, fare in modo che venga avviato ad ogni reboot del dispositivo e che sia anche reperibile quando un comando di scansione proviene da un client remoto. Dunque digitiamo il comando proposto di seguito per creare un nuovo file di configurazione per systemd:
sudo nano /etc/systemd/system/saned.socket
Al suo interno incolliamo tali setting:
[Unit]
Description=saned incoming socket
[Socket]
ListenStream=6566
Accept=yes
MaxConnections=1
[Install]
WantedBy=sockets.target
Salviamo le modifiche tramite la combinazione di tasti CTRL+O e chiudiamo il documento appena generato con CTRL+X. Nel dettaglio abbiamo appena salvato un systemd socket file, ovvero una configurazione per l'init system che indica a quest'ultimo come comportarsi con un determinato demone. Systemd rimarrà in ascolto sulla porta 6566
, accettando le connessioni una alla volta.
Un systemd socket è sempre associato ad un service file:
sudo nano /etc/systemd/system/@saned.service
All'interno del documento di testo inseriamo quindi i dati seguenti:
[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
Ora salviamo il file. Tale documento indica al sistema una serie di parametri, ad esempio la posizione dell'eseguibile del demone e l'utente ad esso associato.
Adesso dobbiamo fare in modo che SANE accetti le connessioni dai client remoti che richiedono una scansione:
sudo nano /etc/sane.d/saned.conf
Dentro il file appena aperto si deve ricercare tale riga:
## Access list
e sotto di essa incollare questo range di IP:
192.168.0.0/24
Cosi facendo abbiamo indicato a SANE di accettare tutte le connessioni dai device presenti nella nostra rete locale. Successivamente possiamo attivare il demone di SANE:
sudo systemctl enable saned.socket
sudo systemctl start saned.socket
Per verificare se il demone funziona correttamente possiamo immettere tale comando nella shell:
systemctl status saned.socket
Come output si dovrebbe ricevere qualcosa di simile:
Active: active (listening)
Finalmente lo Scanner Server è operativo ed è possibile raggiungerlo semplicemente digitando l'indirizzo IP locale del Raspberry Pi nella barra degli URL di un browser Web. Se non conoscete tale dato non temete, potete ottenerlo lanciando questo comando in bash:
hostname -I
Come risposta si riceverà un numero del genere:
192.168.1.3
Adesso basta aggiungere lo scanner disponibile in rete sui diversi client, si può farlo tramite gli strumenti messi a disposizione dal sistema operativo, e finalmente si potrà iniziare ad utilizzare gli scanner da remoto.