Linux Printing HOWTO - Storia di produzione
Nota di Mark Komarinski <markk@auratek.com>:
Desidero ringraziare Matt Foster per aver fatto un sacco di lavoro nella riscrittura di
questo HOWTO. Ho deciso di preservare il suo stile nel provvedere a tutte le aggiunte
necessarie ad aggiornare il documento.
Nota di Matt Foster <mwf@engr.uark.edu>:
Questa versione del Linux Printing HOWTO è una completa riscrittura di quella originaria
scritta da Grant Taylor <grant@god.tufts.edu> e Brian McCauley <B.A.McCauley@bham.ac.uk>.
Ho cercato di coprire lo stesso materiale analizzato da Grant e Brian nel loro HOWTO, ma ho
al tempo stesso radicalmente modificato lo stile della presentazione e la sua profondità.
La mia speranza è che questo sforzo renda l'HOWTO più completo e scorrevole nella lettura.
Posso solo sperare che voi concordiate con me.
Cronologia delle versioni
v1.2.2
- reindicizzato, altre modifiche per l'inclusione nella documentazione RedHat. Grazie Ed!
v1.2.1
- aggiornamenti, alcune modifiche per la pubblicazione in Dr. Linux.
v1.2
- stampanti windows.
- modificata la dimensione massima dei file stampabili.
v1.11
- nuovo curatore!
- aggiunte informazioni su lpc.
- aggiunti dei suggerimenti per la soluzione di problemi.
- un inizio sulla stampa di file grafici.
v1.1
- riviste alcune espressioni.
- introdotta la sezione sulla stampa PostScript
- ho cercato di rendere alcune espressioni con maggior chiarezza 8-)
- estesa la trattazione delle utility di stampa Linux più basilari.
v1.0
- versione pubblica iniziale del Printing Usage HOWTO
Copyright e Marchi Registrati
Some names mentioned in this HOWTO are claimed as copyrights and/or
trademarks of certain persons and/or companies. These names appear
in full or initial caps in this HOWTO.
(c) 1995 Matt Foster (mwf@engr.uark.edu)
(c) 1996-1997 Mark F. Komarinski (markk@auratek.com)
All translations, derivative works, or aggregate works incorporating
any Linux HOWTO documents must be covered under this copyright notice.
That is, you may not produce a derivative work from a HOWTO and impose
additional restrictions on its distribution. Exceptions to these rules
may be granted under certain conditions; please contact the Linux HOWTO
coordinator at the address given below.
In short, we wish to promote dissemination of this information through as
many channels as possible. However, we do wish to retain copyright on the
HOWTO documents, and would like to be notified of any plans to redistribute
the HOWTOs.
If you have questions, please contact Tim Bynum, the Linux HOWTO
coordinator, at <linux-howto@sunsite.unc.edu>. You may finger this address
for phone number and additional contact information.
Dove reperire il Linux Printing HOWTO
printing!downloading HOWTOs
L'autore raccomanda a chi desideri stampare l'HOWTO di procurarsi la versione PostScript del documento,
che è stata impaginata in uno stile che ne rende la lettura più semplice e piacevole.
La versione PostScript è reperibile in molti dei siti di distribuzione di Linux, come SunSITE
).
La traduzione italiana è disponibile al sito dell'Italian LDP (ILDP) (N.d.T.).
Commenti
Domande, commenti e correzioni relative a questo HOWTO possono essere dirette
(in lingua inglese N.d.T.) a <markk@auratek.com>.
Ringraziamenti
I miei ringraziamenti vanno a coloro che hanno speso il loro tempo nel leggere le versioni alfa
di questo HOWTO e hanno fornito molti commenti e suggerimenti utili. Qualcuno di voi potrebbe
notare l'effetto dei suoi commenti in questa versione del documento.
Vorrei anche ringraziare Matt Foster per aver compiuto la ristesura iniziale.
La stampa sotto Linux
Questa sezione del documento illustra come stampare file, esaminare la coda di stampa, rimuovere
file dalla coda di stampa, formattare file prima di stamparli e configurare l'ambiente di stampa.
Storia della stampa sotto Linux
printing!history of
Il sistema di stampa di Linux ---il sistema lp--- è un porting del codice sorgente
scritto dai Regents of the University of California per la distribuzione di UNIX nota come BSD
(Berkeley Software Distribution).
Stampa di un file usando lpr
printing!using lpr command
lpr command!usage example
La via di gran lunga più semplice di stampare un file sotto Linux è quella di inviare il file
che si intende stampare direttamente alla stampante. Uno dei modi in cui questo può esser
fatto è tramite l'uso del comando cat. Per l'utente root è possibile eseguire
un comando come il seguente
# cat tesi.txt > /dev/lp
Nel caso in esame /dev/lp è un link simbolico all'effettivo dispositivo di stampa
- indipendentemente dal suo essere una stampante a matrice di punti, una laser o un plotter
(si veda ln(1) per ulteriori informazioni sui link simbolici).
Per ragioni di sicurezza, solo l'utente root ed utenti facenti parte dello
stesso gruppo del demone di stampa possono accedere direttamente al dispositivo di stampa.
Per accedere alle stampanti devono quindi essere usati comandi come
lpr, lprm e lpq.
Per questi motivi gli utenti devono usare il comando lpr per stampare un file.
Il comando lpr si occupa di tutti i compiti inizialmente necessari nella stampa
di un file prima di cedere il controllo al programma lpd, il line printing daemon,
che si occuperà di indicare alla stampante come procedere alla effettiva stampa del file.
Quando il comando lpr viene eseguito, procede a copiare il file specificato
dall'utente in una directory speciale (directory di spool), ove il file rimarrà sino a quando
lpd non abbia completato la sua stampa. Non appena lpd riceve comunicazione
dell'esistenza di un file nella coda di stampa, provvede a creare una copia di se stesso
(tramite una procedura detta dai programmatori "di forking"). Questa copia del programma
provvederà alla stampa del file mentre il processo originario si pone in attesa della prossima
richiesta di stampa.
Tramite questo sistema è possibile porre più file nella coda di stampa simultaneamente.
La sintassi del comando lpr(1) è una di quelle molto familiari agli utenti:
$ lpr [ opzioni ] [ nomefile ... ]
Se nomefile non viene specificato lpr assume che l'imput provenga dal file
di standard input stdin (solitamente la tastiera o l'output di un altro programma).
Questo permette agli utenti di reindirizzare l'output di un altro processo direttamente al
programma di stampa, come nell'esempio seguente:
$ cat tesi.txt | lpr
oppure
$ pr -l60 tesi.txt | lpr
Il comando lpr accetta diversi argomenti che permettono all'utente di
controllare il suo funzionamento. Tra quelli più spesso usati ricordiamo:
-
$ lpr -#2 -sP dj tesi.txt
Questo comando creerà un link simbolico al file tesi.txt nella
directory di spool della stampante chiamata dj, dove sarà
processato da lpd, che ne stamperà due copie.
Per una lista esaustiva di tutte le opzioni del comando lpr si rinvia alla manpage
lpr(1).
Analisi della coda di stampa tramite lpq
printing!using lpq command
lpq command!usage example
Il comando lpq viene impiegato per visualizzare i contenuti della coda di stampa.
Lanciato senza argomenti lpq ritorna i contenuti della coda di stampa della stampante predefinita.
L'output di lpq può tornare utile in molti contesti:
$ lpq
lp is ready and printing
Rank Owner Job Files Total Size
active mwf 31 tesi.txt 682048 bytes
Uso di lprm per cancellare un ordine di stampa
printing!using lprm command
lprm command!usage example
Un'altra utile funzione di un qualsiasi rispettabile sistema di stampa è quella di poter
rimuovere file che siano stati precedentemente posti nella coda di stampa.
A questo scopo si utilizza il comando lprm:
$ lprm -
Questo comando cancella tutti gli ordini di stampa pendenti appartenenti all'utente che lo
ha lanciato. Un singolo file può essere rimosso dalla coda di stampa in due fasi: inizialmente
sarà necessario scoprire il suo job number tramite lpq e a quel punto sarà possibile
invocare lprm con tale parametro. L'esempio seguente:
$ lprm 31
cancellerebbe il file con job number 31 (tesi.txt) dalla coda di stampa della stampante predefinita.
Controllo del line printing daemon (lpd) tramite lpc
printing!using lpc command
lpc command!usage example
Il comando lpc(8) serve a controllare le stampanti gestite da lpd.
È possibile abilitare o disabilitare l'uso di una stampante o della sua code di stampa,
modificare l'ordine con cui i file sono disposti al loro interno e ottenere un rapporto
sullo stato delle stampanti e relative code di stampa. Lpc risulta particolarmente
utile in configurazioni in cui una singola macchina disponga di più di una stampante.
$ lpc
Questo comando introduce l'utente in un ambiente interattivo nel quale è possibile
inserire comandi. Un'altra possibilità è quella di passare un comando a lpc
tramite la linea di comando:
$ lpc status all
Una lista completa dei comandi disponibili può essere ottenuta tramite la manpage di
lpd, ma il lettore troverà di seguito una lista di quelli di maggior rilevanza.
Ogni comando seguito dalla parola opzioni può ricevere sia il nome di una specifica
stampante (ad esempio lp o print) sia la parola chiave all, usata per indicare il riferirsi
del comando a tutte le stampanti disponibili.
- disable opzioni - disabilita l'inserimento di nuovi file nella coda di stampa
- down opzioni - disabilita la stampante, interrompendo qualunque ordine di stampa pendente
- enable opzioni - abilita l'inserimento di nuovi file nella coda di stampa
- quit (o exit) - esce da lpc
- restart opzioni - reinizializza il lpd per quella stampante
- status opzioni - visualizza lo stato della stampante
- up opzioni - abilita tutto e lancia una nuova istanza di lpd
Il printtool di RedHat
printing!using Red Hat printool
Red Hat Linux!printool
printool utility
Una breve nota sul sorprendente programma printtool della RedHat: esso sembra possedere tutte le
capacità di un magic filter. La distribuzione della RedHat provvede automaticamente ad installare
molti dei programmi che eseguono il filtraggio. Seguono i passi seguiti dal sottoscritto per
configurare la propria stampante (una HP LJ 4L connessa alla porta parallela) sotto RH 4.0 (tale
procedura dovrebbe risultare effettiva anche sotto altre versioni della distribuzione RH).
- Lanciare printtool avendo cura di essere root (se avete usato il comando su, avete ricordato di impostare SETENV DISPLAY :0.0 e lanciare xhost +, vero ?).
- Fare click su "Add" e confermate con "OK" per una stampante locale.
- Inserire il nome del dispositivo di stampa (/dev/lp1 per l'autore).
- Inserire il filtro di input - selezionate un tipo di stampante, la sua risoluzione e
la dimensione dei fogli (tra i possibili ljet4, 300x300 e letter).
- Confermare con "OK" fino a giungere alla finestra principale e quindi reinizializzare lpd.
Esattamente come se gestiste il file /etc/printcap file manualmente, è possibile mantenere più
definizioni per ciascuna stampante con differenti dimensioni della carta, risoluzioni o altro.
La stampa di file
printing!by file type
Questa sezione copre la stampa dei tipi di file più comunemente incontrati in un tipico
ambiente Linux.
Stampa di file grafici
printing!graphics files
La stampa di file grafici solitamente dipende dal tipo di file che si intende stampare
e dal tipo di stampante impiegata. Le stampanti a matrice di punti sono solitamente
semplicemente fuori questione a causa delle differenze nella maniera in cui le matrici
di punti gestiscono la grafica. In queste condizioni l'approccio più fertile è solitamente
verificare la compatibilità della stampante con una Epson o una IBM ProPrinter e quindi
(dopo aver convertito il file in PostScript) impiegare Ghostscript (si veda la prossima sezione
del documento) per stampare il file.
Qualora si disponga di una stampante laser, le cose sono rese più semplici dalla compatibilità
PCL. Questo ci rende disponibili alcune opzioni: alcuni programmi possono avere la capacità di
produrre direttamente output PCL. Se questo non è il caso in questione, programmi come
NetPBM possono effettuare la conversione in PCL. Un ultima possibilità è quella di usare
ghostscript.
In generale la miglior soluzione è quella di installare un pacchetto come NetPBM o Ghostscript
unitamente ad un magic filter per gestire i file grafici "automagicamente".
Stampa di file PostScript
printing!Postscript files
Postscript!printing
Stampare file PostScript con una stampante dotata di un interprete PostScript è estremamente
semplice: basta usare lpr e la stampante si occuperà di tutti i dettagli per voi.
Quelli di voi che non possiedono stampanti PostScript si troveranno a dover ricorrere ad altri
sistemi. Fortunatamente, vi sono programmi in grado di tradurre il PostScript in un linguaggio
che la maggioranza delle stampanti sono in grado di comprendere. Il più noto fra questi programmi
è probabilmente Ghostscript.
È responsabilità di Ghostscript convertire i descrittori di un file PostScript in
comandi che la vostra stampante sia in grado di comprendere. Un esempio di stampa
tramite Ghostscript potrebbe essere il seguente:
$ gs -dSAFER -dNOPAUSE -sDEVICE=deskjet -sOutputFile=\|lpr tesi.ps
Osservate che nell'esempio precedente stiamo passando l'output di Ghostscript al comando
lpr tramite una pipe nell'opzione -.
Stampa di file PDF
printing!PDF files
printing!Acrobat files
PDF files!printing
Acrobat files!printing
Adobe ha rilasciato una versione di Acrobat reader per Linux disponibile presso la
home page di Adobe . Il suo predecessore, xpdf, è
ancora disponibile. Entrambi i programmi sono in grado di stampare su dispositivi PostScript.
Stampa di file TeX
printing!TeX files
TeX files!printing
Una delle maniere più semplici di stampare un file Tex è quella di convertire tale file in
PostScript e quindi stamparlo tramite Ghostscript. Per far ciò è prima necessario convertire
il file da TeX ad un formato noto come DVI (che sta per device-independent) tramite il comando
tex(1). È a questo punto possibile convertire il file DVI in PostScript usando il
programma dvips. Un esempio di quanto si è appena illustrato è il seguente:
$ tex tesi.tex
$ dvips tesi.dvi
A questo punto potete stampare il file PostScript risultante come si è descritto in precedenza.
Stampa di file formattati tramite troff
printing!troff files
troff files!printing
$ groff -Tascii tesi.tr | lpr
oppure, se così preferite,
$ groff thesis.tr > thesis.ps
e provvedete quindi a stampare il file PostScript come si è già discusso in precedenza.
Stampa delle manpage
printing!man pages
man pages!printing
$ man man | col -b | lpr
Le pagine man sono preformattate tramite troff ed è quindi necessario eliminare
qualsiasi forma di sottolineatura, evidenziamento e similari. Il programma "col" esegue
questo compito perfettamente, e dato che nell'esempio sopracitato stiamo passando l'output
ad una pipe, man non invocherà more ad ogni schermata.
Varie ed eventuali
Questa sezione del documento copre aspetti della stampa sotto Linux che non rientrano esattamente
in nessuna delle altre sezioni.
Formattare un documento prima della stampa
printing!formatting files before
Dato che molti file ASCII non sono formattati per la stampa, potrebbe risultare
utile il poterli formattare in qualche maniera prima di procedere alla loro stampa.
Questo può includere l'apporre il suo numero su ciascuna pagina, modificare i margini,
raddoppiare la spaziatura o lo stampare il file in colonne multiple.
Un modo comune di fare tutto questo è tramite un preprocessore come pr.
$ pr +4 -d -h"Tesi di dottorato, seconda bozza" -l60 tesi.txt | lpr
Nell'esempio precedente pr leggerà il file tesi.txt, salterà le prime
tre pagine (+4), imposterà la lunghezza di pagina a sessanta linee (-l60),
raddoppierà la spaziatura dell'output (-d) ed aggiungerà la frase "Tesi di dottorato,
seconda bozza" in cima ad ogni pagina (-h). Lpr provvederà quindi ad accodare l'output
di pr sulla stampante predefinita. Fate riferimento alla manpage di pr per
maggiori informazioni sul suo uso.
La variabile d'ambiente PRINTER
printing!PRINTER environment variable
PRINTER environment variable
Tutti i comandi del sistema di stampa di Linux accettano l'opzione -
Al fine di evitare di dover specificare quale stampante si intende utilizzare
ogniqualvolta si stampi un file, è possibile impostare la variabile d'ambiente PRINTER
con il nome della stampante che si desidera utilizzare. Questo compito va eseguito in
modi diversi a seconda della shell utilizzata. Sotto bash ci si può trarre
d'impiccio nel modo seguente:
$ PRINTER="nome_stampante"; export PRINTER
mentre sotto csh si avrà:
% setenv PRINTER "nome_stampante"
Questi comandi possono essere inseriti nel vostro script di login
(.profile sotto bash o .cshrc sotto csh) o essere eseguiti dalla
linea di comando. Si vedano bash(1) e csh(1) per ulteriori informazioni
in merito alle variabili d'ambiente.
FAQs (Frequently Asked Questions)
printing!frequently asked questions
printing!FAQ
FAQ!printing usage
Q1. Come si previene l'effetto scala ?
printing!staircase effect
A1. L'effetto scala (staircase effect) è dovuto alla maniera in cui alcune stampanti si
aspettano le linee vengano terminate. Certe stampanti richiedono sequenze di fine linea
composte dalla coppia carriage-return/line-feed (fine linea in stile DOS) invece
della sequenza usata dai sistemi UNIX (line-feed). Il sistema più semplice di risolvere
questo problema è il verificare se sia possibile modificare la modalità operativa della vostra
stampante. Solitamente questo è possibile cambiando la posizione di un DIP switch o tramite
l'invio di una appropriata sequenza di escape all'inizio di ogni ordine di stampa. Nel secondo
caso sarà necessario creare un filtro (si veda Q2)
Una rapida soluzione è quella di usare un filtro sulla linea di comando. Un esempio di questo
potrebbe essere:
$ cat tesi.txt | todos | lpr
Q2. Che cosa è un filtro ?
printing!filter
A2. Un filtro è un programma che legge da standard input (stdin),
compie una qualche operazione su questo input e scrive i risultati su standard output
(stdout). I filtri sono usati per svolgere molti compiti e tra questi vi è
l'elaborazione di testo.
Q3. Che cosa è un magic filter ?
printing!magic filter
A3. Un magic filter è un filtro che determina quale tipo di operazione svolgere
sul suo input in base al tipo di file ricevuto. A titolo di esempio, un magic filter
potrebbe adottare una procedura di stampa differente a seconda che il file passatogli sia
composto di testo puro (procedura di stampa "normale") o si tratti di un file PostScript
(stampa tramite Ghostscript). Due esempi sono magicfilter e APSfilter. Bisogna osservare
come sia necessario installare appropriati programmi prima di procedere all'installazione
del filtro.
La ragione di questo va ricercata nel fatto che quando un magicfilter viene installato
esso esamina il sistema alla ricerca di certi programmi (come Ghostscript - se esso
è presente nel sistema il filtro sa di poter gestire il PostScript) e definisce le
azioni che verranno compiute sul suo input in base a quanto trovato. Per poter gestire tutti
i dei formati di stampa il vostro sistema dovrebbe avere almeno i seguenti programmi installati
- GhostScript
- TeX
- NetPBM
- jpeg utilities
- gzip
Q4. Linux è in grado di gestire il Windows Printing System ?
printing!Windows Printing System (WPS)
A4. Forse. Quelle stampanti che accettano solo comandi WPS non funzioneranno sotto Linux.
Quelle stampanti che accettano sia comandi WPS che altri comandi (come la BJC 610) funzioneranno
se impostate in maniera da accettare comandi in un formato diverso dal WPS. Altre stampanti,
come la HP DeskJet 820Cxi/Cse, non funzioneranno sotto Linux. Detto questo, si ricordi che
Linux è in grado di funzionare come printserver per macchine Windows 95 (tramite Samba), dato
che windows è dotato di driver per tali stampanti.
Q5. Che sistema da quattro soldi è questo ? Non posso stampare più di sei pagine senza incappare
nell'errore "file too large".
printing!file too large error
A5. Una delle opzioni nel file /etc/printcap è collegata alla dimensione massima di un file
stampabile. Il valore predefinito è di 1000 blocchi di allocazione (circa 500k). Nel caso
di file PostScript e similari questo può limitare la dimensione massima dei file
stampabili a 6-8 pagine inclusive di grafica. Siate certi di aver inserito la linea seguente
nel file di definizione della stampante:
mx=0
La ragione principale di tutto questo è impedire che la partizione di spool sia riempita completamente.
Un altra maniera per ottenere lo stesso risultato è quella di far sì
che lpr crei un link simbolico
dalla directory di spool al file che si intende stampare invece di copiarvelo. Ma per far questo
dovete ricordare di utilizzare l'opzione -s ogni volta che usate lpr .
Risoluzione dei problemi
printing!troubleshooting
Questa sezione tratta alcune cose comuni che possono andar storte
nell'uso del proprio sistema di stampa.
Se la vostra stampante non funziona:
- Funzionano altri ordini di stampa ? (problema relativo all'applicazione ?)
- lpd è in esecuzione ? (controllate tramite lpc ) (daemon di stampa ?)
- Può l'utente root inviare un file direttamente alla stampante? (Servizi di stampa ?)
- Potete stampare da DOS ? (problema hardware ?)
Rispondere a tali domande potrà aiutarvi a trovare una soluzione.
Inviate contributi e suggerimenti per questa sezione a <markk@auratek.com> (in inglese! - N.d.T.).
Materiale di riferimento
printing!reference material
Questa sezione del documento contiene informazioni relative a materiale di riferimento sul
sistema di stampa di Linux. Ho cercato di mantenere questa sezione dell'HOWTO quanto più
focalizzata sull'argomento quanto fosse possibile. Se ritenete che qualche materiale significativo
sull'argomento sia stato escluso non esitate a contattarmi.
Prima di chiedere aiuto in un gruppo USENET considerate le seguenti domande:
- La stampante sta accettando ordini di stampa ? (Usate lpc(8) per verificare)
- L'oggetto della vostra domanda è coperto in questo documento o nel printing HOWTO di Grant Taylor ?
Se avete risposto affermativamente ad una delle domande allora potreste voler
riconsiderare l'idea di postare la vostra domanda, ma, se decidete comunque di
farlo, cercate di includere quante più informazioni in merito al vostro problema
quanto vi sia possibile. Cercate di non scrivere cose come "Ho un problema con lpr ,
per favore aiutatemi". Richieste di questo tipo saranno ignorate dalla maggior parte dei lettori.
Cercate anche di includere la versione del kernel del vostro sistema e gli specifici messaggi
d'errore che il sistema vi ha ritornato.
Pagine man
printing!related man pages
- cat(1) concatenare e stampare file
- dvips(1) convertire un file DVI (TeX) in PostScript
- ghostview(1) visualizzare documenti Postscript tramite Ghostscript
- groff(1) interfaccia di groff (sistema di formattazione documenti)
- gs(1) interprete/visualizzatore Ghostscript
- lpc(8) line printer control
- lpd(8) line printer spooler daemon
- lpq(1) programma per esaminare la coda di stampa
- lpr(1) programma di stampa
- lprm(1) rimuove file dalla coda di stampa
- pr(1) converte file di testo per la stampa
- tex(1) programma di formattazione ed impaginazione
newsgroup USENET
printing!relates newsgroups
- comp.os.linux.* troppe informazioni su Linux
- comp.unix.* area di discussione relativa ad UNIX