7. Come funziona

Per far funzionare correttamente il sistema di stampa, occorre prima capire come funziona il software di spool. Tutti i sistemi funzionano essenzialmente allo stesso modo, benché l'ordine esatto possa variare leggermente, e alcuni sistemi saltano uno o due passi:

Figura 10. Illustrazione di spool

  1. L'utente invia un lavoro di stampa con le opzioni selezionate. I dati del lavoro di stampa sono solitamente, ma non sempre, Postscript.

  2. Il sistema di spool copia il lavoro di stampa e le opzioni lungo la rete verso la stampante.

  3. Il sistema di spool aspetta che la stampante sia disponibile.

  4. Il sistema di spool applica le opzioni selezionate dall'utente al lavoro di stampa, e ne traduce i dati nel linguaggio nativo della stampante, che solitamente non è Postscript. Questo passaggio si chiama filtraggio; la maggior parte del lavoro per far funzionare il tutto sta nel far funzionare il filtraggio giusto.

  5. Il lavoro è finito. A questo punto solitamente il sistema di spool si occupa di fare un po' di pulizia. Se si fosse verificato qualche errore, lo spooler lo notificherà in qualche modo all'utente (per esempio, via mail).

7.1. CUPS

Per stampare con CUPS, si possono usare sia comandi BSD (si veda la Sezione 5.3.1) che System V, rendendone l'uso molto semplice per chi ha precedenti esperienze con altri sistemi.

Figura 11. Illustrazione semplificata di CUPS

Inizialmente a CUPS mancava un backend LPD, che ovviamente fu aggiunto velocemente. Attualmente sono disponibili backend almeno per IPP, LPD, SMB, JetDirect, USB, Netatalk, per stampanti su porta parallela e seriali. Se ne possono trovare altri sulla rete o si possono scrivere da sé.

C'è solo una manciata di driver incorporati che permettono di stampare con molte stampanti, ma probabilmente non alla massima risoluzione possibile. Si può aggiungere a CUPS un file PPD per un driver Postscript, ma se si vuole stampare alla miglior qualità con una nuova stampante HP Deskjet non si avrà fortuna: per questo viene in aiuto Foomatic, che può essere usato in combinazione con CUPS. Foomatic usa un filtro di CUPS chiamato foomatic-rip per fare il suo lavoro. Foomatic-rip usa file PPD per descrivere le capacità della stampante, perfino per stampanti non Postscript. CUPS + Foomatic è attualmente il metodo di stampa raccomandato: alcune distribuzioni Linux già lo usano, e questo numero è destinato a salire.

Lo scheduler di CUPS non solo accetta lavori di stampa, è anche un'interfaccia di amministrazione via web. Attualmente si possono aggiungere/cancellare stampanti, cancellare lavori di stampa, far partire/fermare stampanti. In una prossima release sarà possibile anche spostare i lavori di stampa.

7.2. LPD

Lpd sta per Line Printer Daemon, e si riferisce, a seconda del contesto, sia al demone che all'intera raccolta di programmi responsabili dello spooling di stampa. Questi sono:

lpd

Il demone di spooling. Una sua istanza controlla l'intero sistema, e un'altra è attiva per ciascuna stampante in fase di stampa.

lpr

Il comando utente per la stampa. Lpr contatta lpd ed inserisce un nuovo lavoro di stampa nello spool.

lpq

Elenca i lavori di stampa presenti in una coda.

lpc

Il comando di controllo di lpd. Con lpc si possono attivare, disattivare, riordinare, ecc. le code di stampa.

lprm

lprm permette di rimuovere un lavoro di stampa dalla coda.

Quindi, come si mette insieme il tutto? Questo è quello che succede:

  1. Quando il sistema viene avviato viene eseguito lpd, che resta in attesa di connessioni e si occupa di gestire le code di stampa.

  2. L'utente invia un lavoro di stampa con il comando lpr o, in alternativa, con un front-end come GPR, PDQ, ecc. Lpr contatta lpd attraverso la rete e gli fornisce sia il file dell'utente (che contiene i dati da stampare) che un file di controllo (che contiene le opzioni dell'utente).

  3. Quando la stampante è disponibile, l'istanza principale di lpd produce un'istanza figlio lpd che si occupa del lavoro di stampa.

  4. L'istanza figlio lpd esegue il filtro/i adatto per quel lavoro di stampa (come specificato dall'attributo if del file /etc/printcap) ed invia i dati risultanti alla stampante.

Il sistema lp era stato progettato quando le stampanti erano per lo più stampanti di linea, cioè adatte a stampare principalmente in ascii piano. È possibile andare incontro a tutte le necessità di stampa odierne con lpd usando diverse opzioni nel filtro if (più o meno; molti altri sistemi fanno un lavoro migliore).

Ci sono molti programmi utili per scrivere filtri LPD, tra i quali:

gs

Ghostscript è un interprete Postscript basato sugli host (come dire un Raster Image Processor o RIP). Accetta Postscript in input, e può produrre in output dati in diversi linguaggi o formati grafici. Ghostscript verrà trattato in la Sezione 10.

ppdfilt

ppdfilt è la versione indipendente di un componente CUPS. Si occupa di filtrare Postscript, eseguendo alcune trasformazioni di base (pagine per foglio, copie multiple, ecc.) e aggiungendovi le opzioni dichiarate dall'utente secondo un file PPD (Postscript Printer Definition) solitamente incluso con le stampanti Postscript.

ppdfilt funziona meglio se usato insieme ad un sistema LPD in grado di accettare opzioni (come GNUlpr, o LPRng) e con un filtro che trasformi le opzioni fornite dagli utenti nel comando ppdfilt equivalente. VA Linux e HP forniscono un pacchetto con un filtro rhs modificato che fa esattamente questo; produce buoni risultati se si possiede una stampante Postscript. Si veda la Sezione 8.2.2 per informazioni su questo sistema.

ps2ps

ps2ps è una utilità inclusa con Ghostscript. Filtra Postscript in un Postscript maggiormente razionalizzato, se possibile ad un livello di linguaggio più basso. È utile se si possiede una vecchia stampante Postscript; il software più moderno produce Postscript moderno.

mpage

mpage è un'utilità che accetta testo o Postscript e genera output composto da diverse immagini di pagine su ogni foglio. Attualmente ci sono diversi programmi che lo fanno, inclusi enscript, nenscript e a2ps .

a2ps

a2ps, che sta per any-to-ps, è un programma che accetta diversi tipi di file e li converte in Postscript per la stampa.