Mi sono imbattuto per necessità in questo problema e grazie a varie ricerche su internet, guide e lavoro manuale di programmazione, sono riuscito a risolvere il problema. Come sempre lo rendo disponibile a chi ne avesse bisogno oltre che per comodità personale.
Nel mio caso ho utilizzato una distribuzione Debian wheezy, ma sicuramente è adattabile a tante altre.
Per prima cosa elenco l'occorrente hardware:
- un pc con linux
- un pc con windows (o come ho fatto io, una macchina virtuale)
- una stampante qualsiasi
Per quanto riguarda il software su windows:
- Ghostscript
http://www.ghostscript.com/download/gsdnld.html
- GSview (io ho usato la 4.9)
http://pages.cs.wisc.edu/~ghost/gsview/index.htm
- Python (io ho usato la 2.7.3)
http://www.python.org/download/
- Python Win32 Extensions (pywin32)
http://sourceforge.net/projects/pywin32/files/pywin32/
- script dirwatch.py (modificato da me)
https://docs.google.com/open?id=0B1AvO3-cFzRKbGxqOF9laGlpbFk
Software su linux:
- CUPS installato e funzionante correttamente
- SAMBA client (smbclient) installato e funzionante correttamente
- Adobe distiller PPD
http://www.adobe.com/support/downloads/detail.jsp?hexID=273e
- script winp
http://justin.yackoski.name/winp/winp (o se non funziona il link
https://docs.google.com/open?id=0B1AvO3-cFzRKNlRrUDYyYTZ0aEk)
Procedimento:
Facciamo con virtualbox una nuova macchina virtuale ed installiamo windows (io ho utilizzato xp), diamo come nome al pc "windows-print". Alla fine del procedimento dovremmo avere una macchina virtuale con xp perfettamente funzionante compreso l'accesso alle porte usb. Se ricevete errori riguardo l'accesso alle porte usb, probabilmente dovrete aggiungere il vostro utente al gruppo vboxuser in questo modo, sostituendo il vostro nome utente al posto di username:
usermod -a -G vboxusers username
Fatto ciò, possiamo installare i driver della stampante all'interno della macchina virtuale e collegarla cliccando sulla spunta che trovate nelle impostazioni della macchina virtuale. Se non la è già, rendete la stampante predefinita. Provate a lanciare una stampa da windows e se funziona andiamo oltre, altrimenti rivedete l'installazione della stampante e cercate il problema.
Create l'account "print" con password "print" (io l'ho reso amministratore, non ho provato se funziona anche come account limitato) e fate in modo di far avviare windows con l'accesso automatico all'utenza "print", senza richiesta della password.
Per fare ciò, eseguiamo "
control userpasswords2", togliamo la spunta da "Per utilizzare questo computer è necessario che l'utente immetta il nome e la password", clicchiamo su applica e digitiamo il nome utente "print" e la password "print" nella finestra che appare.
Iniziamo con le installazioni software su windows... Installiamo Ghostscript e GSview e verifichiamo che funzioni. Installiamo Python e le win32 extensions verificando che a fine installazione non ci siano errori. A me è successo che le win32 extensions mi dessero un errore alla fine dell'installazione, ho disinstallato, riavviato e installato nuovamente ed è andato a posto (non ho capito il motivo, ma scrivo ciò che mi è successo direttamente).
Creiamo le directory C:\script e C:\temp\spool e condividete quest'ultima. I nomi delle directory possono essere cambiati, ma in quel caso dovrete modificare il programmino python che metterete all'interno di C:\script per far in modo che controlli un'altro percorso. Mettete il file dirwatch.py in C:\script e creiamo un collegamento in esecuzione automatica per l'utente "print".
Il programma dirwatch.py non fa altro che controllare in continuo C:\temp\spool per intercettare modifiche ai file e quando si "accorge" che un file è stato rinominato lancia il programma gsview con alcune opzioni per effettuare la stampa sulla stampante locale predefinita.
Su windows dovremmo aver finito, riavviamo e verifichiamo che in automatico entra nell'utenza print e si apra un terminale con il programma dirwatch.py in ascolto. Se così non fosse ripercorriamo i passi e cerchiamo l'errore prima di procedere oltre.
Passiamo a linux...
Facciamo un test di connessione di rete con la macchina virtuale:
smbclient //windows-print/spool -U print
Se non funziona trovate il problema (magari avete qualche configurazione di smb.conf da sistemare o il firewall di windows attivo) e solo quando riuscirete ad accede alla directory remota potrete continuare. Provate a fare una copia di un file all'interno della directory remota per una seconda verifica di funzionamento, se non avete problemi di permessi o altro potete continuare.
Successivamente dobbiamo estrarre il file ADIST5.PPD da adobe.zip e rinominarlo con caratteri piccoli in adist5.ppd. Spostiamo questo file in /usr/share/cups/model/
Spostiamo lo script "winp" in /usr/lib/cups/backend/ diamogli i permessi di esecuzione e cambiamo il grupp con:
chmod -x /usr/lib/cups/backend/winp
chgrp lp /var/spool/winp
Creiamo la directory /var/spool/winp e cambiamo i permessi con:
mkdir /var/spool/winp
chmod g+w /var/spool/winp
Riavviamo CUPS con:
service cups restart
Siamo quasi alla fine.. Configuriamo una nuova stampante che utilizzerà come ppd il file adist5.ppd copiato in precedenza:
lpadmin -p windows_printer -E -v winp://windows_pc/spool -m adist5.ppd
Ora dovrebbe essere tutto ok e lanciando una stampa da linux verrà creato un file in /var/spool/winp, traferito in //windows-print/spool, rinominato e a quel punto stampato tramite il software dirwatch.py... Per qualsiasi problema da linux è possibile vedere i log che trovate in /var/log/cups/ e /tmp/winp.log
Fonte:
http://justin.yackoski.name/winp/