The Printing HOWTO

Grant Taylor

gtaylor+pht@picante.com

Dirk Allaert

dirk.allaert@reachout.be

v1.8, 2003-06-22

Questo è il Printing HOWTO, una raccolta di informazioni su come generare, visualizzare un’anteprima, stampare e spedire via fax qualunque documento sotto GNU/Linux. Quasi tutte le informazioni sono ugualmente applicabili per quegli utenti di software libero che usino altri sistemi operativi Unix-like. Traduzione a cura di Elisabetta Galli, <lab (at) kkk dot it>.

Sommario

1. Introduzione ..............................................................................................................................................................5
1.1. Terminologia..................................................................................................................................................5
1.2. Storia delle versioni........................................................................................................................................6
1.3. Copyright........................................................................................................................................................6
2. Partenza veloce ..........................................................................................................................................................7
2.1. Dove trovare aiuto..........................................................................................................................................7
3. Come stampare ..........................................................................................................................................................7
3.1. Con BSD LPD e il comando lpr.....................................................................................................................7
3.2. Con LPD System V e il comando lp..............................................................................................................8
3.3. Con CUPS......................................................................................................................................................8
3.4. Strumenti a interfaccia grafica per la stampa.................................................................................................8
3.4.1. KDEPrint...........................................................................................................................................8
3.4.2. XPP..................................................................................................................................................10
3.4.3. GPR..................................................................................................................................................10
4. I dispositivi di stampa del kernel ...........................................................................................................................11
4.1. Il dispositivo lp (kernel <=2.1.32)................................................................................................................12
4.2. Il dispositivo parport (kernel >= 2.1.33) ......................................................................................................13
4.3. Dispositivi seriali..........................................................................................................................................13
4.4. Dispositivi USB............................................................................................................................................14
4.4.1. USB 1.1............................................................................................................................................14

4.4.2. USB 2.0............................................................................................................................................14
4.4.3. Suggerimenti....................................................................................................................................14
5. Stampanti supportate .............................................................................................................................................15
5.1. Postscript......................................................................................................................................................15
5.2. Non Postscript..............................................................................................................................................16
5.3. Quali stampanti funzionano?........................................................................................................................16
5.3.1. Lista di stampanti compatibili.........................................................................................................17
5.4. Come comprare una stampante....................................................................................................................32
6. Software di spool .....................................................................................................................................................33
6.1. CUPS............................................................................................................................................................34
6.2. LPD..............................................................................................................................................................36
6.3. LPRng...........................................................................................................................................................36
6.4. PPR...............................................................................................................................................................36
6.5. Altri..............................................................................................................................................................37
6.5.1. PDQ.................................................................................................................................................37
6.5.2. GNUlpr............................................................................................................................................37
6.5.3. CPS..................................................................................................................................................37
6.5.4. CEPS................................................................................................................................................37
7. Come funziona .........................................................................................................................................................37
7.1. CUPS............................................................................................................................................................38
7.2. LPD..............................................................................................................................................................39
8. Come configurare il tutto .......................................................................................................................................40
8.1. Configurare CUPS........................................................................................................................................41
8.2. Configurare LPD..........................................................................................................................................41
8.2.1. Configurazione di base di LPD........................................................................................................41
8.2.2. LPD per stampanti PostScript..........................................................................................................43
8.2.2.1. Come funziona....................................................................................................................44
8.2.2.2. Come ottenere ed installare i pacchetti...............................................................................44
8.2.2.3. Controllo delle opzioni Postscript.......................................................................................44
8.2.3. Permessi sui file...............................................................................................................................45
8.3. Installazioni su larga scala............................................................................................................................46
8.4. Autenticazione..............................................................................................................................................47
9. Soluzioni commerciali .............................................................................................................................................48
9.1. Red Hat.........................................................................................................................................................48
9.2. Debian..........................................................................................................................................................48
9.3. SuSE.............................................................................................................................................................49
9.4. Caldera.........................................................................................................................................................49
9.5. Corel.............................................................................................................................................................49
9.6. Mandrake......................................................................................................................................................50
9.7. Slackware.....................................................................................................................................................50
9.8. Altre distribuzioni.........................................................................................................................................50

10. Ghostscript .............................................................................................................................................................50
10.1. Richiamare Ghostscript..............................................................................................................................51
10.2. Regolazione dell’output di Ghostscript......................................................................................................51
10.2.1. Dimensioni e posizione dell’output...............................................................................................51
10.2.2. Gamma, dotsize, etc.......................................................................................................................51
10.2.3. Stampa a colori con Ghostscript....................................................................................................52
11. Reti .........................................................................................................................................................................52
11.1. Stampare su un host Unix/lpd....................................................................................................................53
11.1.1. Con lpd .........................................................................................................................................53
11.1.2. Con rlpr .......................................................................................................................................53
11.2. Stampare su una stampante Windows o Samba.........................................................................................53
11.2.1. Da LPD..........................................................................................................................................54
11.3. Stampare su una stampante NetWare.........................................................................................................54
11.3.1. Da LPD..........................................................................................................................................54
11.4. Stampare su una stampante EtherTalk (Apple)..........................................................................................55
11.5. Stampare su una stampante di rete.............................................................................................................55
11.5.1. Su dispositivi AppSocket...............................................................................................................56
11.6. Esecuzione di if per una stampante remota con il vecchio LPD ..............................................................56
11.7. Da Windows...............................................................................................................................................57
11.8. Da Apple....................................................................................................................................................57
11.9. Da Netware.................................................................................................................................................57
11.10. Amministrazione di stampanti di rete......................................................................................................57
11.10.1. npadmin ......................................................................................................................................57
11.10.2. Altri strumenti SNMP..................................................................................................................58
12. Stampanti solo Windows ......................................................................................................................................58
12.1. Redirezionatore Ghostscript per Windows.................................................................................................58
12.2. Stampanti HP per Windows.......................................................................................................................59
12.3. Stampanti Lexmark per Windows..............................................................................................................59
13. Come stampare su un fax .....................................................................................................................................59
13.1. Usando un faxmodem.................................................................................................................................59
13.2. Usando il servizio di stampa remota..........................................................................................................59
13.3. Servizi di invio fax commerciali................................................................................................................60
14. Come generare qualcosa che valga la pena stampare .......................................................................................60
14.1. Linguaggi di markup..................................................................................................................................60
14.2. Elaboratori di testo WYSIWYG................................................................................................................62
15. Stampare fotografie ...............................................................................................................................................63
15.1. Ghostscript e le fotografie..........................................................................................................................63
15.2. Carta...........................................................................................................................................................64
15.3. Impostazioni della stampante.....................................................................................................................64
15.4. Durata della stampa....................................................................................................................................64
15.5. Software di tipo shareware e commerciale.................................................................................................65
16. Anteprima su schermo di immagini stampabili .................................................................................................65
16.1. PostScript...................................................................................................................................................65
16.2. TeX dvi.......................................................................................................................................................65
16.3. Adobe PDF.................................................................................................................................................65

17. Stampanti seriali con lpd ......................................................................................................................................66
17.1. Configurazione di printcap.........................................................................................................................66
17.2. Stampanti seriali antiquate che perdono caratteri......................................................................................67
18. Cosa manca? ..........................................................................................................................................................67
18.1. Integrazione dei programmi.......................................................................................................................67
18.2. Tipi di carattere..........................................................................................................................................67
18.3. Driver..........................................................................................................................................................67
19. Ringraziamenti ......................................................................................................................................................68
A. GNU Free Documentation License .......................................................................................................................68
A.1. PREAMBLE................................................................................................................................................68
A.2. APPLICABILITY AND DEFINITIONS....................................................................................................69
A.3. VERBATIM COPYING..............................................................................................................................70
A.4. COPYING IN QUANTITY.........................................................................................................................70
A.5. MODIFICATIONS......................................................................................................................................70
A.6. COMBINING DOCUMENTS....................................................................................................................72
A.7. COLLECTIONS OF DOCUMENTS..........................................................................................................72
A.8. AGGREGATION WITH INDEPENDENT WORKS.................................................................................72
A.9. TRANSLATION.........................................................................................................................................73
A.10. TERMINATION........................................................................................................................................73
A.11. FUTURE REVISIONS OF THIS LICENSE............................................................................................73
A.12. ADDENDUM: How to use this License for your documents...................................................................73

1. Introduzione

Il Printing HOWTO contiene tutto ciò che serve sapere per configurare il servizio di stampa di una GNU/Linux box. Il destino ha voluto che il tutto fosse leggermente più complicato rispetto al sistema punta-e-clicca di Microsoft ed Apple, ma anche più flessibile e certamente più facile da amministrare per reti estese.

Questo documento è strutturato in maniera tale da permettere alla maggior parte degli utenti di leggere solo la prima metà. La maggior parte delle informazioni più oscure e variabili a seconda delle situazioni si trovano nella seconda metà, e sono facilmente rintracciabili nell’indice generale, considerando che alcune informazioni necessarie per molti utenti si trovano nelle sezioni 10 o 11.

Chi trovasse utile questo documento o il sito linuxprinting.org (http://www.linuxprinting.org/), consideri la possibilità di comprare qualcosa (cartucce, per esempio) tramite i link di riferimento sul sito; tali acquisti sosterranno questo sforzo.

Il sito web linuxprinting.org (http://www.linuxprinting.org/) è il posto migliore dove trovare l’ultima versione di questo documento (NdT: in lingua inglese); ovviamente viene distribuito anche da tldp.org (http://www.tldp.org), e dal vostro amichevole mirror LDP.

1.1. Terminologia

Si cercherà di usare una terminologia universale in tutto il documento, così che gli utenti di tutti i sistemi liberi Unix-like, e perfino gli utilizzatori di software libero su sistemi non Unix-like, possano beneficiarne. Sfortunatamente esistono molti termini utili ma ambigui e molti termini difficili ma non ambigui, quindi, per chiarezza, qui si può trovare un rapido glossario:

Unix

Unix è un sistema operativo sviluppato presso i laboratori Bell da svariati ricercatori. Diversi sistemi operativi, in gran parte commerciali, sono basati su questo codice e sono compresi nel nome Unix.

Un*x

Un*x è una parola difficile usata per fare riferimento ad ogni sistema operativo Unix-like. Un sistema operativo Unixlike fornisce, come API nativa, qualcosa di simile all’interfaccia di programmazione POSIX. Gnu/Linux, FreeBSD, Solaris, AIX, e perfino sistemi con scopi speciali come Lynx e QNX sono tutti Un*x.

Linux

Linux unisce un kernel Unixlike e un piccolo assortimento di software a corollario scritto da Linus Torvalds e da centinaia di altri programmatori. È il fondamento dei sistemi operativi Un*x più usati.

GNU

Il progetto GNU (GNU’s Not Unix) si sforza da molto tempo di sviluppare un sistema operativo Unixlike interamente libero. Il progetto GNU, per molti versi, è il padre della maggior parte del software libero moderno.

GNU/Linux

Un sistema operativo GNU/Linux comprende il kernel Linux, i suoi programmi periferici e l’ambiente GNU di runtime completo di librerie, utilità, software per l’utente, etc. Red Hat, Debian, Caldera, SuSE, TurboLinux, e altre società simili sono tutti fornitori commerciali di sistemi GNU/Linux completi.

The Printing HOWTO

1.2. Storia delle versioni

Ci sono state diverse generazioni di questo Printing HOWTO. La sua storia può essere riassunta così:

1. Grant Taylor scrisse il Printing HOWTO nel 1992 in risposta alle numerose domande inerenti la stampa poste su comp.os.linux. Ciò anticipò il progetto dell’HOWTO di alcuni mesi, e fu pertanto il primo documento ad essere definito un "howto". Questa edizione era in ASCII piano.

2. Dopo essere entrato a far parte del progetto HOWTO, il Printing-HOWTO è stato unito ad una FAQ su Lpd di Brian McCauley <B.A.McCauley@bham.ac.uk>; per circa due anni il PHT è stato sviluppato in collaborazione. Ad un certo punto è stato incorporato anche il lavoro di Karl Auer <Karl.Auer@anu.edu.au>. Questa generazione del PHT era in TexInfo e disponibile in PS, HTML, ASCII ed Info.

3. Dopo aver abbandonato il PHT per oltre un anno, ed aver cercato inutilmente di convincere qualcun altro ad occuparsene, è stata scritta questa versione in SGML, usando il LinuxDoc DTD ed il pacchetto SGML-Tools-1. A partire dalla versione 3.27, è stato incorporato il riassunto di un database di stampanti complementare; in precedenza non c’era mai stata una lista di stampanti compatibili in questo HOWTO.

4. A metà Gennaio del 2000, Grant scoprì lo "spooler" di stampa di PDQ. Il meccanismo di stampa messo a disposizione da PDQ era così migliorato rispetto a quello di lpd che Grant passò diverse ore giocandoci, riscrisse parti di questo HOWTO e fece balzare a 4 il numero di versione del documento.

5. A metà del 2000, Grant spostò il suo sito web su www.linuxprinting.org, e cominciò ad mettere a disposizione strumenti di configurazione più potenti. Inoltre convertì l’HOWTO in docBook, e iniziò la trattazione di CUPS, LPRng e GPR/libppd.

6. All’inizio del 2001, Grant iniziò ad usare la GNU Free Documentation License, che gli sembrò abbastanza adatta. Cominciò anche a cercare di chiarire cos’è e cosa non è specifico di Linux; ci sono diversi kernel liberi Unixlike in giro, e tutti usano lo stesso software per la stampa.

7. All’inizio del 2003, dopo aver sentito una presentazione di Till Kampeter al FOSDEM, io (Dirk) decisi di aggiornare questo HOWTO. Da quando Grant lo modificò l’ultima volta, CUPS è diventato più maturo e molto più popolare.

1.3. Copyright

Copyright (c) 1992-2001 Grant Taylor.

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in Appendice A.

Nota del traduttore: qui di seguito trovate la traduzione del paragrafo precedente, l’unica licenza che ha valore legale resta l’originale inglese.

Copyright 1992-2001 di Grant Taylor.

È concesso il permesso di copiare, distribuire e/o modificare questo documento nei termini di cui alla licenza GNU Free Documentation, versione 1.1 o qualsiasi versione successiva pubblicata dalla Free Software Foundation; senza i vincoli sulle sezioni invarianti, sulla prima di copertina e sull’ultima di copertina. Una copia della licenza è inclusa nella Appendice A.

2. Partenza veloce

Il modo più veloce per iniziare è semplicemente usare gli strumenti di configurazione forniti dal venditore. In questo modo dovrebbe essere facile ottenere una configurazione di base, assumendo che in quegli strumenti sia incluso il supporto per il vostro driver, e che il venditore abbia incluso il driver per la vostra stampante. Si possono trovare informazioni sugli strumenti di configurazione offerti dai venditori in la Sezione 9.

Se lo strumento del venditore non funziona, si dovrebbe verificare che la stampante sia elencata tra quelle presunte funzionanti, consultando sia la lista di stampanti compatibili in la Sezione 5.3.1che la versione online qui descritta.

Se la stampante è indicata come funzionante con un certo driver si controlli di averlo, altrimenti lo si installi. Solitamente si sarà in grado di trovare un pacchetto scritto per Ghostscript che includa nuovo codice e driver assortiti di terze parti. In caso contrario, se ne può compilare uno; il processo non è banale, ma è ben documentato. Si veda la Sezione 10 per maggiori informazioni su Ghostscript.

Dopo aver installato il driver adatto, si tenti di nuovo di configurare la stampante usando lo strumento del venditore. Se non funziona, si selezioni uno strumento di terze parti adatto tra quelli descritti in la Sezione 8. Se anche questo non funziona, se ne dovrà costruire uno proprio; si veda sempre la Sezione 8.

Se si è ancora bloccati, sarà necessario dare la caccia al problema. Probabilmente la cosa migliore, prima di tutto, è continuare a leggere questo documento, per capire come dovrebbero funzionare le cose: ci si troverà poi in una posizione migliore per effettuare un debug.

2.1. Dove trovare aiuto

I newsgroup di Usenet comp.os.linux.hardware, comp.os.linux.setup e comp.periphs.printers contengono la loro parte di domande generiche sulla stampa. Si tratta di newsgroup molto trafficati nei quali si potrà sicuramente trovare una risposta; controllare anche gli archivi dei gruppi di Google. Si può provare anche sui newsgroup linuxprinting.foo; sono disponibili sia come forum via web che NNTP; si veda il sito web.

Rovistate anche il web per trovare le risposte. LinuxPrinting.org (http://www.linuxprinting.org/) è un eccellente punto di partenza; da qui sono raggiungibili altri siti web e progetti.

Si può trovare ulteriore aiuto provando sui newsgroup, sulle mailing list, tramite il supporto del fornitore e così via. L’autore è contattabile tramite il forum di discussione su LinuxPrinting.org (http://www.linuxprinting.org/); questo darà la possibilità ad altri utenti di rispondere, e permetterà di archiviare pubblicamente il vostro problema ed ogni soluzione per il prossimo utente in difficoltà.

3. Come stampare

Per la verità il comando usato per stampare dipende da quale software di spooling si usa.

3.1. Con BSD LPD e il comando lpr

Se lpd è già stato configurato per stampare da voi, o se l’amministratore di sistema o il venditore l’hanno fatto per voi, tutto quello che si deve fare è imparare ad usare il comando lpr. Il Printing Usage HOWTO (http://www.tldp.org/HOWTO/Printing-Usage-HOWTO.html) tratta di questo e di qualche altro comando di manipolazione della coda di stampa. Oppure si legga la pagina di manuale di lpr(1).

In poche parole, il nome della coda di stampa si specifica con -P, seguito dal nome di un file per stamparlo, oppure niente per stampare dallo standard input. Tradizionalmente le opzioni del driver non sono controllabili da lpr, ma vari sistemi accettano certe opzioni tramite -o, -Z, o -J.

Esempio 1. lpr

lpr /etc/hosts
lpr -J "my hosts file" /etc/hosts
lpr -P mylaserjet /etc/services

3.2. Con LPD System V e il comando lp

Sono due i set di comandi che si possono incontrare avendo a che fare con parecchie versioni di Unix. Il sistema di stampa LPD basato su BSD (*BSD, Linux) usa lpr (per stampare), lpq (per vedere la coda di stampa), lprm (per cancellare i lavori). I sistemi basati su System V dall’altra parte usano lp (per stampare), lpstat (per vedere la coda di stampa), cancel (per cancellare i lavori). Alcuni sistemi Unix di tipo System V sono Solaris, SCO ed altri.

Sui sistemi SYSV, si può ovviamente consultare la pagina di manuale del comando lp. Per specificare una coda si usa l’opzione -d con il nome di un file per stamparlo, o niente per stampare dallo standard input.

Esempio 2. lp

lp /etc/hosts
lp -d mylaserjet /etc/services

3.3. Con CUPS

CUPS mette a disposizione sia l’interfaccia a linea di comando di System V che quella di Berkeley. Ciò significa che si può usare sia lpr che lp per stampare, il che torna molto utile se si hanno già diversi script che usano, per esempio, lp o per chi ha una precedente esperienza con un sistema System V o BSD.

3.4. Strumenti a interfaccia grafica per la stampa

La maggior parte dei sistemi di spool offre soltanto un’interfaccia a linea di comando abbastanza semplice. Piuttosto che usare direttamente lpr, si potrebbe desiderare di usare un’interfaccia utente che generalmente permette di giocherellare con diverse opzioni di stampa (stampante, tipo di carta, fascicolazione, pagine per foglio, ecc.) tramite una forma grafica di facile uso. Alcune possono avere anche altre funzioni.

3.4.1. KDEPrint

KDEPrint permette agli utenti di accedere al sottosistema di stampa (CUPS, LPD, RLPR, LPRng ecc.) attraverso un’interfaccia utente grafica di KDE. Con KDEPrint si può facilmente stampare, si possono amministrare i lavori, le stampanti e il demone di stampa. KDEPrint rimpiazza i precedenti QtCUPS e CUPS, ed è facile da usare sia per gli sviluppatori che per gli utenti. KDEPrint fa parte di KDE già dalla versione 2.2.0 e ha diverse funzioni interessanti.

kprinter è la finestra di dialogo di KDEPrint, e permette di selezionare la stampante di destinazione e di cambiare le opzioni di stampa. Tra le stampanti di destinazione ci sono alcune stampanti virtuali che permettono di inviare la stampa ad email, fax o pdf.

Figura 1. kprinter

Il comando kprinter di KDEPrint può essere usato in ogni applicazione che permetta di configurare il comando di stampa: alcuni esempi sono Mozilla e OpenOffice.

Figura 2. Usare kprinter con Mozilla

Tra le funzioni di KDEPrint c’è anche l’Anteprima di Stampa che può essere selezionata dalla finestra di dialogo Stampa. L’anteprima si ottiene facendo passare il file da stampare attraverso dei filtri che lo rendono visualizzabile sullo schermo usando KGhostView o un’applicazione esterna come gv.

KJobViewer, il Visualizzatore di Lavori di Stampa di KDEPrint permette di vedere, muovere e cancellare lavori di stampa.

Figura 3. KJobViewer Si possono trovare maggiori informazioni su KDEPrint presso http://printing.kde.org/.

3.4.2. XPP

Un’altra buona scelta per CUPS è il programma XPP (http://cups.sourceforge.net/xpp/) (si veda Figura 4). XPP è stato costruito dalla libreria FLTK ed è quindi indipendente dal desktop usato.

Per stampare con XPP, basta far partire il programma xpp specificando un file (o niente, se si sta usando xpp al posto di lpr per stampare dallo standard input) e selezionando una stampante dalla lista di quelle configurate, insieme ad ogni opzione che si vuole applicare scelta dai vari pannelli. Si veda Figura 5 per un pannello di opzioni di esempio con evidenziate le opzioni standard di CUPS.

Se usato con il driver dell’interfaccia di sistema Foomatic, XPP permetterà anche di controllare parametri numerici normalmente non supportati da CUPS, tipicamente cose come la sintonizzazione avanzata dei colori, l’allineamento delle cartucce e così via. Si veda Figura 6 per un esempio.

La stampante selezionata e tutte le opzioni scelte possono essere salvate con il pulsante «Salva impostazioni».

Figura 4. Finestra principale di XPP

Figura 5. Finestra di opzioni di CUPS/XPP

Figura 6. Finestra di opzioni di Foomatic CUPS/XPP

3.4.3. GPR

GPR (http://www.compumetric.com/linux.html), di Thomas Hubbell, usa il codice di CUPS per filtrare lavori di stampa Postscript e offre agli utenti la possibilità di controllare con facilità le opzioni dei lavori di stampa. Alcune opzioni (come le pagine per foglio, la selezione delle pagine, ecc.) sono implementate direttamente da GPR, altre invece dalla stampante o dal filtro del sistema di spool.

GRP lavora con LPD o LPRng, o può essere compilato specificatamente per usare GNUlpr. Se compilato normalmente, usa direttamente la libreria libppd di VA per produrre un file Postscript specifico per la stampa, che verrà poi inviato al comando lpr. Se compilato per GNUlpr, invia un lavoro di stampa Postscript senza modifiche al comando lpr, insieme al set di opzioni specificate. Questa è indiscutibilmente la strada migliore, perché permette a Postscript di essere reindirizzato dallo spooler ad una diversa stampante quando opportuno; sfortunatamente richiede GNUlpr, che non è molto diffuso (anche se è ovviamente banale da installare).

Per usare GPR, prima di tutto si selezioni una stampante (usando il nome indicato nella coda LPD) e si controlli che GPR abbia caricato il file PPD corretto. Se non l’ha fatto, si dovrà specificare il nome del file PPD e le opzioni per la stampante nella finestra di dialogo Configurazione della Stampante (questa finestra si ottiene usando il pulsante Configurazione della Stampante; contiene diverse opzioni per la stampante definite dal PPD).

Dopo aver configurato la stampante, si può stampare specificando il nome del file e selezionando le opzioni appropriate dai pannelli a linguetta «Generale» e «Avanzate». Le opzioni «Generale» sono implementate direttamente da GPR per tutte le stampanti, mentre quelle «Avanzate» sono definite per ogni stampante dal file PPD. Si possono vedere questi pannelli di opzioni in Figura 8 e in Figura 9.

Figura 7. Opzioni principali di GPR

Figura 8. Opzioni comuni di GPR

Figura 9. Opzioni GPR per la stampante

4. I dispositivi di stampa del kernel

Ci sono due driver di dispositivo completamente diversi per la porta parallela; quello usato dipende dalla versione del kernel (che si può scoprire con il comando uname -a). Il driver è cambiato da Linux 2.1.33; essenzialmente tutti i sistemi recenti usano il kernel 2.2 o successivi, quindi probabilmente si vorrà passare alla sezione sul driver parport.

Alcuni dettagli sono uguali per i due tipi di driver. In particolare, molti utenti hanno notato che Linux non riconosce la porta parallela a meno che non venga disabilitata l’opzione "Plug and Play" dal BIOS. (Non è una sorpresa; la storia del PNP dei dispositivi non-PCI con Windows e dintorni è praticamente un disastro).

4.1. Il dispositivo lp (kernel <=2.1.32)

Il kernel di Linux (<=2.1.32), dando per scontato che sia stato compilato o caricato il dispositivo lp (il risultato di cat /proc/devices dovrebbe includere il dispositivo lp), fornisce uno o più dispositivi /dev/lp0, /dev/lp1 e /dev/lp2. Questi NON sono assegnati dinamicamente, ma corrispondono ad uno specifico indirizzo di I/O hardware. Ciò significa che la stampante potrebbe essere lp0 o lp1, a seconda della configurazione hardware del sistema: vanno provati entrambi.

Alcuni utenti riferiscono che la porta lp bidirezionale non viene riconosciuta se si usa un vecchio cavo per stampanti unidirezionale. Si controlli di usare un cavo decente.

Non è possibile eseguire contemporaneamente i driver plip e lp su una data porta (sotto 2.0, in ogni caso). È possibile comunque caricare l’uno o l’altro driver, sia manualmente che automaticamente dal kerneld dei kernel versione 2.x (e le ultime 1.3.x). Configurando adeguatamente gli interrupt e simili, dovrebbe essere possibile eseguire plip su una porta ed lp su un’altra. Qualcuno è riuscito a farlo modificando il codice dei driver; si spera che qualcun altro riesca a farlo direttamente dalla linea di comando.

C’è una piccola utilità chiamata tunelp (http://www.linuxprinting.org/man/tunelp.8.html) con la

quale è possibile, da root, mettere a punto l’uso degli interrupt del dispositivo lp di Linux 2.0, la frequenza dei sondaggi e altri parametri.

Quando il driver lp è compilato nel kernel, si può usare l’opzione lp= per impostare gli interrupt e gli indirizzi di IO:

Quando il driver lp è compilato nel kernel, si può usare la linea di
comando di LILO/LOADLIN per passare al driver gli indirizzi delle porte e gli
interrupt che userà.
Sintassi: lp=port0[,irq0[,port1[,irq1[,port2[,irq2]]]]]
Ad esempio: lp=0x378,0   oppure   lp=0x278,5,0x378,7 **
Si noti che se si usa questa tecnica, si devono specificare *tutte* le porte che
devono essere considerate, non esistono parametri predefiniti. Si può
disabilitare un driver con lp=0.

Quando il driver viene caricato come modulo, è possibile specificare gli indirizzi di I/O e gli interrupt nella linea di comando di insmod (oppure in /etc/conf.modules per influenzare kerneld) usando la solita sintassi. I parametri sono io=port0,port1,port2 e irq= irq0,irq1,irq2. Si consulti la pagina di manuale di insmod (http://www.linuxprinting.org/man/insmod.1.html) per ulteriori informazioni.

**Per chi non riesca a ricordare gli indirizzi standard quando servono, sono quelli del secondo esempio. L’altra porta (lp0) si trova a 0x3bc. Non ho idea di quali interrupt usi.

Il codice sorgente del driver della porta parallela in Linux 2.0 è in /usr/src/linux/drivers/char/lp.c.

4.2. Il dispositivo parport (kernel >= 2.1.33)

A partire dal kernel 2.1.33 (e a disposizione come patch per il kernel 2.0.30), il dispositivo lp è soltanto un client del nuovo dispositivo parport. L’aggiunta del dispositivo parport corregge alcuni dei problemi che assillavano il driver del vecchio dispositivo lp - può condividere la porta con altri driver, assegna dinamicamente le porte parallele disponibili a numeri di dispositivo piuttosto che far rispettare un accordo fisso tra gli indirizzi I/O e i numeri delle porte, e così via.

L’avvento del dispositivo parport ha permesso la prolificazione di nuovi driver per le porte parallele per cose come dischi Zip, dischi e CD-Rom Backpack e così via. Alcuni di questi sono disponibili anche per i kernel 2.0; si cerchi sul web.

La differenza principale che si noterà, per quanto riguarda la stampa, è che i kernel basati su parport assegnano dinamicamente i dispositivi lp alle porte parallele. Così, quello che era lp1 sotto Linux 2.0 potrebbe essere lp0 sotto Linux 2.2: se si effettua un aggiornamento da un kernel con driver lp ad uno con driver parport bisognerà assicurarsi di verificarlo.

I problemi più comuni di questo dispositivo sembrano derivare da una configurazione errata:

La distribuzione

Alcune distribuzioni GNU/Linux non sono equipaggiate con un file /etc/modules.conf (o /etc/conf.modules) ben configurato, così il driver non viene caricato correttamente quando ce n’è bisogno. Con un modutils recente, le righe corrette per modules.conf sembrano essere:

    alias /dev/printers lp               # solo per devfs?
    alias /dev/lp*       lp               # solo per devfs?
    alias parport_lowlevel parport_pc  # mancante in Red Hat 6.0-6.1

Il Bios

Molti Bios trasformano la porta parallela in un dispositivo Plug-and-Play, il che aggiunge inutilmente complessità ad un dispositivo estremamente semplice che è quasi sempre presente; se la porta parallela non è riconosciuta dal driver Linux, si disattivi l’impostazione PnP per la porta parallela ("LPT1" in molti Bios). L’impostazione corretta spesso si chiama "legacy", "ISA", o "0x378", ma probabilmente non "disabilitata".

Si può anche leggere la documentazione parport (http://people.redhat.com/twaugh/parport/html/parportguide.html) dai sorgenti del kernel, o cercare il sito web di parport (http://people.redhat.com/twaugh/parport/).

4.3. Dispositivi seriali

I dispositivi seriali vengono solitamente identificati come /dev/ttyS1 e simili sotto Linux.

L’utilità  stty (http://www.linuxprinting.org/man/stty.1.html)  permette  di

vedere e modificare in modo interattivo le impostazioni per una porta seriale; setserial

(http://www.linuxprinting.org/man/setserial.8.html) permette di controllare alcuni parametri estesi

e di configurare gli interrupt e gli indirizzi di I/O per porte non standard. Ulteriori informazioni sulle porte seriali sotto Linux possono essere trovate nel Serial-HOWTO (http://metalab.unc.edu/mdw/HOWTO/Serial-HOWTO.html).

Usando una stampante seriale lenta con il controllo di flusso, ci si accorgerà che alcuni dei lavori di stampa vengono tagliati. Questo potrebbe essere dovuto alla porta seriale, il cui comportamento predefinito è di eliminare ogni carattere non trasmesso dal buffer entro 30 secondi dalla chiusura della porta del dispositivo. Il buffer può trattenere fino a 4096 caratteri, e se la stampante usa il controllo di flusso ed è troppo lenta per poter accettare tutti i dati dal buffer entro 30 secondi dalla chiusura della porta seriale, la fine del contenuto del buffer verrà persa. Se il comando cat file > /dev/ttyS2 produce un tabulato completo per file brevi ma uno tagliato per quelli più lunghi, potreste essere in queste condizioni.

Il problema dell’intervallo di 30 secondi può essere sistemato attraverso l’opzione a linea di comando di setserial "closing_wait" (versioni 2.12 e successive). Le porte seriali di una macchina solitamente sono inizializzate da una chiamata a setserial tramite il file di avvio rc.serial. La chiamata per la porta seriale della stampante può essere modificata perché imposti il closing_wait nello stesso momento in cui imposta gli altri parametri della porta.

4.4. Dispositivi USB

4.4.1. USB 1.1

Linux supporta la tecnologia USB piuttosto bene. USB dovrebbe funzionare con gli ultimi kernel 2.2, e con ogni kernel 2.4 o successivo. Naturalmente sarà necessario il supporto nel kernel per USB, o compilato o attraverso un modulo (raccomandato).

Con un kernel modulare sarà necessario caricare i seguenti moduli:

• usb-core.o

• usb-uhci.o oppure uhci.o oppure usb-ohci.o

• printer.o

A seconda del tipo di scheda madre o adattatore che si possiede, sarà necessario uno tra usb-uhci.o oppure uhci.o oppure usb-ohci.o. Le schede madri Intel e Via, e gli adattatori basati su Via sono UHCI (si può usare sia ush-uhci.o che uhci.o). Si può scoprire quale tipo di HCI (Host Controller Interface - Interfaccia di Controllo dell’Host) si possiede usando lspci -v|grep HCI.

4.4.2. USB 2.0

Per ottenere trasferimenti ad alta velocità da un dispositivo USB 2.0 bisogna unirlo ad un controller USB 2.0 usando il driver EHCI (ehci-hcd.o). Si raccomanda di usare un kernel recente 2.4 o successivo.

4.4.3. Suggerimenti

Una cosa da ricordare è che i dispositivi USB sono allocati dinamicamente. Quando si accende o si connette una stampante USB, le viene assegnato un file di dispositivo (/dev/usb/lp*). Questo significa che i lavori di stampa potrebbero essere inviati alla stampante sbagliata perché le stampanti sono state accese in un certo ordine. CUPS usa indirizzi speciali che contengono fabbricante, modello e numero seriale della stampante per continuare ad inviare i lavori di stampa alla stampante corretta.

Anche se la maggior parte delle stampanti lavora bene con Linux, ci sono delle eccezioni. Per esempio il nuovo dispositivo MF della Epson (Stylus CX3200/CX5200) risponde malamente se si sonda la stringa ID IEEE-1284 via IOCTL, per esempio tramite il codice del backend "usb" di CUPS. Mentre si può sondare la stringa ID tramite un sistema proprietario della Epson.

Till Kamppeter ha scritto alcuni strumenti per recuperare la stringa ID di dispositivo dalle stampanti USB. getusbprinterid.pl (http://www.linuxprinting.org/download/printing/getusbprinterid.pl) e usb_id_test.c (http://www.linuxprinting.org/download/printing/usb_id/test.c) sono la stessa cosa, ma sono scritti rispettivamente in Perl e in C. Come detto prima, i nuovi dispositivi MF della Epson sono un’eccezione, ma il "sistema proprietario della Epson" è stato implementato nello strumento ttink del pacchetto MTink (http://xwtools.automatix.de/).

Maggiore documentazione su USB è disponibile presso il sito web Linux USB (http://www.linux-usb.org/).

5. Stampanti supportate

Il kernel di Linux permette di comunicare con ogni stampante che si possa collegare ad una porta seriale, parallela o usb, più ogni stampante sulla rete locale. Sfortunatamente, questo da solo non è sufficiente; bisogna essere anche in grado di generare dati che la stampante possa capire. Tra le stampanti incompatibili, le prime sono quelle definite come "Windows" o "GDI". Sono chiamate così perché tutto o parte del linguaggio di controllo della stampante e i dettagli del meccanismo di stampa non sono documentati. Tipicamente, il venditore metterà a disposizione un driver Windows e lo venderà allegramente solo ad utenti Windows; questo è il motivo per cui sono chiamate Winprinters. In alcuni casi il venditore metterà a disposizione anche driver per NT, OS/2, o altri sistemi operativi.

Molte di queste stampanti non funzionano con il software libero. Alcune funzionano, e altre funzionano solo in parte (solitamente perché qualcuno ha effettuato un reverse engineering trovando i dettagli necessari per scrivere un driver). Si veda più sotto la lista delle stampanti supportate per avere dettagli su stampanti specifiche.

Poche stampanti sono intermedie. Qualche modello della NEC, per esempio, implementa una forma semplificata del linguaggio standard PCL che permette ai software che usano PCL di stampare ad una definizione fino a 300dpi, ma solo NEC sa come ottenere 600dpi da queste stampanti.

Se si possiede una di queste stampanti Windows, ci sono modi indiretti per usarla, ma sono piuttosto scomodi. Si veda la Sezione 12 in questo documento per ulteriori informazioni sulle stampanti Windows.

5.1. Postscript

Per quanto riguarda le stampanti che funzionano con il software libero, la scelta migliore è comprarne una che abbia il supporto nativo per PostScript nel firmware. Quasi tutto il software Un*x che produce output stampabile lo produce in PostScript, quindi ovviamente sarebbe carino avere una stampante che supporti direttamente PostScript. Sfortunatamente, il supporto PostScript è raro al di fuori dell’ambito delle stampanti laser, e alcune volte è un’aggiunta costosa.

Il software Un*x, e l’industria editoriale in generale, ha standardizzato l’uso di Postscript come linguaggio di controllo delle stampanti. Questo è successo per varie ragioni:

Tempismo

Postscript è nato come parte di Apple Laserwriter, un perfetto compagno per Macintosh, il sistema largamente responsabile della rivoluzione dei desktop degli anni 80.

È indipendente dal dispositivo

I programmi Postscript possono essere usati per generare output per uno schermo a pixel, per uno schermo vettoriale, per un fax, o per quasi ogni tipo di meccanismo di stampa, senza che sia necessario cambiare il programma originale. L’output di Postscript sarà sempre lo stesso su ogni dispositivo Postscript, almeno entro i limiti delle capacità del dispositivo stesso. Prima della creazione dei PDF ci si scambiavano documenti complessi on-line come file Postscript. L’unica ragione per cui questo standard non ha "attaccato" è stato perché le macchine Windows solitamente non includono un visualizzatore Postscript, così Adobe specificò iperlink e compressione per Postscript, chiamò il risultato PDF, distribuì dei visualizzatori, e inventò un mercato per il suo strumento "distillatore" (le cui funzionalità sono offerte anche da ps2pdf e pdf2ps di Ghostscript).

È un vero linguaggio di programmazione

Postscript è un linguaggio di programmazione completo; può essere usato per scrivere software adatto a fare quasi tutto. In genere è utile per definire delle subroutine all’inizio dei programmi che riproducano più volte cose complesse per tutta la lunghezza di un documento, come un logo o una grande scritta "MINUTA" sullo sfondo. Ma non c’è ragione per non fare conti con un programma Postscript.

È aperto

Postscript è completamente descritto in una serie di libri pubblicamente disponibili (che si possono trovare in ogni buona libreria) e anche on-line presso http://partners.adobe.com/asn/developer/technotes/postscript.html. Anche se Adobe l’ha inventato e ne fornisce l’implementazione commerciale dominante, altri venditori come Aladdin ne producono altre implementazioni codificate indipendentemente.

5.2. Non Postscript

In mancanza del (ingente) budget necessario per comprare una stampante Postscript, si può usare ogni stampante supportata da Ghostscript , l’interprete libero per Postscript usato al posto dell’attuale supporto Postscript. Si noti che la maggior parte delle distribuzioni GNU/Linux possono vendere solo una versione di Ghostscript piuttosto antiquata a causa della licenza. Per fortuna solitamente ci sono dei pacchetti aggiornati di Ghostscript messi a disposizione nelle aree contrib di ogni distribuzione.

Oggi Adobe usa un nuovo linguaggio per le stampanti chiamato "PrintGear". Sembra che sia un linguaggio in formato binario molto semplificato con un po’ di eredità Postscript ma senza compatibilità Postscript, e non si sa se Ghostscript lo supporta. Ma alcune stampanti PrintGear sembrano supportare un altro linguaggio come PCL, e queste stampanti funzioneranno con GNU/Linux (se PCL è implementato nella stampante e non in un driver Windows).

Allo stesso modo, Adobe offre un’implementazione Postscript basata sugli host chiamata PressReady. Funziona come Ghostscript nell’offrire supporto Postscript per una stampante non PostScript, ma ha lo svantaggio di funzionare solo sotto Windows.

5.3. Quali stampanti funzionano?

Ci sono diversi luoghi dove si può cercare per scoprire se una particolare stampante funzionerà. Il database (http://www.linuxprinting.org/database.html) di stampanti mantenuto cooperativamente dal Printing HOWTO vuole essere una lista esauriente dello stato del supporto per le stampanti. Ce n’è un riassunto più sotto; ci si assicuri di controllare on-line per maggiori dettagli e informazioni su quale driver usare.

La scommessa più sicura per chi deve acquistare una nuova stampante è consultare la lista delle stampanti suggerite (http://www.linuxprinting.org/suggested.html), che si concentrano intorno alle stampanti a getto d’inchiostro a colori e ai dispositivi laser monocromatici. Acquistarne una dai fornitori affiliati (http://www.linuxprinting.org/affiliate.html) aiuterà a supportare questo documento e il sito web.

La pagina delle stampanti compatibili (http://www.cs.wisc.edu/~ghost/doc/printer.htm) di Ghostscript contiene una lista di alcune stampanti funzionanti, nonché collegamenti ad altre pagine.

I gruppi di Google (http://groups.google.com/) contengono centinaia di testimonianze sul "funziona" e "non funziona". Si provi con tutti e tre, dopo di che si controlli che la propria stampante sia presente nel database (http://www.linuxprinting.org/database.html), così che sia elencata correttamente per il futuro.

5.3.1. Lista di stampanti compatibili

Questa sezione è un riassunto del database on-line (http://www.linuxprinting.org/database.html). La versione on-line include specifiche sui dispositivi, note, informazioni sui driver, documentazione mantenuta dagli utenti, pagine web dei fabbricanti e script d’interfaccia per usare i driver con diversi sistemi di spool (inclusi LPR, LPRng, PDQ e CUPS). La versione on-line di questa lista è interattiva: stampanti possono essere aggiunte in ogni momento, quindi ci si assicuri di controllarla. Infine, se la stampante non è elencata, la si aggiunga!

Questo elenco non è il vangelo; alcune volte vengono aggiunte informazioni errate, che vengono alla fine eliminate. Le voci che non sono state controllate sono marcate con un asterisco (*). Si verifichi tramite i gruppi di Google che una stampante sia stata utilizzata da qualcuno prima di comprarla basandosi su questo elenco.

Le stampanti possono essere classificate in quattro tipi:

Perfettamente funzionanti

Stampanti perfette lavorano perfettamente: si possono utilizzare tutte le capacità della stampante, inclusi colore, piena risoluzione ecc. In pochi casi stampanti con modalità di "miglioramento della risoluzione" che non funziona vengono elencate come perfette; generalmente la differenza nella qualità di stampa è così piccola che non vale la pena di preoccuparsene.

Generalmente funzionanti

Si può stampare bene, ma potrebbero esserci piccole limitazioni di diverso tipo sia nella stampa che in altre funzioni.

Parzialmente funzionanti

Si può stampare, ma potrebbe essere impossibile farlo a colori, o possibile solo ad una risoluzione scarsa. Si veda l’elenco on-line per informazioni sulle limitazioni.

Inutili

Non si può stampare; tipicamente, questo è dovuto a mancanze nel driver e/o della documentazione su come scriverne uno. Stampanti inutili alcune volte vengono "promosse", sia quando qualcuno scopre che funzionano

con un driver esistente, che quando qualcuno crea un nuovo driver, ma non si dovrebbe contare su questo.

In ogni caso, considerato che queste informazioni sono fornite da dozzine di persone, non si può garantire che siano corrette; voci con un asterisco (*) sono particolarmente sospette. Comunque, i fatti possono essere facilmente corroborati dalle pagine web del driver o dai siti web dei produttori.

E senza ulteriori indugi, ecco la lista delle compatibilità delle stampanti:

Tabella 1. Stampanti supportate da Linux

Fabbricante Perfettamente funzionanti Generalmente funzionanti Parzialmente funzionanti

Paperweight

Alps MD-1000 MD-1300 MD-1500* MD-2000 MD-2010 MD-2300 MD-4000 MD-5000 MD-5500

Anitech M24

Apollo P-1200 P-1220 Barbie P-1250 P-2100 P-2150 P-2200 P-2250 P-2500 P-2550 P-2600 P-2650

Apple 12/640ps Dot Matrix ImageWriter ImageWriter LQ LaserWriter 4/600* LaserWriter 16/600* LaserWriter IINTX* LaserWriter IIg LaserWriter Pro 630* LaserWriter Select 360* Color StyleWriter 1500 Color StyleWriter 2200 Color StyleWriter 2400 Color StyleWriter 2500* ImageWriter II* LaserWriter NT StyleWriter 1200 StyleWriter I StyleWriter II

Avery Personal Label Printer+* Personal Label Printer Fabbricante Perfettamente funzionanti Generalmente funzionanti Parzialmente funzionanti

Paperweight

Brother HL-4Ve HL-8 HL-10V HL-10h HL-630 HL-660 HL-720 HL-730 HL-760 HL-820 HL-960* HL-1020 HL-1040 HL-1070* HL-1250 HL-1260 HL-1270N HL-1440 HL-1450 HL-1470N HL-1650 HL-1660e HL-1670N HL-2060 HL-2400CeN HL-2460 HL-2460N HL-3400CN HJ-400 HL-1030 HL-1050 HL-1060 HL-1240 DCP-1200 HJ-100i* HL-4V* HL-6* HL-6V* HL-630/631* HL-641/645/655M* HL-665* HL-730/730DX* HL-1270* HL-P2000* M-1309* M-1324* M-1809* M-1809 Color* M-1824L* M-1824L Color* M-1909* M-1909 Color* M-1924L* M-1924L Color* M-4309* MC-3000 MFC 7150C MFC-4000/4500/5500* MFC-4350 MFC-6550MC MFC-6550MC/7550MC* MFC-8300 MFC-9050 MFC-9100c* MFC-9500 MFC-9600 MFC-P2000* MFC-P2500

4550* MP-21C

CItoh  M8510

CalComp Artisan 1023 penplotter* Fabbricante Perfettamente funzionanti Generalmente funzionanti Parzialmente funzionanti

Paperweight

Canon BJ-5 BJ-10e BJ-10v* BJ-15v* BJ-20 BJ-30* BJ-35v* BJ-100 BJ-200 BJ-330 BJC-70 BJC-210 BJC-250* BJC-250ex BJC-255SP BJC-265SP BJC-600* BJC-610 BJC-620 BJC-680J* BJC-800 BJC-880J* BJC-4000 BJC-4100 BJC-4200 BJC-4300* BJC-4400* BJC-4550* GP 335* GP 405 LBP-4+ LBP-4U LBP-8A1 LBP-310* LBP-320 Pro* LBP-350* LBP-430 LBP-1000* LBP-1260 LBP-1760* LIPS-II+* LIPS-III* LIPS-IV* LIPS-IVv* BJC-50* BJC-55* BJC-80* BJC-85* BJC-240* BJC-1000* BJC-2000* BJC-2010* BJC-2100 BJC-2110 BJC-3000 BJC-4310SP BJC-6000 BJC-7004* BJC-8200* LBP-4sx S100 S400* imageRunner 330s BJ F100* BJ F200* BJ F600* BJ F800* BJ F6000* BJ-30v* BJ-200e* BJ-220JCII* BJ-220JSII* BJ-230* BJ-300 BJC-35v* BJC-35vII* BJC-50v* BJC-80v* BJC-210J* BJC-210SP BJC-240J* BJC-250J* BJC-400J* BJC-410J* BJC-420J* BJC-430J* BJC-430J Lite* BJC-430JD Lite* BJC-440J* BJC-455J* BJC-465J* BJC-600J* BJC-600e* BJC-610JW* BJC-620JW* BJC-700J* BJC-820* BJC-820J* BJC-4200 Photo* BJC-4304 Photo* BJC-4650* BJC-5500* BJC-5500J* BJC-6100* BJC-6200* BJC-6500* BJC-7000* BJC-7004 Photo* BJC-7100* BJC-8000* MultiPASS C2500* MultiPASS C3000* MultiPASS C3500* MultiPASS C5000* MultiPASS C5500 S300 S450* S500 S600 S630 S800 S4500* BJC-5000* BJC-5100 BJC-8500* LBP-460* LBP-600 LBP-660* LBP-800* Multipass L6000* S200 Fabbricante Perfettamente funzionanti Generalmente funzionanti Parzialmente funzionanti

Paperweight

Citizen ProJet II* ProJet IIc printiva600C printiva600U printiva700 printiva1700

Compaq  IJ750* IJ1200  IJ900  IJ300*

DEC DECWriter 500i* DECwriter 110i* DECwriter 520ic* LA50* LA70* LA75* LA75 Plus* LJ250 LN03* LN07*

1800* LN17*

Daewoo

DP-3630H* DP-7200H* DP-7400C*

Dymo-CoStar ASCII 250* ASCII+* EL40* EL60* LabelWriter II* LabelWriter XL* LabelWriter XL+* SE250* SE250+* Turbo* Fabbricante Perfettamente funzionanti Generalmente funzionanti Parzialmente funzionanti

Paperweight

Epson ActionLaser 1100* ActionLaser II* ActionPrinter 3250* AcuLaser C2000 AcuLaser C2000PS AcuLaser C4000 AcuLaser C4000PS AcuLaser C8500 AcuLaser C8500PS CL 700 CL 750 Dot Matrix EM 900C EM 900CN EM 930C EM 930CN EPL-5200* EPL-5200+* EPL-5800 EPL-5800PS EPL-5900 EPL-5900PS EPL-7100 EPL-N1600 EPL-N1600PS EPL-N2050 EPL-N2050+ EPL-N2050PS EPL-N2050PS+ EPL-N2120 EPL-N2750 EPL-N2750PS L-1000* LP 8000 LP-2000* LP-3000* LP-7000* LP-7000G* LP-xx00* LQ-24 LQ-500 LQ-570+* LQ-850 LQ-2550 LX-1050* MC 7000 MJ 6000C MJ 8000C MachJet* PM 700C PM 730C* PM 750C PM 760C* PM 770C PM 780C* PM 800C PM 820C PM 880C* PM 2000C PM 2200C* PM 3000C PM 3300C PM 3500C PM 7000C SQ 1170 Stylus* Stylus 800* Stylus C20SX Stylus C20UX Stylus C40SX Stylus C40UX Stylus C41SX Stylus C41UX Stylus C42SX Stylus C42UX Stylus C60 Stylus C61 Stylus C62 Stylus C70 Stylus C80 Stylus C82 Stylus Color* Stylus Color 8 3 Stylus Color 400 Stylus Color 440* Stylus Color 460* Stylus Color 480 Stylus Color 500 Stylus Color 580 Stylus Color 600 Stylus Color 640 Stylus Color 660 Stylus Color 670* Stylus Color 680 Stylus Color 740 Stylus Color 760 Stylus Color 777 Stylus Color 800 Stylus Color 850 Stylus Color 860 Stylus Color 880 Stylus Color 900 Stylus Color 980 Stylus Color 1160 Stylus Color 1500 Stylus Color 1520 Stylus Color 3000 Stylus Color I Stylus Color PRO Stylus Photo Stylus Photo 700 Stylus Photo 720* Stylus Photo 750 Stylus Photo 780* Stylus Photo 790* Stylus Photo 810 Stylus Photo 820 Stylus Photo 830 Stylus Photo 870* Stylus Photo 890* Stylus Photo 1200 Stylus Photo 1270 Stylus Photo 1280 Stylus Photo 1290 Stylus Photo 1290S Stylus Photo EX Stylus Photo EX3* Stylus Pro 7000 Stylus Pro 7500 Stylus Scan 2000 Stylus Scan 2500 EPL-5700 MC 5000 MJ 520C MJ 5100C PM 790PT* PM 850PT PM 4000PX PM 5000C Stylus Color 200* Stylus Color 300* Stylus Color II Stylus Color IIs Stylus Photo 785* Stylus Photo 825* Stylus Photo 875* Stylus Photo 895* Stylus Photo 915 Stylus Photo 925 Stylus Photo 950 Stylus Photo 960 Stylus Photo 2100 Stylus Photo 2200 Stylus Pro 5000 Stylus Pro 5500 Stylus Pro XL 9-pin 136 Col* 9-pin 80 Col* 24-pin 136 Col* 24-pin 80 Col* AP-800* AP-2250* AP-3250* AP-3260* AP-5000* AP-5500* ActionLaser 1000/EPL-5000* ActionLaser 1400* ActionLaser 1500/EPL-5200* ActionLaser 1600/EPL-5600* ActionLaser II/EPL-4000* DFX-5000* DFX-5000+* DFX-8000* DFX-8500* DLQ-2000 (360 dpi)* DLQ-3000+* EPL-7000/7100* EPL-8000/8100* EPL-N1200* EPL-N2000* EX-800* EX-1000* FX-286e* FX-850* FX-870* FX-880* FX-980* FX-1000* FX-1050* FX-1170* FX-1180* FX-2170* FX-2180* Generic 48 pin* Generic ESC2P* Generic ESC_P 24-J84* Generic ESC_P 24-J84C* JX-80* LQ-100* LQ-150* LQ-300* LQ-300 Color* LQ-400* LQ-510* LQ-550* LQ-570* LQ-670* LQ-850 (N9)* LQ-850+ (360 dpi)* LQ-860* LQ-870* LQ-950 (N9)* LQ-1010* LQ-1050* LQ-1050 (N9)* LQ-1050+ (360 dpi)* LQ-1060* LQ-1070* LQ-1070+* LQ-1170* LQ-2070* LQ-2080* LQ-2170* LQ-2180* LQ-2500* LX-100* LX-300* LX-300 Color* LX-400* LX-800* LX-810* LX-850* MC 2000 MC 9000 MC 10000 MJ-500C* MJ-510C* MJ-700V2C* MJ-800C* MJ-900C* MJ-910C* MJ-3000C* MJ-3000CU* MJ-5000C* MJ-5100C* MX-80 (w_GRAFTRAX 80)* PM 950C PM 9000C PM 10000 PX 7000 PX 9000 SQ-850* SQ-2500* SQ-2550* Stylus 200* Stylus 300* Stylus 400* Stylus 500* Stylus 800+* Stylus 820* Stylus 1000* Stylus 1500* Stylus Color 600Q* Stylus Photo 2000P Stylus Pro* Stylus Pro 7600 Stylus Pro 9000 Stylus Pro 9500 Stylus Pro 9600 Stylus Pro 10000 Stylus Pro XL+* TLQ-4800* TSQ-4800* AcuLaser C1000 EPL-5500W* EPL-5700L EPL-5800L EPL-5900L Stylus CX3200

22 Fabbricante Perfettamente funzionanti Generalmente funzionanti Parzialmente funzionanti

Paperweight

Fujitsu 1200* 2400* 3400* FMLBP2xx Page Printer* FMPR* PrintPartner 10V* PrintPartner 16DV* PrintPartner 20W* PrintPartner 8000*

Generic PostScript Printer 9-pin 136 Col*

9-pin 80 Col* 24-pin 136 Col* 24-pin 80 Col* 48 pin*

GoldStar GLP-1450* GLP-2050* GLP-5750* Fabbricante Perfettamente funzionanti Generalmente funzionanti Parzialmente funzionanti

Paperweight

HP 2000C 2500C 2500CM 2563 Business Inkjet 2200 Business Inkjet 2230 Business Inkjet 2250 Business Inkjet 2250TN Business Inkjet 2280 Business Inkjet 2600 Business Inkjet 3000 Color Inkjet Printer CP1160 Color Inkjet Printer CP1700 Color LaserJet 2500 Color LaserJet 4500 Color LaserJet 4550 Color LaserJet 4600 Color LaserJet 5500 Color Laser-Jet 8550GN DesignJet 3500CP DesignJet 5500ps DesignJet Color-Pro CAD DeskJet DeskJet 200 DeskJet 310 DeskJet 320 DeskJet 340C DeskJet 400 DeskJet 450 DeskJet 500 DeskJet 500C DeskJet 505J Plus DeskJet 510 DeskJet 540C DeskJet 550C DeskJet 600 DeskJet 610C DeskJet 610CL DeskJet 612C DeskJet 630C DeskJet 632C DeskJet 640C DeskJet 648C DeskJet 656C DeskJet 660C DeskJet 670C DeskJet 670TV DeskJet 672C DeskJet 680C DeskJet 682C DeskJet 690C DeskJet 692C DeskJet 693C DeskJet 694C DeskJet 695C DeskJet 697C DeskJet 710C DeskJet 712C DeskJet 720C DeskJet 722C DeskJet 810C DeskJet 812C DeskJet 815C DeskJet 816C DeskJet 820C DeskJet 825C DeskJet 830C DeskJet 832C DeskJet 840C DeskJet 841C DeskJet 842C DeskJet 843C DeskJet 845C DeskJet 850C DeskJet 855C DeskJet 870C DeskJet 880C DeskJet 882C DeskJet 890C DeskJet 895C DeskJet 916C DeskJet 920C DeskJet 930C DeskJet 932C DeskJet 933C DeskJet 934C DeskJet 935C DeskJet 940C DeskJet 948C DeskJet 950C DeskJet 952C DeskJet 955C DeskJet 957C DeskJet 959C DeskJet 960C DeskJet 970C DeskJet 975C DeskJet 980C DeskJet 990C DeskJet 995C DeskJet 1000C DeskJet 1100C DeskJet 1120C DeskJet 1125C DeskJet 1200C DeskJet 1220C DeskJet 1600C DeskJet 1600CM DeskJet 3820 DeskJet 5550 DeskJet 5551 DeskJet 6122 DeskJet 6127 DeskJet Plus DeskJet Portable LaserJet LaserJet 2 LaserJet 2 w/PS LaserJet 2P LaserJet 2P Plus LaserJet 3 LaserJet 3D LaserJet 3P w/ PCL5 LaserJet 3P w/PS LaserJet 4 LaserJet 4 Plus LaserJet 4L LaserJet 4M LaserJet 4ML LaserJet 4P LaserJet 4Si LaserJet 4V LaserJet 4V/4LJ Pro* LaserJet 5 LaserJet 5L LaserJet 5M LaserJet 5MP LaserJet 5P LaserJet 5Si LaserJet 6 LaserJet 6L LaserJet 6MP LaserJet 6P LaserJet 1100 LaserJet 1100A LaserJet 1200 LaserJet 1220 LaserJet 2100 LaserJet 2100M LaserJet 2200 LaserJet 3300 MFP LaserJet 3310 MFP LaserJet 3320 MFP LaserJet 3320N MFP LaserJet 4000 LaserJet 4050 LaserJet 4100 LaserJet 5000 LaserJet 5100 LaserJet 8000 LaserJet 8100 LaserJet 8150 LaserJet 9000 LaserJet Plus Mopier 240 Mopier 320 OfficeJet D125 OfficeJet G55 OfficeJet Pro 1150C OfficeJet Pro 1170C OfficeJet Pro 1175C OfficeJet R45 OfficeJet R60 OfficeJet R65 OfficeJet R80 PSC 370 PSC 380 PSC 500 PSC 750 PSC 2110 PSC 2150 PaintJet PaintJet XL PaintJet XL300 PhotoSmart 7150 PhotoSmart 7350 PhotoSmart 7550 PhotoSmart P100 PhotoSmart P130 PhotoSmart P230 PhotoSmart P1000 PhotoSmart P1100 PhotoSmart P1115 PhotoSmart P1215 PhotoSmart P1218 PhotoSmart P1315 e-printer e20 Color LaserJet 5 DesignJet 230 DesignJet 350C DesignJet 650C DesignJet 750C DesignJet 750C Plus DeskJet 350C DeskJet 420C DeskJet 520 DeskJet 560C LaserJet 2D LaserJet 3200 LaserJet 3200m LaserJet 3200se LaserJet 3330 MFP OfficeJet OfficeJet 300 OfficeJet 330 OfficeJet 350 OfficeJet 500 OfficeJet 600 OfficeJet 625 OfficeJet 635 OfficeJet 710 OfficeJet D135 OfficeJet D145 OfficeJet D155 OfficeJet G85 OfficeJet G95 OfficeJet K60 OfficeJet K80 OfficeJet LX OfficeJet T45 OfficeJet T65 OfficeJet V40 PSC 950 PSC 2210 C LaserJet 4500* C LaserJet 4550* C LaserJet 8500* C LaserJet 8550* Color LaserJet* Color LaserJet 5/5M* Color LaserJet 5000 DesignJet 5500 LaserJet 2P Plus* LaserJet 3P* LaserJet 3Si* Laser-Jet 4 Plus/4M Plus* LaserJet 4/4M* LaserJet 4LJ Pro* LaserJet 4P/4MP* LaserJet 4PJ* LaserJet 4Si/4Si Mx* LaserJet 4V/4MV* LaserJet 5/5M* LaserJet 5P/5MP* Laser-Jet 5Si/5Si Mx/5Si Mopier* LaserJet 6L/6L Gold* LaserJet 6P/6MP* LaserJet 500 Plus* LaserJet 1000 LaserJet 2000* LaserJet 4000/4000N* LaserJet 4000T/TN* LaserJet Classic* LaserJet Plus* LaserJet Series 2* ThinkJet DeskJet 3320 DeskJet 3420 LaserJet 3100 LaserJet 3150 PhotoSmart

24 Fabbricante Perfettamente funzionanti Generalmente funzionanti Parzialmente funzionanti

Paperweight

Hansum  BJ-330H* HS-650C*

Heidelberg

Digimaster 9110*

Hitachi DDP 70 (with Micro-Press)*

IBM 3853 JetPrinter* 4019* 4029 10P* 4303 Network Color Printer* Execjet 4072* Infoprint 12* Page Printer 3112* ProPrinterII* 4029 030 LaserPrinter 10* 5183 Portable Printer* Infoprint 20* Infoprint 21* Infoprint 32* Infoprint 40* Infoprint 70* Infoprint 2085* Infoprint 2105* Network Printer 12* Network Printer 17* Network Printer 24*

Imagen  ImPress*
Infotec  4651 MF*
Jepcom  JP-B330*

Kodak DigiSource 9110* IS 70 CPII* Fabbricante Perfettamente funzionanti Generalmente funzionanti Parzialmente funzionanti

Paperweight

Kyocera F-800T* F-1010* F-3300 FS-600* FS-600 (KPDL-2)* FS-680* FS-800* FS-1000* FS-1000+ FS-1010 FS-1200 FS-1700+* FS-1750* FS-1800 FS-1900 FS-3750* FS-3800 FS-5900C* FS-9100DN FS-9500DN P-2000* FS-3500* F-800A/F-800* F-820* F-1000A/F-1000* F-1200S* F-1800A/F-1800* F-2000A/F-2200S* F-3000A/F-3300* F-5000A/F-5000* FS-400A/FS-400* FS-850A/FS-850* FS-1500A/FS-1500* FS-1550+* FS-1550A/FS-1550* FS-1600+* FS-1600A/FS-1600* FS-1700* FS-1800/FS-1800N* FS-3400+* FS-3400A/FS-3400* FS-3500A/FS-3500* FS-3600+* FS-3600A/FS-3600* FS-3700* FS-3700+* FS-3800/FS-3800N* FS-5500A/FS-5500* FS-5800C* FS-6300* FS-6500/6500+* FS-6700* FS-6900* FS-7000* FS-7000+* FS-9000* LS 6550*

LaserMaster  LM 1000

Fabbricante Perfettamente funzionanti Generalmente funzionanti Parzialmente funzionanti

Paperweight

Lexmark 4039 10plus E210 Optra C710 Optra Color 40 Optra Color 45 Optra Color 1200 Optra Color 1275 Optra E* Optra E+* Optra E310 Optra E312* Optra Ep* Optra K 1220 Optra M410 Optra M412 Optra R+* Optra S 1250* Optra S 1855* Optra Se 3455* Optra T610 Optra T612 Optra T614 Optra T616 Optra W810 Valuewriter 300* Z52 Z53 1020 Business* 3000* 3200 4076* Z31 Z42* 1000 1020* 1100 2030* 2050 2070 5000 5700* 7000* 7200 Winwriter 400* X73 Z11 Z12 Z22* Z32 Z43* Z51 Z82 Winwriter 100* Winwriter 150c* Winwriter 200* Z13 Z23 Z33

Minolta PagePro 6* PagePro 6e* PagePro 6ex* PagePro 8* PagePro 1100 PagePro 8L* PagePro 6L PagePro 1100L

Mitsubishi CP50 Color Printer* Fabbricante Perfettamente funzionanti Generalmente funzionanti Parzialmente funzionanti

Paperweight

NEC MultiWriter* P2X* PC-PR150* PC-PR201* PC-PR1000* PC-PR2000* PICTY180* PinWriter P6* PinWriter P6 plus* PinWriter P7* PinWriter P7 plus* PinWriter P60* PinWriter P70* Pinwriter P20* SilentWriter LC 890* Silentwriter 95f* Silentwriter2 S60P* Silentwriter2 model 290* SuperScript 660i* SuperScript 1800 SuperScript 4600N* SuperScript 100C* SuperScript 150C* SuperScript 650C* SuperScript 750C* SuperScript 860* SuperScript 870* SuperScript 1260* SuperScript 610plus* SuperScript 660* SuperScript 660plus*

Oce  3165* 9050*

Okidata ML 320 ML 321 ML 380* Microline 600CL* Microline 620CL* Microline IBM compatible 9 pin* OL400 OL400e OL400ex OL600e* OL610e/PS OL800 OL810e/PS OL810ex OL830Plus Okipage 6e Okipage 6ex* Okipage 8c Okipage 8p Okipage 10e Okipage 10ex Okipage 12i Okipage 14ex Okipage 20DXn DP 5000 Microline 182 OL400w* OL410e OL610e/S Okijet 2500* Okipage 4w Okipage 4w+* Okipage 6w Okipage 8w Okipage 8w Lite Okipage 8z Super 6e ML-184 Turbo* ML-192* ML-193* ML-320* ML-320 Turbo* ML-321* ML-321 Turbo* ML-380* ML-390* ML-390 Turbo* ML-391* ML-391 Turbo* ML-393* ML-393C* ML-395B* ML-395C* ML-520* ML-521* ML-590* ML-591* ML-3410* ML-4410* Microline 192+* OL410ex* OL810e* OL820* OL1200* OkiPage 6e/6ex* OkiPos 425D* OkiPos 425S* Okijet 2010 Fabbricante Perfettamente funzionanti Generalmente funzionanti Parzialmente funzionanti

Paperweight

Olivetti  {JP350S* JP470* \atop PG 306*}  JP450

Others BJ-230* HDMF NONE-FF* LG GIP 3000Q_3000+* VP-6570K*

PCPI 1030*

Panasonic KX-P1123* KX-P1124* KX-P1150* KX-P2023* KX-P2135* KX-P2150* KX-P4410* KX-P4450* KX-P5400* KX-P8420* KX-P8475* {KX-P2123* \atop KX-P6150*} KX-P1124i* KX-P1180* KX-P1180i* KX-P1191* KX-P1624* KX-P1654* KX-P1695* KX-P2124* KX-P2130* KX-P2180* KX-P2624* KX-P3123* KX-P3124* KX-P3624* KX-P6500* KX-PS600* KX-Pxxxx 24-pin* KX-P6100* KX-P6300 GDI* KX-P8410*

Pentax PocketJet 200 PocketJet II

Printrex 820 DL*

QMS 2425 Turbo EX* LPK-100* magicolor 2+* ps-810*

magicolor 2

Qnix

PICASSOI* PICASSOII* QBJ-3630E*

Raven  LP-410

Fabbricante Perfettamente funzionanti Generalmente funzionanti Parzialmente funzionanti

Paperweight

Ricoh 4081* 4801* 6000* Aficio 220* Aficio 700 Aficio AP2000 RPDL I Laser Printer* RPDL II Laser Printer* RPDL III Laser Printer* RPDL IV Laser Printer* Aficio 401* Aficio Color 2206* Afico FX10*

Sambo PageJet P1* PageJet P2* Stylus 800H+* Stylus 1000H+*

Samsung ML-85* ML-200 ML-210 ML-1000 ML-1010 ML-1020 ML-1200 ML-1210 ML-1220 ML-4500 ML-4600* ML-5000a* ML-5080 ML-6000/6100* ML-6040 ML-7000/7000P/7000N* ML-7050* QL-5100A* QL-6050* SI-630A* ML-85G QL-85G MJ 630V* SLB-3106G* SP-2417HW* SP-2421HW* SP-2433HW* SP-4017* SP-4021* ML-5050G* SF/MSYS/MJ-4700/4800/4500C*

Seiko SpeedJET 200* SLP* SLP 120*

SLP 220* SLP EZ30* SLP Plus* SLP Pro* SLP-100* SLP-200* SLP-240*

Sharp AR-161* AJ-1800 AJ-1805 AJ-2000 AJ-2005

AJ-2100

Sindo ExecJet 4072* ExecJet 4076*

Sony  IJP-V100

Fabbricante Perfettamente funzionanti Generalmente funzionanti Parzialmente funzionanti

Paperweight

Star JJ-100* LC24-100* LS-04 NL-10* LC 90* LC24-200* LaserPrinter 8 NX-1001* StarJet 48* LC 24-15 Multi-Font* LC 24-20 Multi-Font* LC 24-200 Colour* LC-15 Multi-Font* LC-20* LC-100 Colour* NX-1040R* NX-1500* NX-2415* NX-2420R* NX-2430* Starjet SJ-144* XB 24-200 Multi-Font* XB 24-250 Multi-Font* XB-2420* XB-2425* XR-1020* XR-1520* ZA-200 Multi-Font* ZA-250 Multi-Font*

WinType 4000*

Tally  MT908*

Tektronix 3693d color printer, 8-bit mode* 4693d color printer, 2-bit mode* 4693d color printer, 4-bit mode* 4695* 4696* 4697* Phaser 780 Phaser 850* Phaser IISX* Phaser PX* Phaser 350* Fabbricante Perfettamente funzionanti Generalmente funzionanti Parzialmente funzionanti

Paperweight

Xerox 2700 XES 3700 XES 4045 XES* DocuPrint 4508 DocuPrint C20 DocuPrint C55* DocuPrint N17 DocuPrint N32* DocuPrint N4512 DocuPrint N4512 PS Document Centre 400* Able 1406 DocuPrint C6* DocuPrint M750* DocuPrint M760* DocuPrint P8e DocuPrint P12* DocuPrint P1202* DocuPrint C8* DocuPrint C11* DocuPrint XJ6C DocuPrint XJ8C Document Homecentre WorkCentre 450cp* WorkCentre 470cx* WorkCentre XK35c DocuPrint P8* WorkCentre 385 WorkCentre XD120f* WorkCentre XE80 WorkCentre XE90fx

* Questa voce non è stata controllata.

5.4. Come comprare una stampante

È difficile selezionare una stampante al giorno d’oggi; ci sono molti modelli tra cui scegliere. Ecco alcuni suggerimenti per l’acquisto:

Costo

Si ottiene ciò per cui si paga. Quasi tutte le stampanti sotto i 200-300 dollari possono stampare ragionevolmente bene, ma il costo della stampa per pagina è molto alto. Per alcune stampanti, bastano una o due cartucce per eguagliare il costo di una stampante nuova! Questo è vero in particolare per le stampanti a getto d’inchiostro economiche. Allo stesso modo, stampanti economiche non dureranno molto a lungo. Le stampanti meno care, per esempio, hanno un MTBF di circa tre mesi; ovviamente non sono adatte per un uso intenso.

Stampanti a getto d’inchiostro

Le testine delle stampanti a getto d’inchiostro si intaseranno irrimediabilmente con l’andare del tempo, perciò la possibilità di rimpiazzare in qualche modo la testina è una buona funzionalità. Le testine delle stampanti a getto d’inchiostro sono costose, e le cartucce integrate testine/inchiostro costano dieci volte tanto (!) rispetto alle cartucce di solo inchiostro, perciò la possibilità di rimpiazzare la testina solo quando necessario è un’altra buona funzionalità. Le stampanti Epson Stylus tendono ad avere testine fisse, e le HP Deskjet tendono ad averle integrate nelle cartucce. Le Canon hanno cartucce in tre parti con contenitori indipendenti per l’inchiostro; a me piace questo modello. D’altra parte, le cartucce HP non sono più molto costose, e la HP produce una linea nel complesso migliore; Canon spesso è la terza scelta dal punto di vista della qualità di stampa. Le stampanti Epson Stylus e quelle a getto d’inchiostro della HP sono le più supportate al momento dal software libero.

Laser

Le stampanti laser consumano tamburo e toner, più una piccola barra che pulisce il toner. I modelli più economici uniscono toner e tamburo in una grande cartuccia; il loro utilizzo è più costoso. I migliori modelli per chi stampa molto sono quelli che usano semplice polvere di toner o che almeno separano cartucce di toner e tamburo.

Fotografie

Le migliori fotografie a colori si ottengono da stampanti a tono continuo che usano un aloide d’argento unito ad un approccio a laser per produrre —sorpresa!—fotografie reali. Dato che queste stampanti costano migliaia di dollari, Ofoto.com (http://www.ofoto.com) offre lavori stampa-a-stampa a buon mercato. I risultati sono sbalorditivi: nemmeno la miglior stampante a getto d’inchiostro è paragonabile.

Le stampe fotografiche più abbordabili sono quelle ottenute dai dispositivi di sublimazione del colore, come alcuni della serie Alps (trasferimento termico di inchiostro asciutto o sublimazione del colore), o delle poche stampanti fotografiche a livello utente della Sony. Sfortunatamente i dispositivi Alps sono poco supportati dal software libero (l’unico resoconto conosciuto di un utente Alps che utilizza il driver Ghostscript parla di immagini a strisce e granulose), e anche così non è chiaro se l’opzione di sublimazione del colore sia supportata. Non si sa se i dispositivi Sony funzionino.

Le più comuni stampanti a getto d’inchiostro specializzate nella stampa di fotografie solitamente presentano processi a 6 o perfino a 7 colori CMYK. Tutte le stampanti specializzate in fotografie sono costose da usare; o finirà il colore blu e si dovrà sostituire tutta la cartuccia, oppure il ricambio per un singolo colore costerà un occhio della testa. Anche la carta speciale è costosa; il costo delle fotografie ad alta qualità così ottenute potrebbe superare un dollaro americano per pagina. Si veda anche la sezione sulla stampa fotografica più avanti, e le sezioni sulla messa a punto del colore (se così si può chiamare) con GhostScript.

Ultimamente le stampanti laser a colori sono diventate più economiche, il che le rende dispositivi interessanti per i resoconti a colori. Il costo per pagina delle stampanti laser a colori è più economico di quello delle stampanti a getto d’inchiostro. Comunque possono essere poco adatte per stampare le fotografie. Un giorno le stampanti laser a colori diventeranno comuni e rimpiazzeranno quelle noiose stampanti laser monocromatiche.

Velocità

La velocità è proporzionale alla potenza del processore, all’ampiezza di banda e generalmente al costo della stampante. Le stampanti più veloci saranno quelle di rete di tipo Postscript con processori interni potenti. Stampanti a livello utente dipenderanno in parte dalla velocità di resa di GhostScript, che può essere influenzata usando una macchina ben equipaggiata; pagine piene di colori, in particolare, possono consumare grandi quantità di memoria. Le cose andranno bene finché si avrà questa quantità di memoria.

Moduli

Volendo stampare su moduli copiativi, ci vorrà una stampante d’impatto; alcune società producono ancora stampanti ad aghi, molte delle queli emulano i modelli Epson tradizionali e lavorano bene.

Etichette

Sono supportate due linee di stampanti per etichette: i modelli Dymo-Costar e i Seiko SLP. Altri modelli potrebbero funzionare oppure no. La Avery fornisce etichette adesive in formato 8.5x11 di diverse misure che si possono far passare attraverso una stampante.

Plotting

Disegni di grande formato sono supportati ai nostri giorni da stampanti a getto d’inchiostro gigantesche; la scelta più popolare è HP. Stampanti a getto d’inchiostro di media grandezza (11x17) vengono usate comunemente per stampe più piccole. Il plotting di questo tipo viene fatto tramite i linguaggi RTL, HP-GL e HP-GL/2, che sono semplici linguaggi vettoriali proprietari di HP, generati direttamente dal software dell’applicativo.

6. Software di spool

Fino a poco tempo fa, la scelta per gli utenti di software libero era semplice: tutti usavano lo stesso vecchio lpd tirato fuori parola per parola dal codice BDS Net-2. Ancora oggi alcuni venditori forniscono questo software: ma le cose stanno cambiando. Sistemi di tipo SVR4, incluso Solaris, includono un pacchetto di spool di stampa completamente diverso, incentrato su lpsched.

Oggi c’è un buon numero di sistemi tra cui scegliere. Sono tutti descritti sotto; si leggano le descrizioni per fare la propria scelta. CUPS è una buona scelta ed è raccomandato per la maggior parte degli utenti; ha un eccellente supporto per Postscript, offre supporto IPP, un’interfaccia web e diverse altre funzioni. Per ambienti di lavoro basati principalmente su stampanti di rete Postscript, un’altra scelta è rappresentata da un programma front-end come GPR con LPRng; può manipolare direttamente le opzioni PPD ed ha un’interfaccia carina.

6.1. CUPS

CUPS (http://www.cups.org/) oggi è diventato il sistema di stampa predefinito di molte distribuzioni. Cosa rende CUPS diverso dal resto? CUPS è un’implementazione di IPP (Internet Printing Protocol), un nuovo standard che tenta di risolvere alcune delle mancanze del vecchio protocollo LPD. Inoltre CUPS supporta LPD, SMB e AppSocket (JetDirect) con funzionalità ridotte. L’implementazione di CUPS è stata sviluppata da Michael Sweet di Easy Software Products; CUPS è distribuito sotto GPL. Dato che è un nuovo protocollo, IPP ha diversi vantaggi sul vecchio protocollo LPD:

• lo scheduler è un server web HTTP 1.1 e mette anche a disposizione un’interfaccia web

• opzioni di stampa, si può perfino chiedere al dispositivo IPP quali opzioni e formati di documenti supporta.

• controllo sull’accesso che limita i lavori di stampa, i controlli sui lavori di stampa e i comandi di amministrazione del sistema che arrivano da e vanno verso specifici computer e stampanti. L’accesso a CUPS può essere controllato, come con Apache, usando le direttive Allow e Deny.

• supporto proxy (dato che IPP usa HTTP)

• supporto per la cifratura

•

Oggi tutti i maggiori venditori di sistemi operativi supportano attivamente IPP, così come i maggiori venditori di stampanti. IPP è il protocollo di stampa predefinito in Windows 2000 (sarà necessario installare IIS) e potrebbe essere una scelta migliore per gli utenti di software libero rispetto al protocollo proprietario SMB. Tuttavia, su Windows 2000 è possibile scaricare automaticamente solo il driver di stampa di SMB e non quello di IPP: questa potrebbe essere una ragione per gli amministratori di rete con molti client Windows per scegliere la condivisione di stampanti con SMB usando Samba e CUPS.

CUPS include diverse funzioni molto buone, tra cui una gestione delle opzioni ragionevole; interfacce web, grafiche e a linea di comando; e un sistema di filtraggio basato su mime con un forte supporto per PostScript.

Parecchi set di PPD possono essere usati con CUPS:

Incorporati L’installazione predefinita di CUPS contiene PPD generici validi per le stampanti Epson ad aghi a 9 e 24 pin, per le Epson Stylus Color, per le stampanti Stylus Photo, per le HP Laserjet, per le stampanti DeskJet e per le stampanti per etichette Dymo. Si potranno quindi usare molti modelli di stampanti, ma senza l’accesso alle caratteristiche più specifiche dei modelli.

Foomatic (http://www.linuxprinting.org/foomatic.html)

Foomatic è in grado di generare un PPD utilizzabile con ogni driver di stampante che sia completamente dettagliato nel database di linuxprinting.org. Il PPD verrà usato con uno script di backend chiamato foomatic-rip, che usa driver liberi. Al momento si può trovare supporto per un numero piuttosto ampio di stampanti. Foomatic è la base per il supporto per stampanti non Postscript in molte distribuzioni GNU/Linux. CUPS e Foomatic stanno diventando abbastanza popolari e attualmente rappresentano il sistempa di stampa raccomandato nella maggior parte delle situazioni.

PPD per Postscript

CUPS può usare direttamente i file PPD forniti dai venditori per le stampanti Postscript. Spesso questi file sono offerti insieme ai driver di Windows per la stampante, o si possono trovare sul sito web del venditore della stampante. Dovendo scegliere fra un driver per Windows 9x e uno per Windows NT/W2K, si scelga quello per Windows NT. Anche Adobe (http://www.adobe.com/products/printerdrivers/winppd.html) distribuisce file PPD per molte stampanti Postscript.

ESP Print Pro

Easy Software Products, Inc. (http://www.easysw.com/) vende CUPS insieme ad una raccolta di driver proprietari. Benché non siano software libero, questi driver fanno funzionare molte stampanti comuni. L’insieme dei driver è piuttosto costoso se paragonato al costo di un’unica stampante supportata, ma sicuramente è utile. Il pacchetto include strumenti grafici front-end.

Gimp-Print

I drivers Gimp-Print (http://gimp-print.sourceforge.net/) sono driver di alta qualità per stampanti Canon, Epson, Lexmark, e PCL che possono essere usati con Ghostscript, CUPS, Foomatic e Gimp.

OMNI (http://www-124.ibm.com/developerworks/oss/linux/projects/omni/)

Omni è un pacchetto fatto da IBM, che ora contiene supporto per più di 450 stampanti. Il driver per stampanti OMNI è distribuito da IBM sotto licenza LGPL.

HPIJS (http://hpinkjet.sourceforge.net/)

HPIJS supporta circa 250 stampanti HP fornendo un’eccellente qualità di stampa (al momento solo tramite Foomatic). Dalla versione 1.0.1, la clausola "Solo prodotti hp" è stata rimossa dalla licenza e i driver sono distribuiti sotto licenza BSD.

Il programma di terze parti XPP (http://cups.sourceforge.net/xpp/) (si veda Figura 4) offre un’interfaccia grafica per le funzionalità utente di CUPS molto gradevole, inclusa una meravigliosa interfaccia per le opzioni da indicare al momento della stampa (mostrate in Figura 5). Per informazioni sull’uso di XPP, si veda la Sezione 3.4.2.

6.2. LPD

LPD, il demone di stampa BDS Unix originale, è stato per anni lo standard di Unix. È disponibile per ogni tipo di Unix, e offre un set di funzioni piuttosto minimale nato dalle necessità dell’era dei sistemi timesharing. Malgrado la sua storia alquanto particolare, è ancora utile oggi come spooler di stampa di base. Per renderlo veramente utile con le stampanti moderne sarà necessario molto lavoro extra, creando script per i filtri complementari e programmi front-end. Ma esiste, e fa tutto il lavoro.

LPD è anche il nome dato al protocollo di stampa di rete dalla RFC 1179 (http://www.ietf.org/rfc/rfc1179.txt). Questo protocollo di rete non è usato solo dal demone LPD, ma essenzialmente da ogni server di stampa in rete, da ogni stampante di rete, e da qualunque altro spooler di stampa presente; LPD è il minimo comun denominatore della stampa via rete.

LPRng (http://www.lprng.org)(si veda la Sezione 6.3) è un’implementazione di gran lunga migliore rispetto a quella regolare del modello di base di LPD; se si deve usare LPD, si consideri l’uso di LPRng. Non sono necessari molti riti voodoo per fargli fare quello che si vuole, e sono riti ben documentati. LPRng è essenzialmente un’implementazione avanzata di LPD con un grado di sicurezza migliore e con più funzioni.

C’è un buon numero di sorgenti di LPD in giro. Si potrebbe sostenere che il possessore ufficiale sia qualche tipo di BDS Unix, ma volenti o nolenti chiunque può aver implementato cambiamenti che si sarebbero quindi incrociati in modi sconosciuti, così che è difficile dire con esattezza quale LPD si stia usando. Tra gli LPD disponibili con più facilità ce n’è uno offerto da GNUlpr (http://sourceforge.net/projects/lpr/) con modifiche minori che rende l’interfaccia utente molto più flessibile. GNUlpr permette di specificare le opzioni da linea di comando usando il flag -o; le opzioni vengono poi passate attraverso i filtri, in modo analogo alle funzioni offerte da un buon numero di venditori Unix tradizionali, e simile a (anche se incompatibile con) il meccanismo dell’opzione -z di LPRng.

Se si decide di usare LPD, il modo migliore è tramite un front-end. Ce ne sono diversi tra cui scegliere; KDEPrint, GPR (si veda la Sezione 3.4) e XPP sono forse i migliori. Ne esistono altri; fatemi avere informazioni al riguardo.

6.3. LPRng

Alcuni venditori GNU/Linux mettono a disposizione LPRng, un’implementazione molto meno vecchia dello spool di stampa LPD. LPRng è più facile da amministrare per ampie installazioni (come dire: più di una stampante, qualunque stampante seriale, o qualche particolare stampante di rete non-lpd) e il suo codice di base è fatto meno terribilmente a casaccio di quello fornito con lpd. Può perfino pretendere in tutta onestà di essere sicuro: non contiene binari SUID, e supporta l’autenticazione tramite PGP o Kerberos.

LPRng include anche alcune impostazioni di esempio adatte per stampanti di rete comuni (principalmente HP Laser-Jet) che includono alcune capacità di autenticazione. LPRng usa più o meno lo stesso modello di filtri di base di BDS lpd, quindi il supporto LPD (http://www.linuxprinting.org/lpd-doc.html) offerto dal sito web linuxprinting.org si può applicare anche a LPRng. Questo può aiutare ad usare driver di software libero con molte stampanti.

LPRng è distribuito sia sotto licenza GPL che sotto licenza Artistic.

6.4. PPR

PPR (http://ppr.trincoll.edu/) è uno spooler incentrato su Postscript che include una rudimentale capacità di analisi dalla quale trae diverse belle funzioni. Include buone capacità di autenticazione, un buon supporto per Appletalk, SMB e per client LPD, e una migliore gestione degli errori rispetto a lpd. PPR, come ogni altro spooler, può usare Ghostscript per gestire stampanti non Postscript.

PPR venne scritto, ed è attualmente usato, al Trinity College. La licenza è di tipo BSD; libera per ogni uso ma è obbigatorio citare i realizzatori.

6.5. Altri

6.5.1. PDQ

PDQ sta per "Print, Don’t Queue" ("Stampa, non accodare" n.d.t.), e il modo in cui lavora riflette questo modello. Il sistema di stampa di PDQ non è incentrato su un demone, ma incorpora una pratica sintassi di configurazione del driver che include la capacità di dichiarare opzioni di stampa, e uno strumento ad interfaccia grafica o a linea di comando per gli utenti tramite il quale specificare le opzioni; gli utenti usano un finestra di dialogo per specificare risoluzione, duplexing, tipo di carta, ecc.

Usare tutti i filtri come utente porta un certo numero di vantaggi: i problemi di sicurezza derivanti da Postscript vengono superati, lavori di stampa di file multipli LaTeX possono essere stampati effettivamente come file dvi, e così via.

PDQ non è esente da difetti: in particolare, processa l’intero lavoro di stampa prima di mandarlo alla stampante. Questo significa che, per grandi lavori, PDQ potrebbe semplicemente essere inutilizzabile: si potrebbe arrivare ad avere centinaia di mega copiati avanti e indietro sul disco. Ancora peggio, per driver lenti come quelli di qualità migliore a getto d’inchiostro, il lavoro di stampa non verrà eseguito finché Ghostscript e il driver non avranno finito di processarlo. Questo potrebbe succedere anche minuti dopo l’invio.

PDQ ha però dei vantaggi; è un modello semplice, che non impedisce il controllo da parte dell’utente. E il normale percorso di controllo non incrocia i confini della sicurezza, così che non soffre dei bug di sicurezza che vengono sempre trovati in altri sistemi. E per finire, è leggero.

Comunque PDQ non è attivamente sviluppato. Un nuovo curatore sarà il benvenuto.

6.5.2. GNUlpr

GNUlpr iniziò la sua vita come lavoro sponsorizzato da HP a VA Linux. Sfortunatamente, GNUlpr ora è praticamente morto.

6.5.3. CPS

Il Coherent Printing System (http://www.tww.cx/cps.php) è un set di script in Perl chiamati "lpr", "lpd", "lprm", e "lpq". Rimpiazzano i programmi con lo stesso nome normalmente forniti con i sistemi Linux.

6.5.4. CEPS

Il Cisco Enterprise Print System fu sviluppato da Damian Ivereigh quando era sysadmin alla Cisco. Fece molto più di ciò per cui era stato assunto, sviluppando un nuovo sistema di stampa per migliorare un sacco di problemi amministrativi. Cisco autorizzò il rilascio del software liberamente sotto licenza GNU General Public License. L’installazione di CEPS comunque sarà vantaggiosa solo per grandi organizzazioni.

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.

5. 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.

6. 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 (http://www.linuxprinting.org/man/lpd.8.html)

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

lpr (http://www.linuxprinting.org/man/lpr.1.html)

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

lpq (http://www.linuxprinting.org/man/lpq.1.html)

Elenca i lavori di stampa presenti in una coda.

lpc (http://www.linuxprinting.org/man/lpc.8.html)

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

lprm (http://www.linuxprinting.org/man/lprm.1.html)

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 (http://sourceforge.net/project/?group_id=1658) è 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.2per 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.

8. Come configurare il tutto

Per configurazioni comuni si può probabilmente ignorare completamente questa sezione; meglio passare direttamente, invece, a la Sezione 9, o, meglio ancora, alla documentazione del venditore. La maggior parte delle distribuzioni GNU/Linux fornisce uno o più strumenti adatti anche agli inesperti che permettono di ottenere dalle stampanti più comuni tutto quello qui descritto.

Se lo strumento fornito dal venditore non funziona, o si vuole avere la capacità di controllare interattivamente le opzioni di stampa, si possono usare altri sistemi. APS Filter è un buon sistema; configura le code LPD ed effettua i filtraggi con molta facilità su ogni tipo di sistema Unix.

Si possono anche usare le interfacce di sistema per la stampa dal sito web linuxprinting.org (http://www.linuxprinting.org/) per connettere driver liberi con diversi sistemi di spool. Completato il progetto, queste interfacce offriranno le migliori funzionalità: tutti i tipi di driver liberi saranno supportati, ci saranno opzioni impostabili dagli utenti, e saranno supportati i più comuni sistemi di spool. Attualmente le più moderne distribuzioni usano il sistema foomatic. Tuttavia, alcune distribuzioni possono includere una versione leggermente sorpassata di foomatic.

8.1. Configurare CUPS

Se si sta usando un client con CUPS ed è già stato configurato un server CUPS, installare la stampante sul client non potrebbe essere più facile: non c’è niente da fare. Attraverso il broadcasting, il client dovrebbe trovare il server CUPS e configurare automaticamente le stampanti installate. Questa è una delle funzioni di CUPS più apprezzate in una grande rete.

Configurare manualmente le stampanti con CUPS è altrettanto facile. Per chi è alle prime armi con CUPS e/o con la stampa Unix il modo migliore di procedere probabilmente è usare l’interfaccia web. Per chi deve configurare molte stampanti, sarà probabilmente più veloce usare la linea di comando.

L’indirizzo predefinito da cui si accede all’interfaccia web di CUPS è http://hostname:631/admin. Se necessario, la porta può essere cambiata nel file cupsd.conf.

La sintassi generica per aggiungere una stampante da linea di comando è lpadmin -p printer -E -v device -m ppd. Lpadmin con l’opzione -p aggiunge o modifica una stampante. Le stampanti vengono salvate nel file L’opzione -x cancella la stampante indicata. Si legga la pagina di manuale di lpadmin per conoscere le opzioni disponibili.

Esempio 3. Esempi da linea di comando

/usr/sbin/lpadmin -p testpr1 -E -v socket://192.168.1.9 -m deskjet.ppd
/usr/sbin/lpadmin -p testpr2 -E -v parallel:/dev/lp0 -m laserjet.ppd
/usr/sbin/lpadmin -x testpr1

Si possono trovare maggiori informazioni sulla configurazione delle stampanti e sulle opzioni nella documentazione CUPS (http://www.cups.org/documentation.html). Il Software Administrators Manual contiene tutto quello che serve sapere per configurare stampanti con CUPS.

8.2. Configurare LPD

Fino a poco tempo fa le distribuzioni GNU/Linux fornivano LPD. Questa sezione descrive una configurazione di base per LPD; le sezioni successive dettaglieranno la creazione di filtri complessi e la configurazione per la rete.

8.2.1. Configurazione di base di LPD

La configurazione di base di lpd permette di ottenere un sistema in grado di accodare i file in una coda di stampa ed inviarli alla stampante. Questa configurazione non pone alcuna attenzione al fatto che la stampante sia in grado di interpretare i file, e probabilmente non si otterranno stampe di qualità. Ma da qualche parte si deve partire.

Per aggiungere una coda di stampa a lpd, si deve aggiungere un elemento in /etc/printcap, e creare la nuova directory di spool in /var/spool/lpd.

Un elemento di /etc/printcap è qualcosa del genere:

# LOCAL djet500
lp|dj|deskjet:\
         :sd=/var/spool/lpd/dj:\
         :mx#0:\
         :lp=/dev/lp0:\
         :sh:

Questo definisce uno spool chiamato lp, dj o deskjet, il cui spool viene eseguito nella directory /var/spool/lpd/dj, senza nessun limite sulla dimensione massima dei file stampabili, che stampa sul dispositivo /dev/lp0, e che non usa una pagina di intestazione (con il nome di chi ha eseguito la stampa e altre informazioni).

Adesso si legga la pagina di manuale di printcap (http://www.linuxprinting.org/man/printcap.5.html) .

Quello sopra è un esempio molto semplice, ma c’è un tranello: se si manda in stampa un file che la Deskjet non può capire si ottengono strani risultati. Per esempio, inviando un normale file di testo Unix ad una deskjet si ottengono delle righe nuove interpretate letteralmente, cioè:

Questa è la prima riga.
 Questa è la seconda riga.
  Questa è la terza riga.

e così via. Mandando in stampa un file PostScript si ottiene una bella lista di comandi PostScript con il solito effetto a gradinata, ma niente di più utile.

Ovviamente è necessario qualcosa in più, e questo è l’obiettivo del filtraggio. I lettori più attenti della pagina di manuale di printcap avranno notato gli attributi if e of dello spool. Bene, if, cioè il filtro di input, è quello che serve in questo caso.

Scrivendo un piccolo script chiamato filtro, che aggiunga l’accapo prima delle nuove righe, l’effetto a gradinata sarà eliminato. A questo scopo si deve aggiungere una riga if nell’elemento del printcap illustrato prima:

lp|dj|deskjet:\
         :sd=/var/spool/lpd/dj:\
         :mx#0:\
         :lp=/dev/lp0:\
         :if=/var/spool/lpd/dj/filter:\
         :sh:

Un semplice filtro potrebbe essere:

#!perl
# The above line should really have the whole path to perl
# La linea precedente dovrebbe contenere il percorso completo a perl
# This script must be executable: chmod 755 filter
# Questo script deve essere eseguibile: chmod 755 filter
while(<STDIN>){chomp $_; print "$_\r\n";};
# You might also want to end with a form feed: print "\f";
# Si potrebbe voler finire con un form feed: print "\f";

In questo modo otteniamo uno spool su cui possiamo stampare normali file di testo Unix ed ottenere delle pagine leggibili. (Si, ci sono milioni di modi migliori per scrivere questo filtro, ma pochi altrettanto illustrativi. Ci si senta incoraggiati a farlo in modo più efficiente.)

L’unico problema è che stampare solo testo piano non è esattamente il massimo: certamente sarebbe meglio poter stampare anche PostScript o altri tipi di testo formattato o grafica. Naturalmente è possibile farlo, ed è facile. Il metodo da usare è semplicemente un’estensione del filtro presentato sopra per risolvere il problema della gradinata.

Questo tipo di filtro viene detto filtro magico. Non ci si deve preoccupare di scriverne uno da soli a meno che si stampino cose molto strane: ce ne sono di ottimi a disposizione, e molti hanno strumenti di configurazione interattivi facili da usare. Si dovrà semplicemente scegliere un filtro adatto:

foomatic-rip

foomatic-rip (http://www.linuxprinting.org/lpd-doc.html) è un filtro che usa dati tratti dal database di stampanti fornito da LinuxPrinting.org. Supporta essenzialmente tutti i driver liberi, inclusi i normali driver di Ghostscript, i driver Uniprint, e altri programmi di filtri assortiti. foomatic-rip lavora con CUPS, LPRng, LPD, GNUlpr, PPR, PDQ e senza spool.

apsfilter

apsfilter (http://www.apsfilter.org/) è un filtro creato per essere usato con un gran numero di Unix. Supporta essenzialmente tutti i driver Ghostscript. Lavora anche con diversi tipi di LPD, inclusi BSD e LPRng.

RHS-Printfilters

RHS-Printfilters è un filtro creato da Red Hat. È stato incluso dalla versione 4 di Red Hat Linux, come backend per printtool, il loro semplice strumento di configurazione delle stampanti ad interfaccia grafica.

Il sistema di filtri rhs è costruito su un database ASCII incluso nel pacchetto. Questo elenco supporta molti driver Ghostscript e Uniprint, ma nessun driver che faccia da filtro. Inoltre i filtri risultanti non forniscono supporto simile a quello che si può ottenere tramite le opzioni controllabili dall’utente.

Lo strumento printtool crea un file di configurazione chiamato postscript.cfg nella directory di spool. All’interno di questo file, scritto in stile shell, ogni impostazione è una variabile. In casi straordinari, si possono fare cambiamenti direttamente in questo file, cosa che lo strumento printtool non permetterebbe di fare; solitamente si tratterà di specificare un driver Ghostscript particolare, o un file PPD per la versione VA di rhsprintfilters.

VA Linux ha aggiunto alcune migliorie al sistema rhs-printfilters per conto di HP. Con la versione giusta, è possibile selezionare opzioni per stampanti Postscript controllabili tramite file Adobe PPD. Questo sistema è descritto in la Sezione 8.2.2.

C’è un trabocchetto però: le versioni più vecchie di lpd non usano il filtro if per le stampanti di rete, le più recenti invece si (benché spesso senza argomenti). La versione di LPD contenuta nelle distribuzioni più recenti di GNU/Linux e FreeBSD lo usa; molti Unix commerciali invece forniscono ancora LPD in una versione che non lo usa. Si veda la sezione sulla stampa in rete più avanti in questo documento per maggiori informazioni. Avendo solo stampanti locali questo problema non esiste.

8.2.2. LPD per stampanti PostScript

Mentre molte versioni di LPD non sono in grado di usare PostScript (senza dare altre possibilità agli utenti), VA Linux ha modificato LPD e il software di filtraggio di Red Hat per supportare le stampanti PostScript piuttosto bene. Il progetto è stato chiamato GNUlpr (http://lpr.sourceforge.net/) perché è loro intenzione donare il codice al progetto gnu.

8.2.2.1. Come funziona

Il sistema VA usa file Postscript Printer Definition, o PPD, che sono forniti dai produttori delle stampanti e dichiarano le opzioni disponibili per la stampante insieme al codice Postscript necessario per attivarle. Con il sistema VA, il normale schema di lavoro di LPD funziona in maniera leggermente diversa:

1. L’utente può specificare le opzioni usando il flag -o. Per esempio, volendo stampare su un lucido si può specificare -o MediaType:Transparency. In alternativa, si possono specificare le opzioni tramite una finestra di dialogo usando il front-end GPR (http://www.compumetric.com/linux.html); si possono vedere alcuni screenshot di GPR in la Sezione 3.4.3.

2. LPR invia le opzioni a LPD come attributo esteso nel file di controllo di LPD.

3. Una versione modificata del pacchetto rhs-printfilters assegna le opzioni estese ad una variabile d’ambiente, e usa ppdfilt per aggiungerle ai dati da stampare.

8.2.2.2. Come ottenere ed installare i pacchetti

I pacchetti RPM, o gli archivi compattati dei sorgenti, si possono ottenere dal sito web del progetto su SourceForge (http://sourceforge.net/projects/lpr). Per i dettagli sull’installazione, si consulti il micro-HOWTO (http://printing.sourceforge.net/gpr-libppd-uhowto.html). In sostanza, dovrà essere disinstallata completamente la versione di Red Hat di printtool, di lpd e di rhs-printfilters, e installata invece la versione VA, più ppdfilt, gpr, e poche altre utilità.

Sarà necessario avere anche i file PPD per la propria stampante Postscript. I file PPD solitamente sono abbastanza facili da trovare. VA Linux e HP distribuiscono file PPD per molti modelli di Laserjet: altri venditori forniscono file PPD per le proprie stampanti, e Adobe distribuisce file PPD (http://www.adobe.com/products/printerdrivers/winppd.html) per molte stampanti.

Al momento molti di questi file sono leggermente difficili da installare. Ma verranno creati strumenti di installazione basati sulla libreria di configurazione delle stampanti libprinterconf, che abilita sia l’autoriconoscimento che la configurazione di rhs-printfilter, sia per stampanti di rete che per stampanti locali.

Nota: È possibile usare GPR da solo, senza l’LPD modificato o anche senza rhs-printfilters. GPR può essere compilato con tutto quello che è necessario per effettuare direttamente stampe di tipo Postscript, il che potrebbe essere una soluzione più semplice, adatta a chi non avrà mai bisogno di stampare usando lpr direttamente.

8.2.2.3. Controllo delle opzioni Postscript

Dopo aver impostato un sistema LPD in grado di utilizzare il supporto Postscript fornito da VA (GNUlpr), le opzioni della stampante possono essere controllate in due modi:

Tramite un’interfaccia grafica

Per usare GPR, assicurarsi prima di tutto di aver specificato il file PPD corretto. Dopo di che le opzioni della stampante saranno disponibili nel pannello "Avanzate". Le opzioni ppdfilt di base saranno disponibili nel pannello "Comuni".

Tramite la linea di comando

lpr supporta l’opzione -o. È possibile specificare qualunque coppia di opzioni/valori dal file PPD della stampante con -o. Per esempio, si consideri questa proposizione contenuta in un file PPD:

*OpenUI *PrintQuality/Print Quality: PickOne
*DefaultPrintQuality: None
*OrderDependency: 150 AnySetup *PrintQuality
*PrintQuality None/Printer Setting: ""
*PrintQuality Quick/QuickPrint:  "<< /DeviceRenderingInfo ...
*PrintQuality Normal/Normal: "<< /DeviceRenderingInfo << /...
*PrintQuality Pres/Presentation: "<< /DeviceRenderingInfo ...
*PrintQuality Image/1200 Image Quality: "<< /DeviceRenderi...
*CloseUI: *PrintQuality

Possibili valori per l’opzione PrintQuality sono Quick, Normal,Pres, o Image. Si potrebbe dare un comando del tipo:

% lpr -o PrintQuality:Image
 file.ps

Un certo numero di opzioni sono comuni a tutte le stampanti, e possono essere usate in aggiunta a quelle del proprio file PPD. Tra queste:

page-ranges

È possibile specificare una serie di pagine da stampare. Per esempio, page-ranges:2-3.

page-set

È possibile stampare solo pagine pari o dispari. Per esempio, page-set:odd.

number-up

È possibile stampare pagine multiple su un foglio. Per esempio, number-up:2.

Altre opzioni sono dettagliate nella pagina di manuale di ppdfilt.

8.2.3. Permessi sui file

A grande richiesta è inclusa una lista dei permessi su alcuni file interessanti. Ci sono modi migliori per ottenere lo stesso risultato, idealmente usando solo eseguibili SGID e non rendendo tutto SUID root, ma il mio sistema era configurato così dopo l’installazione e funziona. (Sinceramente, se il venditore non è in grado di fornire un lpd che funzioni saranno guai).

-r-sr-sr-x   1 root      lp     /usr/bin/lpr*
-r-sr-sr-x   1 root      lp     /usr/bin/lprm*
-rwxr--r--   1 root      root  /usr/sbin/lpd*
-r-xr-sr-x   1 root      lp     /usr/sbin/lpc*
drwxrwxr-x   4 root      lp     /var/spool/lpd/
drwxr-xr-x   2 root      lp     /var/spool/lpd/lp/

Lpd deve essere eseguito da root, in modo che possa connettersi alle porte riservate di lp. Dovrebbe probabilmente diventare UID lp.lp o qualcosa del genere dopo la connessione, ma non credo che lo faccia: il che è un altro motivo per evitare l’uso di BSD LPD.

8.3. Installazioni su larga scala

Con installazioni su larga scala si intendono reti che includono più di due stampanti o macchine, e che hanno necessità speciali. Ecco qui sotto alcuni suggerimenti.

CUPS supporta alcune funzioni interessanti che ne fanno una buona scelta per grandi reti. Per nominarne alcune, le classi di stampa, il controllo degli accessi e la configurazione automatica per i client.

Se si usa LPD per ambienti su scala davvero molto grande, già la sola distribuzione delle informazioni relative a printcap/filtri diventa un problema; il Cisco Enterprise Print System (http://ceps.sourceforge.net/) fa riferimento proprio a questo e può essere un buon punto di partenza o una soluzione completa a seconda delle necessità. Le funzioni native di LPRng possono supportare molto bene ambienti di medie o grandi dimensioni.

• Ogni stampante dovrebbe avere un singolo punto di controllo, tramite il quale un amministratore possa mettere in pausa, riordinare o redirigere la coda di stampa. Per implementarlo, si dovrebbe far stampare tutti su un server locale, che metterà in coda i lavori di stampa e li indirizzerà alla stampante corretta. Per grandi campus o reti distribuite, ci vorrà un server o un altro sottosistema adatto per la rete per ogni edificio.

• Usare CUPS o LPRng, almeno sui server; il sistema BDS LPD è troppo bacato perché si possa farne un uso "reale". Ma non ci si deve basare solo su queste parole; si dovrebbero testare diversi spooler per scoprire quale è più adatto alle proprie necessità.

• I client non dovrebbero avere un’unica configurazione di stampa. CUPS permette di configurare automaticamente i client appartenenti alla stessa sottorete. Si potrebbe perfino configurare CUPS (BrowsePoll) per sondare dei server presenti su altre sottoreti e trovare stampanti disponibili. Queste funzioni limitano il numero di configurazioni che devono essere fatte su un client. Per implementare una configurazione di stampa uniforme usando LPRng, si usi la sintassi estesa di printcap per ottenere un printcap adatto per essere usato dappertutto. CEPS permette di farlo creando in cima un database leggero e distribuibile al posto dei file printcap tradizionali.

• Non si dovrebbe dare alle code di stampa un nome corrispondente al modello o alla marca della stampante; sarebbe meglio usare un nome più indicativo come l’ubicazione (piano2_nw) o le capacità (colore_trasparenza). Fra tre anni, quando una stampante si romperà, potrà essere rimpiazzata con una di marca diversa o con un modello diverso senza creare confusione.

• Pubblicare una pagina web che mostri informazioni dettagliate su ogni stampante, inclusa l’ubicazione, le capacità e così via, considerando di mostrare le code di stampa e includendo un bottone per la rimozione dei lavori di stampa dalla coda. Ambienti di rete complessi saranno ingestibili per gli utenti in mancanza di un’adeguata documentazione.

• Su sistemi Windows e Apple, si usino dappertutto i driver specifici per la piattaforma (Samba supporta il meccanismo automatico di scaricamento dei driver di Windows) o, meglio ancora, si usino dappertutto driver Postscript generici. Mai mischiare le cose; gli elaboratori di testo più primitivi spesso producono un output diverso quando viene cambiato il driver di stampa installato; gli utenti non possono avere a che fare con un output diverso a seconda di quale coppia di client/stampante usano.

• Per grandi volumi di stampa acquistare, se possibile, una stampante adatta. Se si deve rispettare un budget, si sfruttino le capacità di LPRng di usare una coda di stampa su più stampanti, o le classi di stampa di CUPS assegnando una babysitter; le stampanti sono dispositivi meccanici complessi che spesso si inceppano e finiscono la carta in configurazioni di questo tipo.

•

Non è più necessario attaccare le stampanti direttamente alle postazioni di lavoro; "server di stampa" di tipo Ethernet oggi costano meno di $100. La capacità di localizzare stampanti ovunque all’interno di una rete è un grande miglioramento rispetto alla necessità di localizzare una stampante vicino ad un host; le stampanti possono essere poste in punti centrali e pratici.

•

Usare trappole SNMP o altri sistemi di controllo/allarme a vostra disposizione. Qualcuno dovrebbe essere incaricato di controllare e sistemare stampanti senza inchiostro o carta. Per effettuare operazioni di controllo su stampanti SNMP può essere usato Npadmin (si veda la Sezione 11.10.1).

8.4. Autenticazione

Una normale installazione di LPD non aiuta molto con l’autenticazione. È possibile specificare il nome di un file di autenticazione tramite l’attributo af del file printcap, ma in questo modo l’attributo verrà semplicemente passato come argomento al filtro if. È compito nostro far si che il filtro if scriva entrate appropriate nel file di autenticazione, e di processarlo successivamente (il formato tradizionale è utile principalmente per stampanti in linea, e non è banale trasformarlo in Perl, dunque non c’è motivo di conservarlo). Usando come filtro il programma foomatic-rip si dovranno fare dei cambiamenti, dato che il programma richiede che gli venga indicato un file di configurazione come nome di file di "autenticazione".

CUPS mette a disposizione l’autenticazione per pagina, passando i lavori di stampa attraverso il filtro pstops. Questo file si aspetta input Postscript. Se si passano lavori di stampa "raw", questi saranno sempre contati come una pagina. Questo significa che l’autenticazione non funzionerà stampando da Windows con il suo driver di stampa nativo.

Ghostscript mette a disposizione l’operatore PageCount che può essere usato per fare il conto delle pagine che compongono un lavoro di stampa; sostanzialmente, verranno aggiunte alcune linee postscript alla fine del lavoro di stampa che serviranno ad aggiungere una voce nel file di autenticazione; il miglior esempio si trova nel file unix-lpr.sh presente nel sorgente di Ghostscript.

L’implementazione dell’autenticazione di unix-lpr scrive su un file dall’interprete Ghostscript, ed è quindi incompatibile con l’opzione raccomandata -dSAFER. Una soluzione migliore potrebbe essere un’interrogazione alla stampante tramite un comando PJL dopo ogni lavoro di stampa, o la scrittura di uno qualche riga di codice postscript che stampi il conto delle pagine sullo standard output, dove possa essere catturato senza dover essere scritto in un file.

Lo spooler di stampa di LPRng include un’implementazione di autenticazione specifica per HP, che interroga la stampante tramite PJL. Questa tecnica dovrebbe funzionare per quasi tutte le stampanti PJL, Postscript o SNMP con le quali si ha una comunicazione a doppio senso.

Avendo una stampante di rete che supporta SNMP, si può usare il programma npadmin per richiedere un Page-Count dopo ogni lavoro di stampa. Dovrebbe funzionare correttamente per tutti i lavori di stampa. Si veda la sezione la Sezione 11.10.1per maggiori informazioni su npadmin.

9. Soluzioni commerciali

Questa sezione è, per definizione, incompleta. Ci si senta liberi di inviare dettagli della distribuzione preferita.

Ci sono diversi pacchetti di terze parti creati per facilitare la configurazione delle stampanti sotto Unix. Se ne parla nella la Sezione 8; per riferimenti si può consultare la sottosezione relativa a software di spool particolari.

9.1. Red Hat

La RedHat fornisce uno strumento di amministrazione dotato di interfaccia grafica chiamato printtool che può aggiungere stampanti remote e stampanti locali. Permette di scegliere tra le stampanti supportate dal Ghostscript e i dispositivi su cui stampare, e quindi installa una coda di stampa in /etc/printcap ed usa un programma di filtro tratto dal pacchetto rhs-printfilters per supportare postscript ed altri tipi comuni di input. Questa soluzione funziona piuttosto bene, ed è semplicissima da configurare.

Red Hat 6.x forniva una versione LPD BSD; Red Hat 7.x e 8.0 usano LPRng in maniera predefinita.

Red Hat 6.x e 7.x non funzioneranno se la stampante non è supportata dal loro Ghostscript predefinito (che è quello GNU, non quello Aladdin Ghostscript, e che supporta poche stampanti). Se non si riesce a stampare correttamente con il software fornito da Red Hat si controlli la lista di stampanti compatibili riportata sopra (oppure online (http://www.linuxprinting.org/printer_list.cgi)). Nel caso in cui la stampante non sia supportata dagli strumenti Red Hat, bisognerà installare una versione fatta in collaborazione con Aladdin Ghostscript, e probabilmente sarà meglio usare anche i pacchetti lpdomatic o apsfilter, che riconoscono le stampanti supportate dai più recenti Ghostscript, ed altri ancora.

L’installazione predefinita di Red Hat 8.0 è LPRng anche se si può scegliere CUPS. Ma anche scegliendo esplicitamente solo CUPS, verrà installato anche LPRng. CUPS diventerà finalmente lo spooler predefinito a partire da Red Hat 8.1.

Red Hat 9.0 usa CUPS come spooler predefinito.

9.2. Debian

Debian permette di scegliere tra LPD piano, LPRng o CUPS; le scelte migliori probabilmente sono LPRng o CUPS. Nel ramo unstable (attualmente chiamato sid) è possibile trovare PDQ. Debian offre anche una scelta di strumenti per configurare le stampanti; quella più sicura è usare apsfilter versione 5 o superiore, che aggiunge il supporto per lo schema del driver uniprint per LPRng e Ghostscript. È supportato anche lo strumento printtool di Red Hat, per chi ama l’uso di strumenti di amministrazione con una interfaccia grafica.

9.3. SuSE

Il sistema di stampa di SuSE Linux è basato su apsfilter, con alcuni miglioramenti; l’apsfilter di SuSE riconosce tutti i file nei formati più comuni (incluso l’HTML, se è installato html2ps). Ci sono due modi per installare stampanti sui sistemi SuSE:

• Yast permette di configurare "PostScript", "DeskJet" e "Altre stampanti", supportati dai driver Ghostscript; è anche possibile installare stampanti HP di tipo GDI (DeskJet 710/720, 820, 1000, tramite il pacchetto "ppa"). YaST crea voci adatte per /etc/printcap per ogni stampante ("raw", "ascii", "auto" e "color", se la stampante da configurare è a colori); crea anche directory di spool e mette in ordine i file apsfilterrc, tramite i quali è possibile mettere a punto diverse impostazioni (precaricamenti Ghostscript, formato della carta, orientamento, risoluzione, sequenze di escape della stampante, e così via). Con YaST è anche possibile impostare stampanti di rete (TCP/IP, Samba, o stampanti Novell Netware).

• Oltre a questo SuSE include il normale programma SETUP tratto dal pacchetto originale apsfilter (con alcuni miglioramenti); questo script di configurazione può essere invocato tramite il comando lprsetup. Una volta presa l’abitudine alla sua interfaccia grafica, si sarà in grado di configurare stampanti locali e di rete.

Il manuale di installazione di SuSE spiega entrambe le procedure di configurazione.

Wolf Rogner ha riportato alcune difficoltà con SuSE. A quanto pare potrebbe presentarsi il seguente bug:

• lo script SETUP di Apsfilter sembra essere leggermente rovinato, come gli strumenti di configurazione di KDE. Si usi YaST. [Ed: tutto ciò è ancora valido? è passato diverso tempo dall’avviso di Wolf.]

• Per stampanti di rete che necessitano di essere alimentate tramite Ghostscript, sarà necessario togliere il commento alla riga REMOTE_PRINTER="remote" in /etc/apsfilterrc. Fatto ciò bisognerà usare YaST per configurare la stampante e, alla voce Configurazione di rete, impostare la coda della stampante remota.

• YaST non permette di configurare stampanti laser a colori, perciò bisognerà configurare la stampante come monocromatica e cambiarla successivamente come stampante a colori dappertutto nella relativa voce di printcap. Bisognerà anche rinominare la directory di spool.

9.4. Caldera

Caldera fornisce LPRng. Non si conoscono gli strumenti di configurazione messi a disposizione.

Recentemente è stato aggiunto un impiegato di Caldera come curatore del dabatase LinuxPrinting.org; evidentemente intendono fornire CUPS ed un sistema di stampa basato su Foomatic nelle prossime release.

9.5. Corel

Corel è basata su Debian, quindi dovrebbe essere valido tutto quello spiegato prima. In più, hanno scritto un loro strumento di configurazione basato sulle librerie sysAPS, che a sua volta usa il mio database. Sicuramente è stato fatto come parte di WordPerfect.

Corel  gestisce  un  newsgroup  di  supporto  chiamato  corelsupport.linux.printing

(news://cnews.corel.com/corelsupport.linux.printing). Il tipo di traffico sembra essere relativo a WordPerfect e Corel Linux.

9.6. Mandrake

Dalla versione 7.2b1, Mandrake fornisce in modo predefinito CUPS, insieme ad una semplice interfaccia grafica di amministrazione ottenuta tramite il programma QtCUPS. Till ebbe alcuni problemi nel cercare di includere quanti più driver possibile, e i loro file PPD per CUPS sono stati realizzati con il codice del mio foomatic (http://www.linuxprinting.org/foomatic.html). Mandrake è stata la prima distribuzione a fornire CUPS.

Penso che versioni precedenti fornissero lo strumento printtool di Red Hat.

9.7. Slackware

Slackware fornisce i filtri APS. Lo script SETUP di apsfilter viene installato sotto il nome «apsfilterconfig»: usandolo, è possibile ottenere una configurazione ragionevole.

Dalla versione 9.0, CUPS è stato incluso nella directory extras, ma il sistema predefinito è rimasto LPRng + APSFilter.

9.8. Altre distribuzioni

Per favore fatemi sapere cosa fanno le altre distribuzioni.

10. Ghostscript

Ghostscript (http://www.cs.wisc.edu/~ghost/) è un programma incredibilmente importante per la stampa ottenuta tramite driver liberi. La maggior parte del software di stampa per Unix genera PostScript, che è una scelta da oltre mezzo milione su una stampante. Ghostscript, comunque, è gratuito, e genera il linguaggio adatto per la stampante dal PostScript.

Ghostscript è disponibile in diverse forme. La versione commerciale di Ghostscript, detta Aladdin Ghostscript, può essere usata liberamente per scopi personali, ma non può essere distribuita da entità commerciali. È almeno un anno avanti rispetto alla versione libera di Ghostscript; al momento, per esempio, supporta molte più stampanti a getto d’inchiostro a colori rispetto al vecchio Ghostscript, e fornisce un supporto migliore per il formato PDF.

La principale versione libera di Ghostscript è il Ghostscript GNU, ed è semplicemente una versione vecchia del ghostscript Alladin. Questo accordo alquanto delicato ha permesso alla Aladdin di diventare un progetto di software libero totalmente autonomo; le versioni principali sono fatte da L Peter e da alcuni impiegati, e vengono fornite con una licenza ai produttori di software e hardware per poter essere usate in prodotti commerciali. Sfortunatamente, anche se questo schema ha permesso a L Peter di portare avanti il suo lavoro per anni, nello stesso tempo ha inibito la partecipazione dell’intera comunità di software libero. Gli autori dei driver, in modo particolare, trovano questo accordo poco utile. I piani di pensionamento di L Peter danno mandato ad una maggior partecipazione della comunità nel progetto, e per questo egli sta prendendo in considerazione cambiamenti nella licenza, ed ha creato un progetto SourceForge.

La terza versione di Ghostscript è ESP Ghostscript, mantenuta da Easy Software Products (gli autori di CUPS) che ha stipulato un contratto con la Epson. ESP Ghostscript combina i driver del progetto gimp-print con quelli GNU Ghostscript, più un assortimento di patch. Questa versione non è ancora in pieno corso, ma sarà presto disponibile, e si spera che possa semplificare la vita per chi possiede stampanti che usano driver Gimp.

Qualsiasi cosa si faccia con gs (http://www.linuxprinting.org/man/gs.1.html), ci si assicuri di eseguirlo con l’opzione che disabilita l’accesso ai file (-dSAFER). PostScript è un linguaggio pienamente funzionale, ed un programma PostScript difettoso può procurare più di un mal di testa.

Parlando di PDF, il Portable Document Format di Adobe (almeno dalla 1.3) è al momento poco meno di un PostScript organizzato in un file compresso. Ghostscript può trattare input di tipo PDF come fa con i Postscript. Potreste essere i primi dell’isolato ad usare una stampante in grado di gestire file PDF.

10.1. Richiamare Ghostscript

Tipicamente, Ghostscript funzionerà tramite qualunque filtro venga impostato (si raccomanda Foomatic se il venditore non ha fornito strumenti adatti), ma per effettuare un debug è spesso più utile usarlo direttamente.

gs -help darà un breve elenco di opzioni e di driver disponibili (questa lista indicherà i driver compilati, non la lista principale di tutti i driver disponibili).

Si può far partire gs per scopi di test con: «gs <options> -q -dSAFER -sOutputFile=/dev/lp1 test.ps».

10.2. Regolazione dell’output di Ghostscript

Ci sono un sacco di cose che si possono fare se l’output di gs non è soddisfacente (in realtà si può fare qualsiasi cosa, avendo i sorgenti).

Alcune di queste opzioni, e anche altre, sono descritte nella guida utente di Ghostscript (il file Use.htm

(http://www.cs.wisc.edu/~ghost/aladdin/doc/Use.htm) nella distribuzione Ghostscript; probabilmente sarà

installato sotto /usr/doc o /usr/share/doc ) sono tutti ottimi candidati come opzioni per i driver nel sistema di filtri.

10.2.1. Dimensioni e posizione dell’output

La posizione, la dimensione ed il rapporto altezza-larghezza dell’immagine sulla pagina dipendono dal driver specifico della stampante di ghostscript. Se ci si accorge che le pagine sono troppo corte, o troppo lunghe, o troppo grandi di un fattore due, si dovrebbe controllare il sorgente del driver della stampante e modificare i parametri che sembrano pertinenti. Sfortunatamente ciascun driver è diverso dall’altro, e quindi non si può dire esattamente cosa modificare, ma la maggior parte è ragionevolmente ben commentata.

10.2.2. Gamma, dotsize, etc.

Molte stampanti non laser hanno il problema che i singoli punti sono troppo grandi. Ciò dà luogo a stampe troppo scure. Avendo questo problema con un driver non regolabile in altri modi, si dovrà usare una funzione di trasferimento. Semplicemente si crei il seguente file nella directory lib di ghostscript e si aggiunga il suo nome alle chiamate di gs, appena prima del file vero e proprio. Si potrebbe aver bisogno di modificare i valori per adeguarli alla stampante: valori più bassi daranno stampe più chiare. Specialmente se il driver usa l’algoritmo di Floyd-Steinberg per rasterizzare i colori, i valori più bassi (0.2-0.15) sono una buona scelta.

%!
%transfer functions for cyan magenta yellow black
{0.3 exp} {0.3 exp} {0.3 exp} {0.3 exp} setcolortransfer

È anche possibile rimettere a posto stampanti che hanno qualche problema con il colore modificando questi valori. Nel fare questo tipo di cose si raccomanda l’uso del file colorcir.ps, che viene fornito con ghostscript (nella sottodirectory example/), come pagina di prova.

Per molti dei nuovi driver per stampanti a getto d’inchiostro a colori sono presenti opzioni da linea di comando, o diversi driver upp, che implementano gamma e altri cambiamenti per adattare la stampante a diversi tipi di carta. Si dovrebbe guardare anche questo prima di fare tentativi con Postscript per sistemare i problemi.

10.2.3. Stampa a colori con Ghostscript

Il dithering predefinito dei colori in Ghostscript è ottimizzato per dispositivi a bassa risoluzione. Il dithering sarà effettuato in maniera piuttosto grossolana nel tentativo di ottenere un output a 60ppi (non dpi, ppi: l’"apparente" colore dei pixel che si otterrà dopo il dithering). Questo produrrà, sulle moderne stampanti a colore, un output piuttosto povero; in particolare, stampanti a getto d’inchiostro con carta fotografica sono in grado di ottenere impostazioni ppi molto più fini.

Per le regolazioni necessarie, si usi l’opzione di Ghostscript -dDITHERPPI=x, nella quale x è il valore da usare. Questo potrebbe, o non potrebbe, avere effetto con tutti i driver; molti nuovi driver (per esempio il driver stp delle Epson Stylus) implementano un loro dither e non danno importanza a questa impostazione. Alcuni driver possono usare sia il normale driver Ghostscript che un driver specifico per il dithering (per esempio, il driver bjc600 delle Canon Bubblejet).

In effetti il dithering di Ghostscript è piuttosto rudimentale. Molte delle cose necessarie per ottenere un buon output con le stampanti moderne semplicemente in Ghostscript non sono disponibili. La licenza di Ghostscript, e il risultante tipo di sviluppo "a cattedrale", impedisce a vari progetti di sistemare questa situazione (e il mondo del software libero avrebbe pronto e in attesa tutto il software necessario per farlo). Comunque, a partire dall’ Open Source Printing Summit 2000 (http://www.linuxprinting.org/summit.html), tutte le persone coinvolte si stanno parlando, così ci si può aspettare un miglioramento della situazione in tempi brevi.

11. Reti

Una delle capacità di molti spooler è il supporto della stampa tramite la rete su stampanti fisicamente connesse ad altre macchine, o direttamente alla rete. Con una attenta combinazione di filtri e utilità assortite, si può far stampare lpd su stampanti connesse a qualsiasi tipo di rete, in modo del tutto trasparente.

11.1. Stampare su un host Unix/lpd

Per abilitare macchine remote a stampare su una stampante usando il protocollo LPD, si devono elencare tali macchine in /etc/hosts.equiv o /etc/hosts.lpd. (Si noti che aggiungere una macchina a hosts.equiv ha molti altri effetti; ci si assicuri di sapere cosa si sta facendo prima di elencarvi una macchina). Si possono anche abilitare solo certi utenti dell’altra macchina a stampare su una stampante utilizzando l’attributo rs; per informazioni si legga la pagina di

manuale di lpd (http://www.linuxprinting.org/man/lpd.8.html).

11.1.1. Con lpd

Per stampare su un’altra macchina, bisogna aggiungere a /etc/printcap una voce di questo tipo:

# REMOTE djet500
lp|dj|deskjet:\
         :sd=/var/spool/lpd/dj:\
         :rm=machine.out.there.com:\
         :rp=printername:\
         :sh:

Si noti che c’è ancora la coda di stampa sulla macchina locale, gestita da lpd, di modo che se la macchina remota è occupata o fuori linea i lavori di stampa possono essere accodati nell’area di spool fino a che possano essere inviati.

11.1.2. Con rlpr

Si può anche usare rplr per inviare un lavoro di stampa direttamente in una coda su una macchina remota, senza doversi preoccupare di configurare lpd per supportare la stampa remota. La sua maggiore utilità si dimostra quando si stampa solo occasionalmente su un gran numero di stampanti. Dall’annuncio di rlpr:

Rlpr usa il TCP/IP per inviare lavori di stampa a server lpd ovunque su una rete.

A differenza di lpr, non necessita che la stampante remota sia esplicitamente conosciuta alla macchina da cui si vuole stampare (ad esempio tramite /etc/printcap) e pertanto è molto più flessibile e richiede meno amministrazione.

Rlpr può essere usato ovunque si possa usare un normale lpr, ed è compatibile all’indietro con l’lpr BSD.

Il maggior vantaggio che si ottiene con rlpr è la capacità di stampare remotamente da qualsiasi macchina a qualsiasi macchina, senza preoccuparsi di come sia configurato il sistema su cui si desidera stampare. Inoltre può lavorare come un filtro allo stesso modo dell’lpr tradizionale, in modo che applicazioni client in esecuzione su una macchina remota, come Netscape, xemacs e così via possano stampare sulla macchina locale senza sforzo.

Rlpr è disponibile presso Metalab (ftp://metalab.unc.edu/pub/Linux/system/printing/).

11.2. Stampare su una stampante Windows o Samba

Si possono trovare molte più informazioni al riguardo nel Printing to Windows mini-HOWTO.

11.2.1. Da LPD

È possibile dirigere una coda di stampa, attraverso il programma smbclient

(http://www.linuxprinting.org/man/smbclient.1.html) (che fa parte della suite Samba), ad un

servizio di stampa SMB basato su TCP/IP. Samba include uno script chiamato smbprint per farlo: in breve, si deve inserire un file di configurazione per la stampante in questione nella directory di spool, e si deve installare lo script smbprint come if .

In /etc/printcap ci sarà qualcosa del genere:

lp|remote-smbprinter:\
     :sh:\
     :lp=/dev/null:\
     :sd=/var/spool/lpd/lp:\
     :if=/usr/local/sbin/smbprint:

Leggere la documentazione all’interno dello script smbprint per ulteriori informazioni sulla configurazione.

È anche possibile usare smbclient per passare un file direttamente al servizio di stampa SMB senza coinvolgere lpd. Controllare la pagina di manuale.

11.3. Stampare su una stampante NetWare

La suite ncpfs comprende una utilità chiamata nprint che fornisce le stesse funzionalità di smbprint , ma per NetWare. È possibile ottenere ncpfs da Metalab (ftp://metalab.unc.edu/pub/Linux/system/filesystems/ncpfs/). Dalla LSM per la versione 0.16:

“Con ncpfs si possono montare volumi del server NetWare sotto Linux. Inoltre è possibile stampare verso code di stampa NetWare e fare lo spool di code di stampa NetWare verso lo spool di stampa Un*x. Si avrà bisogno del kernel 1.2.x, o 1.3.54 e superiori. ncpfs non funziona con kernel della serie 1.3.x inferiori alla 1.3.54.”

11.3.1. Da LPD

Per far funzionare nprint tramite lpd, serve un piccolo script della shell che stampi lo stdin sulla stampante NetWare, e che va installato come if per una coda di stampa di lpd. Si otterrà qualcosa del tipo:

sub2|remote-NWprinter:\
         :sh:\
         :lp=/dev/null:\
         :sd=/var/spool/lpd/sub2:\
         :if=/var/spool/lpd/nprint-script:

Lo script per nprint sarà qualcosa di simile a questo:

#! /bin/sh
# You should try the guest account with no password first!
# Si dovrebbe provare prima di tutto con un account guest senza password.
/usr/local/bin/nprint -S net -U name -P passwd -q printq-name -

11.4. Stampare su una stampante EtherTalk (Apple)

Il pacchetto netatalk comprende qualcosa di simile a nprint e a smbclient. Altri hanno documentato la procedura per stampare da e verso una rete Apple molto meglio di quanto si potrebbe mai fare qui; si veda il Linux Netatalk-HOWTO (http://thehamptons.com/anders/netatalk/).

11.5. Stampare su una stampante di rete

Molte stampanti sono dotate di un’interfaccia ethernet verso la quale si può stampare direttamente usando il protocollo LPD. Per farlo, si possono seguire le istruzioni allegate alla stampante o al suo adattatore di rete, ma in generale tali stampanti "eseguono" lpd, e forniscono una o più code su cui stampare. Una HP, per esempio, dovrebbe funzionare con un printcap del tipo:

lj-5|remote-hplj:\
         :sh:\
         :sd=/var/spool/lpd/lj-5:\
         :rm=printer.name.com:\
         :rp=raw:

Stampanti HP Laserjet con interfacce JetDirect generalmente supportano due code lpd incorporate: quella "raw" che accetta PCL (e se possibile Postscript) e quella "text" che accetta direttamente codici ascii (e risolve automaticamente l’effetto a gradinata). Con una stampante JetDirect Plus3 a tre porte, le code si chiameranno "raw1", "text2" e così via.

Si noti che la società ISS ha identificato un assortimento di attacchi di tipo "denial of service" che bloccano le interfacce HP Jetdirect. La maggior parte è stata scoperta nell’autunno 98. Questi problemi sono comuni nel codice incorporato; poche apparecchiature da ufficio dovrebbero essere esposte al traffico Internet.

In installazioni su larga scala, specialmente in un ambito in cui alcune stampanti non supportano il PostScript, può essere utile configurare un server di stampa dedicato, verso il quale stampano tutte le macchine, e che esegue le varie istanze di ghostscript. Questo permetterà di mettere in pausa o riordinare la coda, usando i comandi topq e lprm.

Inoltre permette alla GNU/Linux box di agire come server di spool per la stampante, in modo che gli utenti della rete possano completare i loro lavori di stampa velocemente e andare avanti con le loro cose senza dover aspettare che finisca il lavoro di stampa inviato da qualcun altro. È una soluzione suggerita anche quando siano presenti vecchie HP Jetdirects impossibili da sistemare; riduce infatti la probabilità che le stampanti si inceppino.

Per farlo, si dovrà impostare una coda sulla linux box che punti alla stampante HP LJ equipaggiata con l’interfaccia ethernet (come detto prima). Poi si impostino anche tutti i client della LAN perché puntino alla coda LPD (lj-5 nell’esempio riportato sopra).

Alcune stampanti di rete HP in apparenza non tengono conto delle impostazioni delle intestazioni delle pagine inviate dai client; la generazione interna delle intestazioni può essere disattivata connettendosi via telnet alla stampante, premendo due volte il tasto invio e scrivendo "banner: 0" seguito da "quit". Ci sono anche altre impostazioni che si possono cambiare in questo modo; scrivere "?" per vederne una lista.

Tutte le impostazioni possono essere controllate tramite il software webJetAdmin (http://www.hp.com/go/webjetadmin) di HP. Questo pacchetto viene eseguito come demone, e accetta richieste http su una porta designata allo scopo. Tramite l’uso di moduli e di applet Java permette di controllare stampanti HP sulla rete. Teoricamente, può anche controllare code di stampa Unix, ma lo fa tramite il servizio rexec, che è assolutamente insicuro. Sarebbe meglio non usare questa funzione.

11.5.1. Su dispositivi AppSocket

Alcune stampanti (e stampanti messe in rete come "scatole nere") supportano solo una specie di non-protocollo basato su connessioni TCP piane, che qualche volta viene chiamato protocollo "AppSocket". Degne di nota in questa categoria sono le vecchie schede JetDirect (comprese alcune JetDirectEx). Fondamentalmente, per stampare su stampanti di questo tipo si deve aprire una connessione TCP verso la stampante su una porta specifica (di solito 9100, o 9100, 9101 e 9102 per box a tre porte) e trasmetterle il documento da stampare. Il supporto per trasmettere lavori di stampa a porte TCP casuali è incorporato in LPRng, ma con l’lpd BDS non è così semplice. La cosa migliore da fare probabilmente è ottenere e usare una piccola utilità chiamata netcat.

In caso di fallimento lo si può implementare, tra l’altro, usando il programma scritto in Perl riportato sotto. Per ottenere le migliori prestazioni, si usi il programma netcat ("nc"), che più o meno fa le stesse cose in maniera generica. Molte distribuzioni dovrebbero includere netcat.

11.6. Esecuzione di if per una stampante remota con il vecchio LPD

Un difetto delle vecchie versioni di lpd è che l’if non viene eseguito per le stampanti remote. (Versioni successive alla 0.43 comprendono la modifica che ha avuto origine su FreeBSD che permette a if di essere sempre eseguito). Se si ha bisogno di eseguire un if su una stampante remota, e ci si accorge che lpr non funziona, si può ottenere la stampa configurando una coda di stampa doppia e riaccodando il lavoro di stampa. Come esempio si consideri questo

 printcap:
lj-5:\
         :lp=/dev/null:sh:\
         :sd=/var/spool/lpd/lj-5:\
         :if=/usr/lib/lpd/filter-lj-5:
lj-5-remote:sh:rm=printer.name.com:\
         :rp=raw:sd=/var/spool/lpd/lj-5-raw:

alla luce di questo script di filtraggio filter-lj-5 :

#!/bin/sh
gs <options> -q -dSAFER -sOutputFile=- - | \
lpr -Plj-5-remote -U$5

L’opzione -U di lpr funziona solamente se lpr è eseguito come demone, e imposta il nome utente corretto nella seconda coda di stampa. Probabilmente è meglio usare un metodo più robusto per determinare il nome dell’utente, perché in alcuni casi non è il quinto argomento. Si veda la pagina di manuale di printcap

(http://www.linuxprinting.org/man/printcap.5.html) .

11.7. Da Windows

La stampa da un client Window (o presumo OS/2) ad un server Un*x è supportata direttamente su SMB tramite l’uso del pacchetto SAMBA, che supporta anche lo scambio di file tra il file system Un*x e i client Windows.

Samba include una documentazione molto completa, e si possono trovare anche buone FAQ al proposito. La configurazione può essere fatta o tramite un filtro magico sulla macchina Un*x per stampare PostScript, o girandoci intorno installando un driver specifico della stampante su tutte le macchine Windows e creando una coda senza alcun filtro. In alcuni casi fidarsi del driver Windows può produrre un output migliore, ma dal punto di vista amministrativo possono crearsi un sacco di problemi se ci sono molti client Windows. Meglio provare Postscript per primo. Per superare questo problema, le versioni più moderne di Samba dovrebbero supportare il meccanismo automatico di scaricamento dei driver offerto dai server Windows NT.

11.8. Da Apple

Il supporto per la stampa da client Apple viene supportato da Netatalk tramite EtherTalk. Si veda la pagina Netatalk HOWTO (http://thehamptons.com/anders/netatalk/) per maggiori informazioni.

In verità, comunque, qualunque Mac moderno può stampare tramite TCP/IP usando piuttosto bene il protocollo LPD. UVa mette a disposizione una pagina di supporto (http://www.itc.virginia.edu/desktop/mac/ip_printing/ip_printing.html) molto carina che spiega dettagliatamente come impostarlo.

11.9. Da Netware

Il pacchetto ncpfs include un demone chiamato pserver che può essere usato per fornire servizi ad una coda di stampa NetWare. Per quanto ne so, questo sistema richiede NetWare basato su Bindery, ad esempio 2.x, 3.x o 4.x con l’accesso bindery abilitato.

Si veda il sito FTP di ncpfs (ftp://ftp.gwdg.de/pub/linux/misc/ncpfs/) per maggiori informazioni su ncpfs e sul suo programma pserver.

11.10. Amministrazione di stampanti di rete

Quasi tutte le stampanti di rete supportano alcuni metodi amministrativi remoti: spesso si possono configurare tramite pagine web facili da usare. Molto più utile è il supporto per l’amministrazione via SNMP: tipicamente, sarà possibile trovare interessanti informazioni sullo stato della stampante, come i livelli dell’inchiostro e della carta, i volumi di stampa, e così via; inoltre solitamente si possono cambiare alcune impostazioni. Il controllo delle stampanti via SNMP, e alcune altre cose relative alla stampa, sono state standardizzate dal Printer Working Group (http://www.pwg.org/) di IEEE.

11.10.1. npadmin

Npadmin (http://npadmin.sourceforge.net/) è un programma a linea di comando che offre un’interfaccia per le funzionalità SNMP delle stampanti di rete. Implementa il Printer MIB (http://www.ietf.org/rfc/rfc1759.txt) standard, insieme a pochi schemi proprietari dei venditori usati principalmente per vecchi dispositivi. Supporta sia azioni tese a trovare le stampanti che diverse richieste sullo stato della stampante.

npadmin ha una pagina di manuale (http://npadmin.sourceforge.net/man/) eccellente, e molte distribuzioni basate su RMP e dpkg lo distribuiscono in pacchetti precompilati.

11.10.2. Altri strumenti SNMP

Oltre a npadmin, ci sono altri strumenti SNMP che potrebbero rivelarsi utili. snmptraplogd può effettuare il log di eventi trappola SNMP, il che è utile per controllare stampanti bloccate, senza carta, e così via; può ritrasmettere in modo semplice alcuni eventi ad un paginatore, o inviare una email.

Anche se npadmin mette a disposizione un supporto semplificato per molte interfacce SNMP delle stampanti di rete, alcune tra queste potrebbero includere ulteriori e poco comuni estensioni aggiunte dai produttori. In questo caso, si possono usare gli strumenti SNMP della CMU, che permettono operazioni SNMP GET e SET arbitrarie, come pure ricerche e simili. Con essi e con un po’ di lavoro, sara’ possibile usare qualunque funzione SNMP offerta dal MIB della stampante. Potrebbe essere necessario ottenere un MIB dal produttore per capire quali sono le variabili; alcune volte, i produttori pensano che gli utenti useranno solo gli strumenti proprietari che forniscono.

libprinterconf (http://sourceforge.net/project/?group_id=3648) di VA Linux include del codice per trovare le stampanti di rete. Le stampanti sono identificate tramite una libreria interna contenente firme di stampanti; al momento questa libreria non è molto grande, ma include molti modelli comuni di stampanti di rete.

12. Stampanti solo Windows

Come si diceva, alcune stampanti non sono supportate perché non parlano il normale linguaggio delle stampanti, usando invece la CPU del computer per interpretare una mappa di bit che viene poi trasmessa alla stampante ad una velocità predefinita. Alcune volte queste stampanti parlano anche qualcosa che somiglia al PCL, ma più spesso no. In pochi casi (si tratta di stampanti di livello molto basso) non usano nemmeno una normale porta parallela, ma fanno affidamento sul driver del venditore per emulare il comportamento dell’hardware (principalmente il controllo di flusso).

Comunque, c’è modo di girarci intorno se ci si trova bloccati con un catorcio di questo tipo.

12.1. Redirezionatore Ghostscript per Windows

Ora è disponibile un driver per stampanti Ghostscript (chiamato mswinpr2) che stampa usando chiamate GDI Windows. C’è anche uno strumento che serve a redirigere le porte chiamato redmon che passerà un lavoro di stampa attraverso Ghostscript prima di stamparlo. (Più o meno come un filtro if nell’LPD Unix). Messi insieme, questi due strumenti permettono ad una macchina Windows di stampare PostScript verso una stampante solo Windows attraverso il driver del venditore.

Una stampante locale che non può essere usata direttamente può essere esportata come stampante "Postscript" usando redmon, Ghostscript e mswinpr2 da un PC Windows per stampare attraverso il driver del venditore.

12.2. Stampanti HP per Windows

Alcune stampanti HP usano "Printing Performance Architecture" (un modo commerciale per dire "siamo troppo economiche per poter implementare PCL"). Il supporto viene fatto in maniera indiretta tramite il traduttore pbm2ppa scritto da Tim Norman. Sostanzialmente, tramite ghostscript si interpreta PostScript in una immagine bitmap in formato pbm e usando pbm2ppa lo si traduce in un formato ppa specifico per la stampante pronto per essere scaricato alla stampante. Questo programma ormai si può trovare anche nel formato dei driver di ghostscript.

Il software ppa può essere preso dalla sua home page (http://www.rpi.edu/~normat/technical/ppa/); pbm2ppa supporta alcuni modelli di HP 720, 820 e 1000; si veda la documentazione compresa nel pacchetto per maggiori dettagli.

12.3. Stampanti Lexmark per Windows

Quasi tutte le stampanti a getto d’inchiostro economiche della Lexmark usano un linguaggio proprietario e sono quindi stampanti per Windows. Comunque Henryk Paluch ha scritto un programma che può stampare sulla Lexmark 7000: si spera che sia in grado di capire i colori ed estendere il supporto ad altre stampanti Lexmark a getto d’inchiostro. Si veda qui (http://bimbo.fjfi.cvut.cz/~paluch/l7kdriver/) per maggiori informazioni.

Allo stesso modo, ora si possono trovare driver per le stampanti 5700, 1000, 1100, 2070, 3200 e altre. Si veda l’elenco delle stampanti supportate, e il mio sito web, per maggiori informazioni su come ottenere questi driver.

13. Come stampare su un fax

È possibile stampare su un fax con o senza un modem.

13.1. Usando un faxmodem

Ci sono una quantità di programmi per fax che permettono di spedire e ricevere fax. Uno dei più potenti è HylaFax (http://www.hylafax.org/) di Sam Leffler. Supporta di tutto, dall’uso di più modem al broadcasting.

SuSE fornisce un client Java HylaFax che lavora dichiaratamente su qualunque piattaforma Java (inclusi Windows e GNU/Linux). Ci sono anche client per fax non Java che lavorano su molte piattaforme; GNU/Linux si potrà certamente occupare di inviare fax da una rete.

È anche disponibile, e probabilmente è una scelta migliore per piccole installazioni, efax (http://casas.ee.ubc.ca/efax/), un semplice programma che spedisce e riceve fax. Il programma di getty mgetty può ricevere fax tramite efax (e può anche gestire la posta vocale o login interattivi).

13.2. Usando il servizio di stampa remota

Esiste un servizio sperimentale che permette di spedire un messaggio email contenente qualcosa che si vorrebbe stampare in modo che questo compaia su un fax da qualche altra parte. Essendo supportati anche formati come il postscript, questo è un servizio che può essere utile, anche se la copertura mondiale è a macchie. Per maggior informazioni sulla stampa tramite servizi di stampa remota si veda il sito WWW sulla stampa remota (http://www.tpc.int/).

13.3. Servizi di invio fax commerciali

Il servizio di invio fax basato sul web viene fornito da una quantità di società. EFax (http://www.efax.com/), in particolare, offre la ricezione gratuita di fax (unicamente al proprio numero di fax) tramite email, mentre la trasmissione è a pagamento. Altre società offrono servizi simili.

14. Come generare qualcosa che valga la pena stampare

Qui abbiamo veramente tantissimi programmi. Sostanzialmente Linux può eseguire molti tipi di binari con vari livelli di successo: Linux/x86, Linux/Alpha, Linux/Sparc, Linux/foo, iBCS, Win16/win32s (con dosemu, e, un giorno, con Wine), Mac/68k (con Executor) e Java. Tratteremo solo di applicazioni native per Linux e di programmi comuni per Unix.

14.1. Linguaggi di markup

La maggior parte dei linguaggi di markup è adatta a progetti molto grandi o ripetitivi, nei quali si desidera che sia il computer a controllare l’aspetto del testo, per rendere tutto uniforme.

nroff

Questo è stato uno dei primi linguaggi di markup nelle versioni originali di Unix. Le pagine di manuale sono l’esempio più comune di testo formattato con le macro *roff; molte persone lo gradiscono, ma nroff ha una sintassi più arcana del necessario (si veda Figura 12), che lo rende inadeguato per nuovi lavori. Vale la pena sapere, comunque, che si può comporre una pagina di manuale direttamente in postscript con groff. La maggior parte dei comandi man lo fanno per vostro conto con man -t foo | lpr .

Figura 12. Esempio di input roff

    .B man
    is the system's manual pager. Each
    .I page
    argument given to
    .B man
    is normally the name of a program, utility or function.
    The
    .I manual page
    associated with each of these arguments is then found and
    displayed. A
    .IR section ,

if provided, will direct
.B man
to look
only in that
.I section
of the manual.

TeX

TeX, ed il package di macro LaTeX, è uno dei più usati linguaggi di markup in ambiente Un*x anche se non è nato con Unix, ed è disponibile per un’ampia varietà di sistemi. Molti lavori tecnici sono scritti in LaTeX perchè semplifica notevolmente i problemi di aspetto della pagina ed è ancora uno dei pochi sistemi di text processing che supporta bene e completamente la simbologia matematica. TeX produce file dvi , che possono essere convertiti in PostScript oppure nel PCL di Hewlett Packard con dvips o dvilj. Per installare TeX o LaTeX usare l’intero gruppo di pacchetti teTex, che contiene tutto il necessario. Le installazioni più recenti includono pdfTeX e pdfLaTeX, che producono direttamente file Adobe PDF. Sono disponibili comandi per creare, nel file PDF, hyperlink e funzioni di navigazione.

Figura 13. Esempio di input LaTeX

\subsubsection{NAT}
Each real server is assigned a different IP address, and the NA
implements address translation for all inbound and outbound
packets.
  \begin{description}
  \item[Advantage] Implementation simplicity, especially if we
already implement other NAT capabilities.
  \item[Disadvantage] Return traffic from the server goes through
address translation, which may incur a speed penalty.  This
probably isn't too bad if we design for it from the
beginning.
  \item[Disadvantage] NAT breaks the end-to-end semantics of normal
internet traffic.  Protocols like ftp, H.323, etc would
require special support involving snooping and in-stream
rewriting, or complete protocol proxying; neither is likely
to be practical.
  \end{description}

SGML

C’è almeno un parser sgml libero per i sistemi Un*x; esso forma la base del sistema di documentazione Linuxdoc-SGML, ma supporta anche altri DTD, in particolare DocBook. Questo documento è scritto in DocBook-DTD SGML; si veda, per un esempio, Figura 14.

Figura 14. Esempio di DocBook SGML

<varlistentry>
<term>SGML</term>
<listitem>
<para>
There is at least one free SGML parser available for Un*x
systems; it forms the basis of Linuxdoc-SGML's homegrown
document system.  It can support other DTD's, as well, most
notably DocBook.  This document is written in DocBook-DTD
SGML.
</para>
</listitem>
</varlistentry>

14.2. Elaboratori di testo WYSIWYG

Non c’è carenza di elaboratori di testo WYSIWYG: sono disponibili parecchie suite complete di programmi per l’ufficio, compresa una che è libera per uso personale (StarOffice).

StarOffice

Questa completa suite per l’ufficio include tutte le funzioni che ci si potrebbe aspettare, inclusa l’importazione ed esportazione di file in formato Microsoft Office (compresi documenti Word). C’è un mini-HOWTO che spiega come ottenerlo ed installarlo. Dovrebbe funzionare con tutte le stampanti compatibili con GNU/Linux, visto che genera PostScript.

WordPerfect

Corel distribuisce una versione di base di WordPerfect 8 libera per GNU/Linux, e vende vari pacchetti di Word Perfect Office 2000 (che include WordPerfect, Corel Draw e Quattro Pro versione 9). La pagina Linux WordPerfect tipi di caratteri e stampanti (http://www.rodsbooks.com/wpfonts/) contiene informazioni su come configurare WordPerfect per l’uso sia con Ghostscript che con il suo driver incorporato (che in apparenza è identico al driver di WordPerfect per DOS, se il driver della stampante non è incluso nella distribuzione).

Applix

Applix è una suite per l’ufficio cross-platform (cioè che funziona su diversi Unices, su Windows e su altri) venduta dalla Applix. Anche Red Hat e SuSE la vendevano quando era l’unica suite disponibile; ora le vendite sono tornate alla Applix. Questa è l’unica suite di applicazioni nativa in stile Unix; si integra probabilmente meglio con il modo Unix di fare le cose.

AbiWord

AbiWord (http://www.abisource.com/) è uno dei vari progetti di elaboratori di testo WYSIWYG GPL, che ha creato un elaboratore di testi molto carino basato su formato XML e che può importare file Word. AbiWord è ancora in costruzione, anche se per ora è utilizzabile per piccole cose.

Figura 15. AbiWord

LyX

Lyx è un front-end per LaTeX che sembra molto promettente. Per maggiori informazioni si veda la pagina web di LyX (http://www.lyx.org/). Se ne può trovare anche una versione in stile KDE, che si chiama Klyx; l’autore di LyX e il promotore di KDE sono la stessa persona.

Figura 16. LyX

Maxwell

Maxwell è un elaboratore di testo molto semplice basato su un formato MS RTF, che nacque come prodotto commerciale ma ora viene distribuito sotto GPL.

Sarebbero gradite da altri venditori notizie sui prodotti che offrono.

15. Stampare fotografie

Ci sono molti particolari da considerare per poter ottenere un output fotografico decente dalle stampanti comuni. Per acquistare una stampante fotografica, si vedano i relativi suggerimenti in la Sezione 5.4.

15.1. Ghostscript e le fotografie

Ghostscript incontra alcune difficoltà nell’interpretare i colori fotografici attraverso quasi tutti i driver. I problemi sono di vario tipo:

• In molti driver il supporto per la sintonizzazione dei colori è scarso. Spesso i colori non corrispondono all’output di un driver Windows o a quello visibile sullo schermo. D’altra parte il supporto per i colori in tutti i driver, e in Ghostscript nel suo insieme, sono regolabili con facilità; un’impostazione da controllare sicuramente è la "Gamma" (si veda la sezione la Sezione 10.2.2), e se ne possono trovare altre nel file di documentazione Use.htm di Ghostscript.

• Al momento c’è un solo driver Ghostscript con il supporto 6 e 7 per la stampa a colori, che è ancora in versione beta e supporta quasi tutti i modelli Epson Stylus Photo: pare che produca colori anche migliori di quelli ottenibili con un driver Windows (!). Il driver Ghostscript in sé non supporta colori non CMYK o RGB; c’è bisogno di un po’ di lavoro per risolvere questo problema.

• Ghostscript spesso effettua il dithering grossolanamente, o generando stampe con metodi artificiosi, come generare delle strisce. Il dithering solitamente può essere corretto; si veda la Sezione 10.2.3, e si legga la documentazione per il proprio driver.

Alcuni di questi problemi si possono correggere mettendo bene a punto Ghostscript; per maggiori informazioni si veda la Sezione 10. Sarà molto più facile giocherellare con le opzioni di Ghostscript dichiarandole come opzioni nel sistema di spool.

Detto questo, la soluzione più ovvia è di usare software non Ghostscript per stampare le foto, e in effetti questo software esiste. Il contendente principale è il plugin di stampa di Gimp, che supporta la stampa pixel-a-pixel su stampanti Epson Styluses e Postscript (con un supporto elementare di PPD). Una porzione di questo driver per le Epson Stylus è disponibile per Ghostscript, così come il driver stp. Un’altra possibilità è usare gli assortiti programmi esterni pnm-to-foo, che sono in grado di stampare sulle Lexmark più economiche; queste stampe tentano di stampare mappe pixel-per-pixel.

Naturalmente la soluzione migliore è comprare una stampante Postscript, che può essere completamente controllata dal software libero disponibile, e che stamperà sfruttando tutte le capacità della stampante.

15.2. Carta

Il risultato ottenuto usando stampanti a getto d’inchiostro a colori dipende moltissimo dal tipo di carta usato. La carta lucida rivestita, molto costosa, permette di ottenere un risultato molto simile ad una fotografia, mentre la carta normale non rivestita spesso produce colori smorti e dettagli sfocati. Carte non lucide rivestite permetteranno di ottenere una via di mezzo, e sono le migliori anche per stampare testo. Carta fotografica rigida, lucida e rivestita produrrà un risultato simile a quello ottenibile con carta lucida più leggera che sembrerà una foto normale.

15.3. Impostazioni della stampante

Per ottenere un risultato fotografico su quasi tutte le stampanti a getto d’inchiostro a colori si dovrebbe usare il metodo di stampa più strettamente interlacciato (e più lento); altrimenti zone di colore pieno potrebbero avere delle bande o colori smorti. Generalmente con Ghostscript succede quando si usa la risoluzione più alta. Con stampanti Postscript potrebbe essere necessario aggiungere qualche riga di codice al prologo basandosi su quanto indicato dal file PPD. Il supporto PPD di Gimp non include impostazioni per la qualità di stampa (specifici per una stampante), ma ne ho aggiunto uno io per mio uso; potete contattarmi se vi interessa. Usando PDQ o CUPS si possono controllare facilmente tutte le impostazioni della stampante. Si possono aggiungere queste opzioni anche alle stampanti Postscript tramite il libppd di VA Linux e il front-end GPR.

15.4. Durata della stampa

Le stampe ottenute da stampanti a getto d’inchiostro a colori svaniscono dopo pochi anni, specialmente se esposte a molta luce ed aria; è un problema di inchiostro. Stampanti a cartucce di solo inchiostro come le Epson e le Canon possono usare un tipo di inchiostro per archivi che è meno soggetto a questo problema. Le stampanti più recenti spesso usano inchiostro basato su pigmenti, che non svanisce in fretta come quelli più vecchi basati su tinture. In realtà, nessuna stampa di questo tipo è adatta per essere archiviata a lungo termine: meglio usare un CD-R e archiviare quello.

15.5. Software di tipo shareware e commerciale

C’è un programma chiamato xwtools (http://home.t-online.de/home/jj.sarton/startE.htm) che supporta stampe fotografiche con tutti gli annessi e connessi su un buon assortimento di stampanti Epson, HP e Canon. Sfortunatamente, essendo scritto sotto NDA non mette a disposizione il sorgente. A meno che sia usato per la stampante Epson Stylus Color 300 su un sistema GNU/Linux con architettura x86, costa E15 per uso personale; non si conosce il prezzo commerciale.

Il pacchetto ESP Print Pro di Easy Software supporta alcune stampanti che altrimenti non sarebbero supportate. Questi driver funzionano, anche se sembra che non siano messi bene a punto per le fotografie.

16. Anteprima su schermo di immagini stampabili

Quasi tutto ciò che può essere stampato può anche essere visualizzato sullo schermo.

16.1. PostScript

Ghostscript ha un driver per X11, che viene sfruttato al meglio sotto il controllo del visualizzatore PostScript gv (http://wwwthep.physik.uni-mainz.de/~plass/gv/). Le ultime versioni di questi programmi supportano anche i file PDF. gv ha rimpiazzato il vecchio visualizzatore "Ghostview"; la nuova interfaccia utente è molto più bella e ricca di funzioni rispetto alla vecchia interfaccia grafica Athena.

Figura 17. Gv

16.2. TeX dvi

I Device Indipendent file di TeX possono essere visti sotto X11 con xdvi (http://www.linuxprinting.org/man/xdvi.1.html). Le versioni moderne di xdvi chiamano ghostscript per rendere alcune particolarità del PostScript.

Esiste un driver per VT100 che si chiama dgvt . Tmview lavora con GNU/Linux e la svgalib, in mancanza di meglio.

16.3. Adobe PDF

L’Acrobat Reader di Adobe è disponibile per GNU/Linux; basta scaricarlo dal sito web di Adobe (http://www.adobe.com/).

Si può usare anche xpdf, che è software libero, e gv supporta la visualizzazione di file PDF se usato con gs sotto X11.

17. Stampanti seriali con lpd

Le stampanti seriali sono piuttosto difficili da usare sotto lpd.

17.1. Configurazione di printcap

Lpd fornisce cinque attributi da configurare in /etc/printcap per controllare le impostazioni della porta seriale a cui è collegata la stampante. Si legga la pagina di manuale di printcap (http://www.linuxprinting.org/man/printcap.5.html) e si prenda nota del significato degli attributi br#, fc#, xc#, fs# e xs#. Gli ultimi quattro sono mappe di bit che indicano le impostazioni della porta. L’attributo br# è semplicemente il baud rate, ad esempio " br#9600".

È molto semplice tradurre le impostazioni stty (http://www.linuxprinting.org/man/stty.1.html) in attributi per printcap. Se ce n’è bisogno, si guardi ora la pagina di manuale di stty.

stty può essere usato per configurare la porta della stampante, in modo da poter fare il cat di un file sulla porta ed ottenere una stampa corretta. Nel mio caso «stty -a» fornisce le seguenti informazioni:

dina:/usr/users/andy/work/lpd/lpd# stty -a < /dev/ttyS2
speed 9600 baud; rows 0; columns 0; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W;
lnext = ^V; min = 1; time = 0;
-parenb -parodd cs8 hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr
-igncr -icrnl ixon -ixoff -iuclc -ixany -imaxbel
-opost -olcuc -ocrnl -onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0
bs0 vt0 ff0
-isig -icanon -iexten -echo -echoe -echok -echonl -noflsh -xcase
-tostop -echoprt -echoctl -echoke

L’unica differenza tra questo ed il modo in cui la porta è inizializzata al boot è data da -clocal, -crtscts, e ixon. Le impostazioni della porta potrebbero essere differenti, a seconda di come la stampante effettua il controllo di flusso.

In realtà l’uso di stty è un po’ strano. Dato che stty opera sul terminale collegato al suo standard input, lo si usa per manipolare una data porta seriale utilizzando il carattere "<" come sopra.

Dopo aver configurato correttamente le impostazioni di stty, in modo che «cat file > /dev/ttyS2» (nel mio caso) invii il file alla stampante, si guardi il file /usr/src/linux/include/asm-i386/termbits.h. Questo file contiene molti #defines ed alcune strutture (si potrebbe farne il cat sulla stampante (che ormai funziona) e usarlo come punto di partenza). Si veda la sezione che comincia con

/* c_cflag bit meaning */
#define CBAUD   0000017

Questa sezione elenca i significati dei bit fc# ed fs# i cui nomi (dopo il baud rate) coincidono con una delle linee dell’output di stty. Non è forse facile?

Annotare quali di questi settaggi sono preceduti da un - nell’output di stty e sommare tutti questi numeri (sono in ottale). Questo rappresenta i bit che vanno azzerati, così il risultato è la capacità di fc# . Naturalmente ci si ricordi che poi i vari bit verranno impostati direttamente dopo essere stati azzerati, pertanto si potrà semplicemente usare "fc#0177777" (io lo faccio).

Ora fare lo stesso per quei settaggi (elencati in questa sezione) che non hanno un - davanti nell’output di stty. Nell’esempio i più importanti sono CS8 (0000060), HUPCL (0002000), e CREAD (0000200). Controllare anche il flag relativo al baud rate (il mio è 0000015). Sommare tutti questi numeri, ottenendo nell’esempio 0002275. Questo numero viene messo nelle capacità di fs# ("fs#02275" funziona correttamente nell’esempio).

Ripetere il procedimento di azzeramento e impostazione dei bit nella successiva sezione del file di include, "c_lflag bits". Nell’esempio non c’è niente da impostare, quindi vengono usati " xc#0157777" e "xs#0".

17.2. Stampanti seriali antiquate che perdono caratteri

Jon Luckey ha evidenziato come alcune stampanti seriali con interfacce da due lire e buffer molto piccoli intendono veramente fermarsi quando lo indicano attraverso il controllo di flusso. Jon ha scoperto che disabilitando il buffer FIFO

della porta seriale 16550 tramite setserial (http://www.linuxprinting.org/man/setserial.8.html)

si risolve il problema della perdita dei caratteri (in pratica specificando il tipo UART della porta seriale come 8250).

18. Cosa manca?

Ancora non esiste tutto il necessario per un sistema completo di stampa. Sono in corso molti progetti per questo, anche se la maggior parte non ha ancora prodotto codice utile, e gli sforzi per standardizzare i protocolli e le API necessarie sono appena agli inizi.

18.1. Integrazione dei programmi

Il problema è riuscire a far parlare tra di loro le varie parti, specialmente in modo indipendente dallo spool. È un problema che si nota maggiormente in quelle patetiche applicazioni che cercano di supportare il controllo di tutte le "normali" funzioni di stampa. Non c’è modo per chi scrive le applicazioni di ottenere informazioni sulle stampanti, sui lavori di stampa e così via; non c’è un metodo standard per inviare i lavori di stampa; non c’è modo di conoscere lo stato dei lavori di stampa; a dire la verità non c’è nemmeno un metodo standard per generare i dati da stampare (anche se la maggior parte dei nuovi sistemi desktop ci provano mettendo a disposizione servizi specifici per il desktop).

18.2. Tipi di carattere

La gestione dei tipi di carattere sui sistemi liberi è piuttosto difficile. Il monitor, la stampante, le applicazioni e i file di dati dovrebbero avere tutti accesso agli stessi caratteri. Sfortunatamente non è così. Questa situazione dovrebbe risolversi con l’avvento di xft2 e fontconfig, di cui faranno uso le prossime distribuzioni. Per quanto si sa, RedHat 8.0 è stata la prima distribuzione ad usare xft2.

18.3. Driver

C’è ancora un po’ da lavorare sui driver. Sono già migliorati molto negli ultimi anni, ma ancora oggi non tutte le stampanti sono supportate.

I venditori di stampanti dovrebbero avere un ruolo di primo piano in questo caso: con la continua crescita di Linux diventa sempre più difficile per loro ignorare questa fascia di utenti.

19. Ringraziamenti

Un ringraziamento speciale va a Grant Taylor che ha creato questo HOWTO e a Till Kampeter per foomatic e per i suoi esperti consigli.

Le informazioni su smbprint provengono da un articolo di Marcel Roelofs <marcel@paragon.nl> .

Le informazioni su nprint per usare stampanti NetWare sono state fornite da Michael Smith

<mikes@bioch.ox.ac.uk>.

La sezione sulle stampanti seriali proviene da Andrew Tefft <teffta@engr.dnet.ge.com>.

Il materiale su gamma e cose del genere per gs è stato mandato da Andreas <quasi@hub-fue.franken.de>.

I due paragrafi sul closing_wait di 30 secondi del driver seriale sono stati mandati da Chris Johnson

 <cdj@netcom.com>.

Robert Hart ha inviato un paio di paragrafi eccellenti sull’impostazione di un server di stampa su stampanti di rete HP che Grant ha usato così come erano.

E uno speciale ringraziamento va alle dozzine di persone che hanno segnalato errori tipografici, indirizzi errati, e errori nel documento nel corso degli anni.

A. GNU Free Documentation License

Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.

A.1. PREAMBLE

The purpose of this License is to make a manual, textbook, or other functional and useful document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others.

This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software.

We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.

A.2. APPLICABILITY AND DEFINITIONS

This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law.

A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language.

A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document’s overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.

The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none.

The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words.

A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not "Transparent" is called "Opaque".

Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, Post-Script or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only.

The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work’s title, preceding the beginning of the body of the text.

A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as "Acknowledgements", "Dedications", "Endorsements", or "History".) To "Preserve the Title" of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this definition.

The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License.

A.3. VERBATIM COPYING

You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3.

You may also lend copies, under the same conditions stated above, and you may publicly display copies.

A.4. COPYING IN QUANTITY

If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document’s license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects.

If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.

If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computernetwork location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public.

It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.

A.5. MODIFICATIONS

You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:

A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission.

B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement.

C. State on the Title page the name of the publisher of the Modified Version, as the publisher.

D. Preserve all the copyright notices of the Document.

E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.

F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below.

G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document’s license notice.

H. Include an unaltered copy of this License.

I. Preserve the section Entitled "History", Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence.

J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission.

K. For any section Entitled "Acknowledgements" or "Dedications", Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein.

L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles.

M. Delete any section Entitled "Endorsements". Such a section may not be included in the Modified Version.

N. Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section.

O. Preserve any Warranty Disclaimers.

If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version’s license notice. These titles must be distinct from any other section titles.

You may add a section Entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard.

You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one.

The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version.

A.6. COMBINING DOCUMENTS

You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers.

The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work.

In the combination, you must combine any sections Entitled "History" in the various original documents, forming one section Entitled "History"; likewise combine any sections Entitled "Acknowledgements", and any sections Entitled "Dedications". You must delete all sections Entitled "Endorsements".

A.7. COLLECTIONS OF DOCUMENTS

You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects.

You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.

A.8. AGGREGATION WITH INDEPENDENT WORKS

A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation’s users beyond what the individual works permit. When the Document is included an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document.

If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document’s Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate.

A.9. TRANSLATION

Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail.

If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title.

A.10. TERMINATION

You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.

A.11. FUTURE REVISIONS OF THIS LICENSE

The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/copyleft/.

Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation.

A.12. ADDENDUM: How to use this License for your documents

To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page:

Copyright (c) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".

If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the "with...Texts." line with this:

with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.

If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation.

If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.