[Samba-it] quota su stampante pdf

Vincenzo Agosto netstat at email.it
Thu Jun 23 13:23:01 MDT 2005


Luca Curatola wrote:
>> momento ho risolto con uno script bash che va a leggere il numero di
>> pagine da stampare, le mette in un db e se giornalmente il numero di
>> stampe supera una determinata quota allora elimina la coda altrimenti
>> stampa. Se può essere d'aiuto a qualcuno lo posto in lista.
>> ciao
>> V.
> 
> 
> Posta posta... :)
> 
Ok, ecco lo script, è un pò spartano, ha un solo problema... se l'utente
stampa x copie di un file di y pagine viene sempre contato come y stampe
effettuate e non come x*y stampe (se qualcuno sa risolvere il problema
ben venga). Lo script inoltre scrive i dati in un DB che mi servirà per
generare i grafici con php.
README:
Sul server linux è installato Samba come PDC, cups e cups-pdf
Cups è configurato per stampare direttamente sulla stampante (nel mio
caso una Samsung ML-2550 di rete)
Inoltre cups è configurato per stampare su pdf tramite cups-pdf.
La sezione di samba per la condivisione della stampante pdf è la seguente
[pdf]
        comment = PDF creator
        path = /var/tmp
        create mask = 0644
        printable = Yes
I client sono configurati per stampare sulla share [pdf] e quindi
invieranno in /var/tmp vari file dal nome smbprn.xxxxxxxx.yyyyyyy
Da tale file si può recuperare username e numero di pagine.
FAQ:
D: Come mai non hai condiviso direttamente la stampante di rete?
R: perche' i client winzozz si inchiodavano quando stampavano da office
pur avendo installato l'ultimo aggiornamento del SO e del pacchetto Office

D: Io non ho office, ma uso openoffice sia sui client win che sui client
linux
R: Allora dimentica tutto e condividi direttamente la stampante reale,
funziona tutto perfettamente, anche dai client windows

SCRIPT:
#!/bin/bash
# effettuo la lista dei file
ls -la /var/tmp/smbprn*  1>/tmp/stat_stampa 2>/dev/null
stampe=`cat /tmp/stat_stampa | awk {'print $9'}`
# Effettuo il ciclo sulle stampe
if [ -s /tmp/stat_stampa ]; then
  for i in $stampe; do
        # recupero il nome utente
	utente=`cat $i | grep For: | awk {'print $2'}`
# questo è un ciclo strano lo so, sicuramente c'è un metodo
#migliore, serve per eliminare il ctrl-M a fine riga
#altrimenti non mi funziona l'insert nel DB
	lunghezza=$((${#utente} - 1))
	echo `expr substr $utente 1 $lunghezza` > usname
	utente=`cat usname`
# recupero il numero di pagine
	pagine=`tail -5 $i  | grep Pages | cut -d: -f2`
# recupero il giorno, mese e anno
	giorno=`cat $i | grep Date | awk {'print $2'} | cut -d\/ -f2`
        mese=`cat $i | grep Date | awk {'print $2'} | cut -d\/ -f1`
        anno=`cat $i | grep Date | awk {'print $2'} | cut -d\/ -f3`
        data=$anno-$mese-$giorno
 # Inserisco username, num pagine e data nel DB, anche qua si puo'
 # fare di meglio ma come prima release va pure bene
MYSQLPASSWORD="<qua metti la password di mysql>";
  QUERY1=`mysql -u root -D utenti -v -v -e "select sum(tot) as pag from
stampe where data='$anno-$mese-$giorno' and cod='$utente';"
--password=$MYSQLPASSWORD`
  echo $QUERY1 | grep '1 row' > /tmp/risultato_query.txt
  parziale=`cat /tmp/risultato_query.txt | awk {'print $14'}`
# ogni utente puo' stampare max 50 pg al giorno
  if [ "$parziale" -gt "50" ]; then
     echo "Quota superata"
     rm $i
     exit 1
  else
     cat $i | lp  -d Samsung 1>/dev/null 2>/dev/null
     rm $i
     QUERY=`mysql -u root -D utenti -v -v -e "insert into stampe
values('NULL','$anno-$mese-$giorno','$utente',$pagine)"`
  fi
done
rm -rf /var/spool/cups/c*
fi

Ciao
V.

_______________________________________________
> Samba-it mailing list
> Samba-it at xsec.it
> https://lists.xsec.it/mailman/listinfo/samba-it
> 




More information about the samba-it mailing list