Samba, cups e il click'n'print
Noi utenti *nix abbiamo a disposizione un software meraviglioso: cups. Purtroppo a volte bisogna fare i conti anche con altre piattaforme meno evolute, dove stampare non è sempre facile (aggiorna i driver, condividi la stampante…). Ecco quindi come permettere agli utenti meno abbienti di stampare facilmente con il print server per definizione.
Il “click’n’print” è la feature che permette agli utenti windows di acquisire i drivers di una stampante condivisa in rete semplicemente “aprendola” come se fosse una semplice cartella. Il driver viene quindi scaricato dal computer che condivide la stampante e installato nel sistema.
Niente a che vedere con cups, che scopre per i fatti suoi tutti gli altri server cups presenti nella rete e concede agli utenti locali di stampare su tutte le stampanti condivise senza installare drivers. Semplicemente perché non servono.Cups infatti gestisce i lavori di stampa con Postscript, indipendentemente dal linguaggio effettivamente utilizzato dalla stampante; sarà poi compito del server collegato fisicamente alla stampante di tradurre il flusso Postscript in un linguaggio comprensibile per la stampante.
Di conseguenza, al fine di permettere ad un sistema windows di stampare verso cups, bisogna “imporgli” di usare un driver che traduca il flusso di stampa GDI di windows in un flusso Postscript. Faremo questo inviando un driver Postscript (magari quello usato di default su windows, oppure quello del progetto cups) quando il client richiede a samba il driver di stampa.
Prerequisiti
- samba (configurato e funzionante)
- cups (idem, magari con una stampante condivisa)
- uno o più client windows da cui stampare
Configurazione di samba
Se cups è installato e funzionante, normalmente (nelle distro moderne) samba presenta già le stampanti condivise da cups. In ogni caso riepilogo qui le direttive che devono essere presenti nel file /etc/samba/smb.conf:
[global]
load printers = yes
printing = cups
printcap name = cups
[printers]
comment = Tutte le stampanti
path = /var/spool/samba
browseable = no
public = yes
guest ok = yes
writable = no
printable = yes
printer admin = paolo
[print$]
path = /usr/share/cups/drivers
guest ok = no
browseable = yes
read only = yes
write list = paolo
Giusto per fare chiarezza: la sezione [global] deve abilitare la stampa tramite cups, la sezione [printers] definisce il file di spool, mentre la sezione [print$] definisce uno share (o condivisione, che dir si voglia) contenente i drivers delle stampanti. Infatti ogni server windows che condivide una o più stampanti, possiede uno share nascosto (cioè il cui nome finisce per $) preposto alla condivisione dei driver delle stampanti. Da notare che questo share è in sola lettura, ma ci serve un utente (paolo in questo caso) con i diritti di scrittura, in modo da caricare i drivers. L’utente ha anche il permesso di amministrare le stampanti. Il percorso indicato, invece, punta direttamente ai drivers di cups.
Attenzione: prima di ogni modifica a smb.conf fate sempre una copia.
Attenzione2: dopo ogni modifica a smb.conf, eseguite:
testparm
che validerà le vostre modifiche.
Attenzione3: dopo ogni modifica a smb.conf, riavviate il servizio, altrimenti la modifica non sarà effettiva. Per riavviare samba:
sudo /etc/init.d/samba restart
Attenzione4: ricordatevi che l’utente (paolo) deve esistere sul vostro sistema, e deve avere una password riconosciuta da samba. Per impostare la password in samba: ``
sudo smbpasswd paolo
e inserite una password decente.
Ottenere i drivers
Difficilmente troverete sul vostro sistema linux le dll che vi servono per i driver Postscript 🙂 Bisogna quindi scaricarli da qui. Decomprimete, entrate nella directory appena creata e date un ``
sudo make install
Attenzione: su alcune distro potreste aver bisogno del pacchetto “libcupsys2-dev” per installare questi driver.
Ora vi servono i drivers Postscript di windows, colti direttamente da un sistema “volontario”: cercate in \windows\system32\spool\drivers\w32x86. Da qualche parte troverete i seguenti files:
ps5ui.dll
pscript5.dll
pscript.hl
pscript.ntf
copiateli in /usr/share/cups/drivers e modificate i nomi: convertiteli in minuscolo.
Configurazione di cups
Supporremo qui di avere un server cups installato e funzionante, con almeno una stampante condivisa.L’utente (paolo) dovrà almeno temporaneamente poter scrivere sulla directory /usr/share/cups/drivers. Per cui:
sudo chmod 777 /usr/share/cups/drivers
Potrete ripristinare i permessi in seguito. Ora viene la magia:
sudo cupsaddsmb -H localhost -U paolo -a -v
con questo chiediamo a cups di pubblicare i driver delle stampanti condivise sul server “localhost” utilizzando l’utente “paolo” per accedere in lettura/scritttura alla condivisione “print$” (quella di default per i drivers di stampa di windows). Facciamo ripartire samba e cups, giusto per gradire…
sudo /etc/init.d/samba restartsudo /etc/init.d/cupsys restart
E ora, dal client windows, accedete al server e aprite una stampante, i drivers dovrebbero caricarsi automagicamente!