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 windowssystem32spooldriversw32x86. Da qualche parte troverete i seguenti files:

ps5ui.dllpscript5.dllpscript.hlpscript.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!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *