La stampante diventa wireless, con Raspberry Pi


Informatica / lunedì, Gennaio 27th, 2020

Creiamo il nostro print server

Purtroppo, nell’era digitale,  abbiamo ancora spesso bisogno di usare la stampante. Sono ingombranti, pesanti, lente, le potremmo chiamare “perdi inchiostro a tradimento” o “spargi toner da ufficio”. Personalmente, ne installo a decine e girando per gli uffici, vedo questi vecchi ruderi dotati della sola connessione USB… quanta tristezza, quanti limiti: ormai abbiamo computer, tablet, smartphone.. e la stampante? Là da sola, collegata al pc.
E’ ora di farla evolvere!

Rendiamola libera dai vincoli, adeguiamola all’era del IoT, grazie a RaspberryPi, (meglio se Pi Zero W) e Raspbian.

Prima di tutto, installiamo quindi Raspbian sul nostro RaspberryPi ed aggiorniamolo, seguendo la guida sul nostro Blog, non ci serviranno monitor, tastiere o mouse, se facciamo tutto da SSH.

Una volta collegata la stampante alla porta USB del RaspberryPi (se usi il PiZero utilizza un cavo Otg, come quello per smartphone o tablet Android) e aver connesso il RaspberryPi alla nostra rete WiFi (o collegato alla LAN con cavo Ethernet), possiamo proseguire, verificando se la stampante viene rilevata, iniziando prima con il comando

sudo su

per avere i pieni diritti di configurare il tutto, poi con

lsusb

possiamo verificare, se tra i nomi di tutti i dispositivi usb rilevati, compare la nostra stampante. In caso di problemi, fate riferimento al forum, nella discussione dedicata a questa guida.
Ecco un esempio di output

pi@pizero:~ $ lsusb 
Bus 001 Device 002: ID 04e8:3292 Samsung Electronics Co., Ltd ML-1640 Series Laser Printer 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Nel mio caso sto usando una vecchia stampante laser Samsumg ML-1640 collegata ad un RaspberryPi Zero W.

Aggiornamento: le stampanti Samsung non sono più supportate.

Dopo aver appurato che la parte hardware è regolarmente funzionante e riconosciuta, proseguiamo con la configurazione dei vari software, eseguendo prima l’ormai classico comando

apt update

che aggiornerà l’elenco dei pacchetti e successivamente

apt install -y cups

il quale installerà il software CUPS, fondamentale per gestire le stampanti su Mac e Gnu/Linux.

Ricordo che, nel caso non conoscessimo il nome preciso di un pacchetto, sarà sufficiente digitare

apt list InizioNomeDelPacchetto*

oppure

apt search ParteDelNomePacchetto

Consiglio di leggere sempre il manuale dei pacchetti che andremo a utilizzare, digitando il comando man [nome del pacchetto]. Nel nostro caso:

man cupsman cupsctl

Cupsctl è un comando che serve a semplificarci la vita nel configurare il file /etc/cups/cupsd.conf, che è la base per la gestione del demone CUPS, nel quale si possono impostare tutta una serie di permessi: dall’accesso alle stampanti, al pannello web, che di default si trova all’ indirizzo https://ipRaspberryPi:631 .

Come buona norma, Linux limita al massimo i rischi, bloccando l’accesso dai pc remoti. Nel nostro caso, volendo gestire CUPS da un pc secondario o da remoto, dobbiamo abilitarne l’accesso con il semplice comando

cupsctl --remote-admin --remote-any --share-printers

Come possiamo vedere qui sotto, ci sono altri parametri utilizzabili, ma ricordo che per una maggiore precisione possiamo sempre modificare il file /etc/cups/cupsd.conf .

Questi invece sono i parametri utilizzabili con cupsctl.

Uso: cupsctl [opzioni] [param=valore ... paramN=valoreN] 
Opzioni: 
--[no-]debug-logging    Attiva/disattiva il logging del debug. 
--[no-]remote-admin     Attiva/disattiva l'amministrazione remota. 
--[no-]remote-any       Consente/previene l'accesso da Internet. 
--[no-]share-printers   Attiva/disattiva la condivisione della stampante. 
--[no-]user-cancel-any  Consente/vieta la possibilità agli utenti di eliminazione delle stampe.

Ora che abbiamo il server CUPS attivo e condiviso, dobbiamo poterlo amministrare. Per farlo sarà necessario assegnare gli utenti al gruppo lpadmin tramite il comando

usermod -aG lpadmin pi

in questo caso sto utilizzando l’utente pi di default, ma, se ne utilizzi uno diverso, sarà sufficiente sostituire pi con il tuo.

Riavviamo ora i servizi CUPS tramite il comando

service cups* restart

service è un comando generico “wrapper” per gestire il servizi, che accetta le opzioni start/stop/restart/status . Scrivendo un asterisco dopo una parte di nome, si chiede di riavviare tutti i servizi che iniziano per cups. Nel nostro caso i nomi completi sono

cups-browsed.servicecups.service

Finalmente possiamo accedere all’interfaccia di gestione web da qualsiasi computer, usando utente e password del RaspberryPi, tramite il link

https://[ip del RaspberryPi]:631

631 è la porta standard, che può essere modificata nel file /etc/cups/cupsd.conf ed eventualmente essere “nattata” sul router per accedervi dall’esterno, anche se io consiglio sempre di usare PiVpn .

Tramite il menu Administration, premiamo add printer, selezioniamo la stampante locale, procediamo ad assegnargli un nome a nostra scelta e, cosa importante, clicchiamo share this printer per condividerla in rete.  Successivamente la scelta dei driver va valutata cosi,

  1. cerco nel sito della casa madre il file PPD e lo aggiungo col pulsante sottostante;
  2. cerco con apt search marca_stampante. Nel mio caso c’erano i driver printer-driver-splix;
  3. alla fine se non c’è nemmeno nella lista predefinita si prova con i driver generici o del modello più simile andando su Select another Manufacter -> Generic -> Generic PCL Laser (laser), Postscript (standard) o Text-Only (Aghi).

Bene, ora che la stampante è installata, per comodità impostiamola come predefinita nel server tramite il menu Printers -> Set as server default.

Finalmente adesso possiamo stampare!

Attualmente solo da RaspberryPi, ma si presta bene all’utilizzo tramite script, magari con una stampante ad etichette o qualche automatismo ancora da inventare: è sufficiente usare il comando

lp [file_da_stampare]

Proviamo se funziona tutto correttamente tramite il comando sottostante, che creerà un file di testo e lo stamperà.

echo prova > prova.txt ; lp prova.txt

Stampare da Windows

Veniamo alla parte di condivisione Windows, che immagino sarà molto usata. Windows non è in grado di gestire le stampanti linux, ma per fortuna hanno inventato Samba!

Samba ha molte funzioni utili per gestire le risorse delle reti miste, dal domain controller, alle cartelle condivise alle stampanti, il tutto racchiuso nel suo file di configurazione /etc/samba/smb.conf del quale andremo solo a sfiorare le grandi potenzialità.

Samba non è installato di default in Raspbian, quindi installiamolo tramite

apt install -y samba

modifichiamo ora la configurazione con

nano /etc/samba/smb.conf

e nella sezione printers abilitiamo le condivisioni

[printers] 
  comment = All Printers 
  browseable = yes
  path = /var/spool/samba 
  printable = yes guest ok = yes 
  read only = yes create mask = 0700

Salviamo e riavviamo i servizi con

service samba* restart

Eccellente! Ora abbiamo spiegato a Samba che vogliamo che le stampanti siano condivise anche per i pc Windows. Non resta altro che aprire una qualsiasi cartella in Windows, nella barra del percorso mettere \\nomeDelRapsberry e premere invio, per vedere le stampanti e cartelle che sta condividendo, se chiede nome utente e password, saranno quelle abilitate nel RaspberryPi.

Premendo il tasto destro del mouse sull’icona della stampante e selezionando connetti si avvierà la procedura guidata di installazione, la quale chiederà i driver Windows della stampante, che di sicuro troverai sul sito del costruttore nella sezione driver, facendo attenzione a scaricare quelli per la versione corretta di Windows (32 o 64 bit).

Stampa Android

Siamo nell’era degli smartphone, dobbiamo per forza riuscire a stampare tutti i documenti che ci servono e che abbiamo scaricato dallo smartphone!

Android, solitamente nel menu impostazioni avanzate (dipende dalla versione), ha la sezione dedicata alle stampanti, nella quale potremmo configurare tutti i servizi di stampa online. A noi serve una qualsiasi APP trovata sullo store in grado di supportare le stampanti CUPS.
Per questa prova ho scelto PrinterShare, ma ce ne sono molte altre tra cui scegliere. Scarichiamo l’app ed una volta avviata, con semplicità e in pochi secondi troverà la stampante. Sarà sufficiente selezionarla e inviarle un qualsiasi documento da stampare, niente di più facile.

Potrebbe richiede l’ip o il nome del RaspberryPi, il nome è sempre preferibile, perché l’indirizzo ip di norma è dinamico se non avete fatto configurazioni specifiche per un ip fisso sul router o sulla macchina.