Capitolo 6. Stampa

Sommario
6.1. Attivare il demone di stampa
6.2. Configurare /etc/printcap
6.3. Configurazione per Ghostscript
6.4. Comandi utili per la stampa
6.5. Stampa in remoto

In questo capitolo viene descritta una semplice configurazione per una stampante utilizzando, a titolo di esempio, una HP Deskjet 690C collegata alla prima porta parallela. In un primo momento viene configurata la stampa di documenti di testo e poi la stampa di documenti PostScript con il programma Ghostscript.

6.1. Attivare il demone di stampa

Al termine dell'installazione non è ancora possibile stampare perchè il demone di stampa non è abilitato. Per attivarlo è sufficiente aggiungere la seguente linea al file /etc/rc.conf

lpd=YES    

Per controllare se lpd è attivo, dare il seguente comando:

# ps ax | grep lpd
  179 ??  Is     0:00.01 lpd     

Se il comando precedente non dà luogo a output, vuol dire che lpd non è attivo, nel qual caso lo si può avviare manualmente con il seguente comando:

# lpd -s    

Passiamo ora a effettuare una prova di stampa, usando il programma lptest. Per esempio:

# lptest 20 10 > /dev/lpt0    

L'output dovrebbe presentarsi sotto forma di righe incolonnate. Se invece si ottiene un effetto "a scalini", probabilmente la stampante è configurata per utilizzare un carattere <CR> (carriage return, ASCII 13) per tornare a inizio linea e un successivo carattere <LF> (line feed, ASCII 10) per avanzare di una linea mentre NetBSD (e UNIX in generale) usa solo il carattere <LF>. Questo problema si può sistemare:

6.2. Configurare /etc/printcap

In questa sezione viene spiegato come configurare la stampante di esempio per la stampa di documenti di testo.

Per prima cosa bisogna modificare /etc/printcap, creando una descrizione per la stampante usando l'identificativo standard lp.

Il formato del file e le opzioni sono descritte in dettaglio in printcap(5). L'unica cosa da segnalare è che, per risolvere il problema degli "scalini" è stato inserito un puntatore a un filtro con l'istruzione:

if=/usr/local/libexec/lpfilter    

Driver di stampa: nell'Esempio 6-1 viene usato il dispositivo lpa# che è il driver "polled" della stampante al posto di lpd#, che è il driver standard a interrupt. Alcune stampanti non gestiscono correttamente gli interrupt, con la conseguenza che impiegano ore per stampare una pagina; con questo tipo di stampanti (e la HP Deskjet 690C è una di quelle) basta usare il driver polled (si noti che è anche possibile compilare un kernel indicando che lpd deve funzionare in modo polled).

Poi bisogna creare le directory di spool specificate con l'opzione sd, che verranno usate da lpd per accumulare i dati.

# cd /var/spool/lpd
# mkdir lp
# chown daemon:daemon lp
# chmod 770 lp
    

A questo punto bisogna solo creare il filtro di stampa lpfilter. Il suo unico compito è configurare la stampante, eliminando il già citato problema degli scalini, prima di inviare il testo. Per la Deskjet 690C la sequenza da inviare è "ESC &k2G". Dopo aver creato il filtro bisogna rendelo eseguibile.

# cd /usr/local/libexec
# chmod 755 lpfilter*
    

Adesso si può provare a eseguire nuovamente il programma lptest, questa volta sfruttando lo spooler lpd.

# lptest 20 10 | lpr -h    

lpr è un programma di stampa che utilizza lo spooler per inviare i dati alla stampante (l'opzione -h serve a eliminare la stampa della pagina di intestazione).

Se tutto è andato bene gli scalini sono stati eliminati. Questo non è l'unico metodo per eliminare il problema degli scalini: si possono utilizzare molti tipi di filtri, anche programmi scritti in C, ma questa soluzione ha il pregio di essere molto semplice.

6.3. Configurazione per Ghostscript

Adesso che la stampa di base funziona, si può pensare a configurare la stampa di file in formato PostScript. Poiché la stampante utilizzata nell'esempio non supporta la stampa di file PostScript in nativo, bisogna usare un programma che converta il PostScript in un formato comprensibile per la stampante: questo programma è Ghostscript, che si può installare dalla collezione dei package (vedere Capitolo 8). In questa sezione verrà mostrato un esempio di configurazione per l'uso di Ghostscript con la stampante HP Deskjet 690C. Nell'esempio viene creato un secondo identificativo per la stampante; questo nuovo nome utilizza un filtro diverso, in grado di chiamare Ghostscript per la stampa dei file PostScript. Pertanto, i documenti di testo andranno stampati sulla stampante lp mentre quelli PostScript andranno sulla lps.

Come in molte altre situazioni, la soluzione proposta non è l'unica possibile. Per esempio, si potrebbe usare un unico filtro di stampa in grado di riconoscere il tipo di file che viene stampato e di agire di conseguenza. Con questo approccio basta definire un'unica stampante, un'unica directory di spool e un unico filtro, a prezzo di una maggiore complessità del filtro stesso. Infine, esistono programmi in grado di installare filtri "intelligenti" e di semplificare molto la fase di configurazione; si veda, per esempio, magicfilter nella collezione dei package.

Il file /etc/printcap si trasforma così:

Si noti, in particolare, l'opzione mx#0, che elimina le limitazioni alla massima dimensione del file di output: questa opzione è necessaria perché i file Postscript sono solitamente di notevoli dimensioni. Inoltre l'opzione if fa riferimento al nuovo filtro, che si chiama lpfilter-ps.

Adesso sul sistema possono essere utilizzati due nomi di stampante, lp e ps, che in realtà fanno riferimento a una stessa stampante fisica ma utilizzano filtri e directory diverse. Per stampare un file Postscript, naturalmente, non basta definire una voce in /etc/printcap: è necessario anche installare il programma Ghostscript.

Rimangono da creare la directory di spool e il filtro.

# cd /var/spool/lpd
# mkdir ps
# chown daemon:daemon ps
# chmod 770 ps
    

Il filtro per la stampa in formato postscript è più elaborato; il file da stampare viene dato in pasto all'interprete che lo trasforma in una sequenza di comandi adatta alla stampante. In questo modo si è trasformata una stampante economica a getto di inchiostro in una potente stampante Postscript. Per una descrizione dei comandi del filtro si veda la documentazione di Ghostscript. La chiave di volta del processo di stampa è la scelta del driver di stampante usato da Ghostscript, che in questo esempio è cdj550.

6.4. Comandi utili per la stampa

In questa sezione vengono presentati alcuni comandi utili per la gestione delle stampe tipici degli ambienti BSD. Oltre ai già citati lpr e lpd, abbiamo:

6.5. Stampa in remoto

È possibile configurare il sistema di stampa in modo tale da poter stampare su una stampante collegata a un host remoto. Supponiamo, per esempio, di lavorare sull'host wotan e di voler stampare sulla stampante collegata all'host loge. Il file /etc/printcap di loge sia quello dell'Esempio 6-3. Da wotan quindi si potrà stampare anche file Postscript sfruttando Ghostscript su loge.

La prima operazione da compiere è di abilitare su loge le stampe provenienti dall'host wotan. Per far questo bisogna inserire il nome dell'host wotan nel file /etc/hosts.lpd di loge. Il formato del file è molto semplice: su ogni riga compare il nome di un host da abilitare.

Poi bisogna configurare /etc/printcap su wotan in modo da inviare i lavori di stampa a loge. Per esempio:

lp|line printer on loge:\
	:lp=:sd=/var/spool/lpd/lp:lf=/var/log/lp-errs:\
	:rm=loge:rp=lp

ps|Ghostscript driver on loge:\
	:lp=:sd=/var/spool/lpd/lp:lf=/var/log/lp-errs:\
	:mx#0:\
	:rm=loge:rp=ps    

Vi sono quattro differenze tra questa configurazione e quella dell'Esempio 6-3.

  1. La definizione di "lp" è vuota.

  2. La voce "rm" definisce il nome dell'host a cui è collegata la stampante

  3. La voce "rp" specifica il nome della stampante remota sull'host remoto.

  4. Non è necessario specificare filtri di input perché vengono utilizzati quelli definiti su loge.

Una volta effettuate le operazioni precedenti i lavori di stampa di wotan vengono inviati automaticamente all'host loge.