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 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.
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. Il Software Administrators Manual contiene tutto quello che serve sapere per configurare stampanti con CUPS.
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.
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: |
Adesso si legga la pagina di manuale di printcap .
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. |
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: |
#!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"; |
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 è 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 è 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 è 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 rhs-printfilters.
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.
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 perché è loro intenzione donare il codice al progetto gnu.
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:
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; si possono vedere alcuni
screenshot di GPR in la Sezione 3.4.3.
LPR invia le opzioni a LPD come attributo esteso nel file di controllo di LPD.
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.
I pacchetti RPM, o gli archivi compattati dei sorgenti, si possono ottenere dal sito web del progetto su SourceForge. Per i dettagli sull'installazione, si consulti il micro-HOWTO. 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 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.
È 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. |
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:
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".
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 |
PrintQuality
sono
Quick
, Normal
,Pres
, o
Image
. Si potrebbe dare un comando del tipo:
% lpr |
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
.
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.
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 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).
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 PageCount dopo ogni lavoro di stampa. Dovrebbe funzionare correttamente per tutti i lavori di stampa. Si veda la sezione la Sezione 11.10.1 per maggiori informazioni su npadmin.