Sophie

Sophie

distrib > Mandriva > 2010.0 > i586 > media > contrib-release > by-pkgid > 6f31691e252df0379b2dc094814df461 > files > 129

howto-sgml-it-2006-6mdv2010.0.noarch.rpm

<!doctype linuxdoc system>

<!--
       pht.sgml,v 3.9 1996/07/25 18:55:33 gtaylor Rel
 -->

<article>
<title>The Linux Printing HOWTO

<author>Grant Taylor, <tt/&lt;gtaylor+pht@picante.com>/.<newline>Traduzione di Luca Ronchi, <tt/&lt;ronchi@xtreme.it>/
<date>Version 3.9, 1996/07/25 18:55:33

<abstract>
Questo documento contiene informazioni su come generare, vedere e stampare
qualsiasi tipo di documento sotto Linux e su sistemi Unix in generale.
</abstract>

<toc>


<sect>Introduzione

<p>
Questa e' una completa riscrittura e molte delle informazioni precedentemente
incluse sono assenti. Questa e' stata una scelta voluta, visto che le ultime
versioni superavano le 60 pagine. Pertanto, se non trovate qui le risposte che
cercate, potete<newline>
a) controllare le versioni precedenti (in lingua inglese) presso la <url
url="http://www.picante.com/~gtaylor/pht/" name="The PHT Home Page">,
oppure<newline>
b) scrivermi cosa vi aspettavate di trovare.

La <url name="Printing HOWTO Home Page"
url="http://www.picante.com/~gtaylor/pht/"> e' il posto
migliore dove trovare l'ultima versione di questo documento (NdT:in lingua
inglese);
ovviamente viene distribuito da SunSite, e dal vostro mirror LDP.

<sect1> Storia delle versioni

<p>Questa e' la terza generazione del PHT, cioe' la terza riscrittura completa.
La storia del documento puo' essere riassunta cosi':

<enum>
<item> La prima versione e' stata scritta in risposta alle numerose domande
inerenti la stampa, poste su comp.os.linux. Cio' anticipo' il
progetto degli HOWTO di alcuni mesi, e fu pertanto il primo
documento ad essere definito un 'howto'. Questa edizione era in
Ascii piano. 
<item> Dopo essere entrato a far parte del progetto HOWTO, il PHT e' stato
unito ad un FAQ su Lpd di Brian McCauley <tt/&lt;B.A.McCauley@bham.ac.uk>/;
per circa due anni il PHT e' stato sviluppato in collaborazione. Ad
un certo punto e' stato introdotto anche il lavoro di Karl Auer
<tt/&lt;Karl.Auer@anu.edu.au>/. Questa generazione del PHT era in TexInfo e
disponibile in PS, HTML, Ascii ed Info. 
<item> Dopo aver abbandonato il PHT per oltre un anno, ed aver cercato
inutilmente di convincere qualcun altro ad occuparsene, e' stata
scritta questa versione, in Linuxdoc-SGML.

</enum>
<sect1>Copyright originale

<p>Il Copyright (c) 1996 appartiene a Grant Taylor. Copiate e distribuite
liberamente questo documento, ma non modificatene il testo e non omettete il
mio nome.

<sect>Come stampare

<p>Se siete riusciti a configurare lpd per stampare sulla vostra stampante, o il
vostro amministratore di sistema, o il vostro rivenditore, lo hanno fatto per
voi, dovete solo imparare ad usare il comando lpr. Il <url name="Printing Usage
 HOWTO" url="http://sunsite.unc.edu/mdw/HOWTO/Printing-Usage-HOWTO.html">
tratta di questo e di qualche altro comando di manipolazione della coda di 
stampa.

<sect>I dispositivi di stampa del Kernel.

<sect1>Il dispositivo lp

<p>Il Kernel di Linux, dando per scontato che vi abbiate compilato, o caricato, il
dispositivo lp (l'uscita di cat /proc/devices deve includere lp), fornisce i
dispositivi /dev/lp0, /dev/lp1 e /dev/lp2. Questi non sono assegnati
dinamicamente, ma corrispondono ad uno specifico indirizzo di I/O hardware.
Cio' significa che la vostra stampante potrebbe essere lp0 o lp1, a seconda
della configurazione hardware del vostro sistema.

<p>Non e' possibile eseguire contemporaneamente i driver plip e lp su una data
porta. E' possibile comunque caricare l'uno o l'altro driver, sia manualmente
che automaticamente dal kerneld dei kernel versione 2 (o le ultime 1.3.x).
Configurando adeguatamente gli interrupt e gli indirizzi di I/O dovrebbe essere
possibile eseguire plip su una porta ed lp su un'altra. Qualcuno e' riuscito a
farlo modificando il codice dei driver; si spera che qualcun altro riesca
a farlo direttamente dalla linea di comando.

<p>Esiste una utility chiamata <tt><htmlurl
url="http://www.picante.com/~gtaylor/pht/man/tunelp.html"
name="tunelp"></tt> con la quale e' possibile, come root,
mettere a punto alcuni parametri di funzionamento del dispositivo lp, quali
l'uso degli interrupt, la frequenza del polling e simili.

<p>I kernel v2 ed alcuni v1.3.x accettano una opzione lp= che permette di settare
gli interrupt e gli indirizzi di I/O:


<p>Quando il driver lp e' compilato nel kernel, si puo' usare la linea di
comando del LILO/LOADLIN per passare i parametri di funzionamento al
driver.
<tscreen><verb>	
	Sintassi:  lp=port0[,irq0[,port1[,irq1[,port2[,irq2]]]]]
	
	Ad esempio: lp=0x378,0   oppure   lp=0x278,5,0x378,7 **
</verb></tscreen>	
Si noti che se si usa questa tecnica, si devono specificare tutte le
porte che devono essere considerate, non esistono parametri
predefiniti. Si  puo' disabilitare un driver con lp=0.


<p>Quando il driver viene caricato come modulo in kernel v2 o v1.3.x, e' possibile
specificare gli indirizzi di I/O e gli interrupt nella linea di comando di
insmod (oppure in /etc/conf.modules) usando la solita sintassi. I parametri
sono <tt/io=port0,port1,port2/ e <tt/irq=irq0,irq1,irq2/. Consultate la pagina di man
relativa a insmod per ulteriori informazioni.

<p>**Per tutti quelli  che non si ricordano gli indirizzi standard quando servono,
sono quelli del secondo esempio. L'altra porta (<em/lp0/) e' a 0x3bc.

<sect1>Dispositivi seriali

<p>I dispositivi seriali vengono solitamente identificati come <em>/dev/ttyS1</em> e simili
sotto Linux. L'utility <tt><htmlurl
url="http://www.picante.com/~gtaylor/pht/man/stty.html"
name="stty"></tt> permette di vedere e modificare le impostazioni per
una porta seriale; <tt><htmlurl name="setserial"
url="http://www.picante.com/~gtaylor/pht/man/setserial.html"></tt> permette di controllare alcuni parametri particolari
e configurare gli interrupt e gli indirizzi di I/O per porte non standard.
Ulteriori informazioni sulle porte seriali sotto Linux possono essere trovate
nel <url
url="http://sunsite.unc.edu/mdw/HOWTO/Serial-HOWTO.html"
name="Serial-HOWTO">.

<sect>Principi di funzionamento.

<p>Per far funzionare correttamente il sistema di stampa occorre prima capire come
funzioni.

<p>Lpd sta per Line Printer Daemon, e si riferisce, a seconda del contesto, sia al
demone che all'intero insieme di programmi responsabili dello spooling e della
stampa; questi sono:
<p>
<descrip>
<tag><tt><htmlurl name="lpd" url="http://www.picante.com/~gtaylor/pht
/man/lpd.html"></tt></tag> Il demone di spooling. Una sua istanza controlla 
l'intero sistema, ed una ulteriore istanza e' attiva per ciascuna stampante 
in fase di stampa.
	
<tag><tt><htmlurl name="lpr" url="http://www.picante.com/~gtaylor/pht
/man/lpr.html"></tt></tag> Il comando utente per la stampa. Lpr contatta lpd ed inserisce
un nuovo elemento nella coda di stampa.
		
<tag><tt><htmlurl name="lpq" url="http://www.picante.com/~gtaylor/pht
/man/lpq.html"></tt></tag>Fornisce la lista degli elementi della coda di stampa.
	
<tag><tt><htmlurl name="lpc" url="http://www.picante.com/~gtaylor/pht
/man/lpc.html"></tt></tag>Il comando di controllo di lpd. Con lpc si possono 
attivare, disattivare, riordinare e, in generale, manipolare, le code di stampa.
	
<tag><tt><htmlurl name="lprm" url="http://www.picante.com/~gtaylor/pht/man
/lprm.html"></tt></tag><tt/lprm/ permette di rimuovere un elemento dalla 
coda di stampa.
		
</descrip>

<p>Vediamo adesso come tutto cio' funziona. Quando il sistema viene avviato viene
eseguito lpd. Lpd consulta il file <em>/etc/printcap</em> per determinare per quali 
stampanti dovra' gestire le code di stampa. Ogni volta che un utente esegue lpr,
lpr contatta lpd attraverso il socket denominato /dev/printer, e fornisce a lpd
sia il file da stampare, sia alcune informazioni su chi sta stampando e come
tale stampa deve essere eseguita. Lpd si occupa di stampare il file sulla
stampante appropriata.

<p>Il sistema lp e' stato progettato quando le stampanti erano perlopiu' stampanti
di linea, cioe' adatte a stampare solo Ascii piano. Come sara' chiaro in
seguito, e' pero' sufficiente qualche script in piu' per stampare PostScript,
text, dvi e quant'altro.

<sect>Come configurare il tutto, fondamenti.

<sect1>La configurazione tradizionale di lpd

<p>La configurazione minima di lpd permette di ottenere un sistema in grado di
accodare i file in una coda di stampa ed inviarli alla stampante. In questo
caso non si pone alcuna attenzione al fatto che la stampante sia in grado di
interpretare i file, ed in generale non si potranno ottenere stampe di
qualita'. Comunque e' il primo passo per comprendere il funzionamento del
sistema di stampa, quindi continuate a  leggere.

<p>Fondamentalmente, per aggiungere un a coda di stampa ad lpd, si deve aggiungere
un elemento in <em>/etc/printcap</em>, e creare una nuova directory di spooling in
<em>/var/spool/lpd</em>.

<p>Un elemento in <em>/etc/printcap</em> e' qualcosa del genere:
<tscreen><verb>
	# LOCAL djet500
	  lp|dj|deskjet:\
        	  :sd=/var/spool/lpd/dj:\
	          :mx#0:\
	          :lp=/dev/lp0:\
	          :sh:
</verb></tscreen>

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

<p>Adesso leggetivi la man page di <em><htmlurl name="printcap" 
url="http://www.picante.com/~gtaylor/pht/man/printcap.html"></em>.

<p>Quello sopra e' un esempio molto semplice, ma se non si manda in stampa un file
che la Deskjet puo' capire si ottengono strani risultati. Stampando un  normale
file Unix si ottengono dei newline interpretati letteralmente, cioe' la seguente
cosa:
<tscreen><verb>
	Questa e' la prima riga.
	                         Questa e' la seconda riga.
	                                                   Questa e' la terza.
	                                                 
</verb></tscreen>

e cosi' via. Mandando in stampa un file PostScript si ottiene una bella lista
di comandi PostScript con il solito effetto a gradinata, ma niente di piu'
utile.

<p>Ovviamente e' necessario qualcosa in piu': e' necessario un filtro. I lettori
piu' attenti della man page del printcap avranno notato gli attributi <em/if/ e
<em/of/ dello spool. Bene, <em/if/, cioe' il filtro di input e' quello che serve
 in questo caso.

<p>Se scriviamo un piccolo script chiamato <em/filtro/, che aggiunge il carriage-return
prima dei newline, l'effetto a gradinata puo' essere eliminato. A tal scopo
dobbiamo aggiungere una riga nell'elemento del printcap illustrato prima:
<tscreen><verb>
     lp|dj|deskjet:\
               :sd=/var/spool/lpd/dj:\
               :mx#0:\
               :lp=/dev/lp0:\
               :if=/var/spool/lpd/dj/filter:\
               :sh:
</verb></tscreen>               
Un semplice filtro potrebbe essere:
<tscreen><verb>
	#!perl
        while(<STDIN>){chop $_; print "$_\r\n";};
 </verb></tscreen>       

<p>In questo modo otteniamo uno spool su cui possiamo stampare normali file di
testo Unix ed ottenere delle pagine leggibili. Ci sono ovviamente molti altri
modi di ottenere lo stesso risultato, ma questo e' uno dei piu' illustrativi.
Siete comunque invitati a provarne altri.

<p>L'unico problema e' che stampare solo testo piano non e' esattamente il
massimo; certamente sarebbe meglio poter stampare anche PostScript o altre forme
di testo formattato e grafica. Naturalmente e' possibile farlo, ed e' semplice.
Il metodo da usare e' una semplice estensione di quello presentato sopra per
risolvere il problema della gradinata. Se scriviamo un filtro che puo'
accettare un qualsiasi file di input e trasformarlo in qualcosa di
comprensibile per una DeskJet, il gioco e' fatto.

<p>Questo tipo di filtro viene detto un <em>filtro magico</em>. Non preoccupatevi di
scriverne uno da soli a meno che stampiate cose molto strane, ci sono molti
ottimi filtri a disposizione in rete.

<sect1>Permessi sui file

<p>A grande richiesta includero' la lista dei permessi di accesso di alcuni file
interessanti. Ci sono modi migliori di ottenere lo stesso risultato, idealmente
usando solo eseguibili SGID e non rendendo tutto SUID root, ma questo e' il
modo in cui il tutto era configurato dopo l'installazione e funziona.
Sinceramente, se il vostro rivenditore non e' in grado di fornirvi un lpd che
funziona, aspettatevi grossi problemi.
<tscreen><verb>
       -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/
</verb></tscreen>
       
<p>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. 

<sect>Come ottenere un filtro magico adeguato

<sect1>Il filtro APS

<p>Uno dei migliori filtri magici e' aps, di Andreas Klemm. La Linux Software Map
fornisce le seguenti informazioni:
<tscreen><verb>
  Begin3
  Title:          apsfilter
  Version:        4.9.1
  Entered-date:   Montag, 10. Juli 1995, 21:22:35 Uhr MET DST
  Description:    magicfilter for lpd with auto filetype detection
  Keywords:       lpd magicfilter aps apsfilter
  Author:         andreas@knobel.GUN.de (Andreas Klemm)
  Maintained-by:  sledge@hammer.oche.de (Thomas Bueschgens)
                  andreas@knobel.GUN.de (Andreas Klemm)
  Primary-site:   sunsite.unc.edu
                  /pub/Linux/system/Printing/
                  211KB aps-491.tgz
  Original-site:  ftp-i2.informatik.rwth-aachen.de
                  /pub/Linux/pak/APSfilter/aps-491.tgz
  Platforms:      C-Compiler, gs Postscript emulator, pbmutils
  Copying-policy: GPL
  End
</verb></tscreen>  
Il filtro APS viene installato come if (filtro di input), e d e' in grado di
tradurre molti tipi di file comuni in comandi appropriati per la vostra
stampante. Tra gli altri aps comprende text, PostScript, dvi, e gif.

<sect1>Filtri magici

<p>Il filtro magico scritto da B.A.McCawley lavora all'incirca nello stesso modo di
aps, ma essendo scritto in bash e' probabilmente piu' facile da modificare. La
LSM fornisce:
<tscreen><verb>
       Version: 0.4
       Description: Bash scripts to simplify the task of configuring lpd to
                    auto-detect file types using /etc/magic. (As advertised in the
                    printing-HOWTO).
                    This package uses existing filters so it only prints file types for
                    which one already has filters (or compressed versions
                    thereof). Alterative magic filter approches are described in the
                    printing-HOWTO.
       Keywords: lpd, /etc/magic, printing, filter
       Author: B.A.McCauley@bham.ac.uk (Brian McCauley)
       Maintained-by: B.A.McCauley@bham.ac.uk
       Primary-site: tsx-11.mit.edu pub/linux/sources/usr.bin
                     magic-filter-0.4.tar.gz  5709
       Copying-policy: GNU GPL
</verb></tscreen>

<sect1>Gli altri filtri magici

<p>Per la massima confusione possibile, sembra che esistano due filtri magici
chiamati semplicemente magicfilter (o forse e' lo stesso?)
<tscreen><verb>
  Title:          magicfilter
  Version:        1.1b
  Entered-date:   04APR95
  Description:    A customizable, extensible automatic printer filter.
                  Lets you automatically detect and print just about any
                  data type you can find a conversion utility for.  This
                  filter is written in C and is controlled completely
                  from an external printer configuration file.
                  This version adds automagic creation of configuration
                  files based on the installed software on your system,
                  courtesy of GNU Autoconf.
                  This version is a bug fix from 1.1/1.1a; filters for
                  non-Ascii capable PostScript printers have been added.
  Author:         H. Peter Anvin <Peter.Anvin@linux.org>
  Primary-site:   sunsite.unc.edu
                  53000 /pub/Linux/system/Printing/magicfilter-1.1b.tar.gz
  Copying-policy: GPL
</verb></tscreen>

<sect>Le stampanti seriali e lpd

<sect1>Configurazione di printcap.

<p>Lpd prevede cinque attributi da configurare in <em>/etc/printcap/</em> per controllare
il funzionamento della porta seriale a cui e' collegata la stampante. Leggete
la man page di <em><htmlurl name="printcap"
url="http://www.picante.com/~gtaylor/pht/man/printcap.html"></em> e notate il 
significato degli attributi
<em/br&num;/, <em/fc&num;/, <em/xc&num;/, <em/fs&num;/ e <em/xs&num;/.
Gli ultimi quattro sono mappe di bit che indicano i settaggi della porta.
L'attributo <em/br&num;/ e' semplicemente il baud rate, ad esempio
`<tt/br&num;9600/'.

<p>E' molto semplice tradurre i settaggi da <htmlurl name="stty"
url="http://www.picante.com/~gtaylor/pht/man/stty.html"> in attributi per
printcap. Se ne avete bisogno date un'occhiata alla man page di stty adesso.

<p>Usate stty per configurare la porta della stampante, in modo che possiate fare
il cat di un file sulla porta ed ottenere una stampa corretta. Nel mio caso
`<em/stty -a/' fornisce le seguenti informazioni:
<tscreen><verb>
       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
       
</verb></tscreen>
<p>L'unica differenza tra questo ed il modo in cui la porta e' inizializzata al
boot e' data da -clocal, -crtscts, e ixon. Per voi potrebbe essere anche
differente, a seconda del modo in cui la vostra stampante fa il controllo di
flusso.

<p>In realta' l'uso di stty e' un po' strano. Infatti stty opera sul terminale
collegato al suo standard input, lo si usa per manipolare una data porta
seriale utilizzaando il carattere '<tt/&lt;/' come sopra.

<p>Dopo aver configurato correttamente i settaggi di stty, in modo che `<em>cat file >
/dev/ttyS2</em>' (nel mio caso) invia il file alla stampante, guardate il file 
/usr/src/linux/include/linux/termios.h. Contiene molti &num;defines ed alcune
strutture (potreste farne il cat sulla stampante (ormai funziona, no?)). Andate
alla sezione che comincia con
<tscreen><verb>
      /* c_cflag bit meaning */
       #define CBAUD   0000017
</verb></tscreen>      
<p>Questa sezione elenca i significati  dei bit <em/fc&num;/ ed <em/fs&num;/.
 Noterete che i nomi (dopo il baud rate) coincidono con una delle linee 
 dell'output di stty. Non e' forse facile?

<p>Annotate quali di questi settaggi sono preceduti da un - nell'output di stty.
Sommate tutti questi numeri (sono in ottale). Questo rappresenta i bit che
dovete azzerare, quindi il risultato e' la vostra capacita' di <em/fc&num;/.
Naturalmente ricordate che poi setterete i vari bit direttamente dopo averli
azzerati, pertanto potete semplicemente usare `<tt/fc&num;0177777/' 
(io lo faccio).

<p>Ora fate lo stesso per quei settaggi (elencati in questa sezione) che non
hanno un - davanti nell'output di stty. Nel mio esempio i piu' importanti
sono CS8 (0000060), HUPCL (0002000), e CREAD (0000200). Controllate anche la
flag relativa al baud rate (la mia e' 0000015). Sommate tutti questi numeri,
nel mio esempio ottenendo 0002275. Questo numero viene messo nelle vostre
capacita' di <em/fs&num;/ (`<tt/fs&num;02275/' funziona correttamente per me).

<p>Fata la stessa cosa di azzeramento e settaggio dei bit nella successiva
sezione del file di include, "c_lflag bits". Nel mio caso io non devo settare
niente, quindi uso `<tt/xc&num;0157777/' e `<tt/xs&num;0/'.

<sect1>Stampanti seriali antiquate che perdono caratteri.

<p>Jon Luckey ha evidenziato come alcune stampanti seriali con interfacce da due
lire e buffer molto piccoli, intendono veramente stop  quando indicano cio'
attraverso i meccanismi di controllo di flusso. Jon ha scoperto che
disabilitando il buffer FIFO della porta seriale 16550 con <tt><htmlurl 
name="setserial"
url="http://www.picante.com/~gtaylor/pht/man/setserial.html"></tt> ha
risolto il problema (in pratica e' come se si indicasse a Linux che la porta
seriale e' una 8250).

<sect>Soluzioni commerciali.

<p>Questa sezione e', per definizione, incompleta. Sentitevi liberi di inviare i
dettagli della vostra distribuzione preferita.

<sect1>RedHat 2.x

<p>La RedHat fornisce un tool di amministrazione dotato di interfaccia grafica
che puo 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 <em>/etc/printcap</em> e un filtro magico
PostScript-e-Ascii basato su <tt/gs/ e <tt><htmlurl name="nenscript"
url="http://www.picante.com/~gtaylor/pht/man/nenscript.html"></tt>.
Questa soluzione funziona piuttosto bene, ed e' semplicissima da configurare.

<sect1>Altre distribuzioni

<p>Per favore fatemi sapere cosa fanno le altre distribuzioni.

<sect>Come stampare su una stampante attraverso la rete.

<p>Una delle capacita' di lpd e' che supporta la stampa attraverso la rete su
stampanti fisicamente connesse ad altre macchine. Con una attenta
combinazione di filtri e utility assortite, si puo' far stampare lpd su
stampanti connesse a qualsiasi tipo di rete, in modo del tutto trasparente.

<sect1>Su un host Unix/lpd

<p>Per abilitare una macchina remota a stampare sulla vostra stampante, dovete
elencare tale macchina in <em>/etc/hosts.equiv</em> o <em>/etc/hosts.lpd</em>
 (notate che
mettere una macchina in <em/hosts.equiv/ ha molti altri effetti; assicuratevi di
sapere cosa state facendo prima di mettere una macchina qui). Potete anche
abilitare solo certi utenti della macchina remota a stampare sulla vostra
stampante utilizzando l'attributo <em/rs/; leggete la man page di <tt><htmlurl
name="lpd" url="http://www.picante.com/~gtaylor/pht/man/lpd.html"></tt> per
informazioni.

<sect1>Con lpd

<p>Per stampare su un'altra macchina, dovete aggiungere ad
<em>/etc/printcap</em> una voce di questo tipo:
<tscreen><verb>
     # REMOTE djet500
       lp|dj|deskjet:\
               :sd=/var/spool/lpd/dj:\
               :rm=machine.out.there.com:\
               :rp=printername:\
               :lp=/dev/null:\
               :sh:
               
</verb></tscreen>

Notate che c'e' ancora la coda di stampa sulla macchina locale, gestita da
<em/lpd/, in modo che
se la macchina remota e' occupata o offline, i lavori di stampa possono
essere accodati nell'area di spool fino a che possono essere inviati.

<sect1>Con rlpr

<p>Si puo' anche usare <em/rplr/ per mandare un lavoro di stampa direttamente in una
coda su una macchina remota, senza doversi preoccupare di configurare lpd per
supportare la stampa remota. Cio' e' piu' utile quando stampate su un gran
numero di stampanti solo occasionalmente. Dall'annuncio di <em/rlpr/:

<p>Rlpr usa il TCP/IP per mandare lavori di stampa a server lpd ovunque su una
rete.

<p>Diversamente da lpr, non necessita che la stampante remota sia esplicitamente
conosciuta alla macchina da cui si vuole stampare (ad esempio tramite
<em>/etc/printcap</em>) e pertanto e' molto piu' flessibile e richiede meno
amministrazione.

<p>Rlpr puo' essere usato ovunque si puo' usare un normale lpr, ed ' compatibile
all'indietro con l'lpr BSD.

<p>Il maggior vantaggio che si ottiene con rlpr e' la capacita' di stampare
remotamente da qualsiasi macchina a qualsiasi macchina, senza preoccuparsi per
come e' configurato il sistema su cui si desidera stampare. Inoltre puo'
lavorare come un filtro, in modo che applicazioni cliente in esecuzione su una
macchina remota, come Netscape, xemacs, etc, possono stampare sulla macchina
locale senza sforzo.

Rlpr e' disponibile presso <tt><url name="SunSite" 
url="ftp://sunsite.unc.edu/pub/Linux/system/Printing/"></tt>.

<sect1>Su una stampante Win95, WinNT, LanManager o Samba.

<p>E' possibile dirigere una coda di stampa di lpd, attraverso il programma
 <tt><htmlurl name="smbclient"
url="http://www.picante.com/~gtaylor/pht/man/smbclient.html"></tt> (della suite samba), ad un servizio di stampa SMB basato su TCP/IP.
Samba comprende uno script chiamato smbprint per fare questo. In breve,
inserite un file di configurazione per la stampante in questione nella directory
di spool, e installate <em/smbprint/ come <em/if/.

In <em>/etc/printcap</em> ci sara' qualcosa del genere:
<tscreen><verb>
       lp|remote-smbprinter:\
           :lp=/dev/null:sh:\
           :sd=/var/spool/lpd/lp:\
           :if=/usr/local/sbin/smbprint:
</verb></tscreen>

<p>Dovete leggere la documentazione all'interno dello script <tt/smbprint/ per
ulteriori informazioni su come configurarlo.

<p>E' anche possibile usare <tt/smbclient/ per passare un file direttamente al servizio
di stampa SMB senza coinvolgere <tt/lpd/. Controllate la man page.

<sect1>Ad una stampante NetWare

<p>La suite ncpfs comprende una utility chiamata <tt/nprint/ che fornisce le stesse
funzionalita'  di <tt/smbprint/, ma per NetWare. Potete ottenere ncpfs da
<url url="ftp://linux01.gwdg.de/pub/ncpfs/">. Dalla LSM per ncpfs versione 0.16:
<quote>
	Con ncpfs potete montare volumi del vostro server NetWare sotto Linux.
	Inoltre  potete stampare verso code di stampa NetWare e fare lo spool
	di code di stampa NetWare verso sistemi Linux. Avete bisogno del kernel
	1.2.x, o 1.3.54 o superiori. ncpfs non funziona con kernel della serie
	1.3.x inferiori alla 1.3.54.
</quote>
	
<p>Per far funzionare <tt/nprint/ attraverso lpd, serve un piccolo script della shell
che stampa lo stdin sulla stampante NetWare, e che va installato  come <em/if/ per
una coda di stampa di lpd. Dovreste avere qualcosa del tipo
<tscreen><verb>
     sub2|remote-NWprinter:\
               :lp=/dev/null:sh:\
               :sd=/var/spool/lpd/sub2:\
               :if=/var/spool/lpd/nprint-script:
</verb></tscreen>
mentre lo script per nprint sara' qualcosa del genere 
<tscreen><verb>
      #! /bin/sh
       |/usr/local/bin/nprint -S net -U name -P passwd -q printq-q -
</verb></tscreen>       

<sect1>Ad una stampante EtherTalk (Apple)

<p>Il package netatalk comprende qualcosa sul genere di <tt/nprint/ e
<tt/smbclient/. Werner
Eugster ha documentato la procedura per stampare da e verso una rete Apple
molto meglio di quanto io potrei mai fare; date un'occhiata alla sua
<url name="web page"
url="http://garnet.berkeley.edu/~weugster/appleprint.html">.

<p>Problema misterioso della settimana: Netatalk non funziona con una scheda SMP
Etherpower PCI dotata di chip DEC tulip.

<sect1>Ad una stampante HP o altre stampanti ethernet.

<p>Le HP ed alcune altre stampanti sono dotate di un'interfaccia ethernet verso la
quale si puo' stampare direttamente usando lpd. Dovete seguire le istruzioni
allegate alla stampante, o all'interfaccia  di rete, ma in generale tali
stampanti "eseguono" lpd, e forniscono una o piu' code su cui stampare. Una
HP, per esempio, dovrebbe funzionare con un printcap del tipo 
<tscreen><verb>
       lj-5|remote-hplj:\
               :lp=/dev/null:sh:\
               :sd=/var/spool/lpd/lj-5:\
               :rm=printer.name.com:rp=raw:
</verb></tscreen>               
<p>In una installazione su larga scala, specialmente in un ambito in cui alcune
stampanti non supportano il PostScript, puo' essere conveniente configurare un
server di stampa dedicato, verso il quale stampano tutte le macchine, e che
esegue le varie istanze di ghostscript.

<sect2>Sulle vecchie HP

<p>Alcune stampanti (e stampanti messe in rete come "scatole nere") supportano
solo una specie di non-protocollo basato su connessioni TCP. In questa
categoria rientrano le prime schede JetDirect (comprese alcune JetDirecEx).
Fondamentalmente, per stampare su stampanti di questo tipo, si deve aprire una
connessione TCP su una porta specifica (di solito 9100) e trasmetterci il
documento da stampare. Cio' puo' essere fatto, tra gli altri modi, in Perl:
<tscreen><verb>
#!/usr/bin/perl
  # Thanks to Dan McLaughlin for writing the original version of this
  # script (And to Jim W. Jones for sitting next to Dan when writing me
  # for help ;)

  $fileName = @ARGV[0];

  open(IN,"$fileName") || die "Can't open file $fileName";

  $dpi300     = "\x1B*t300R";
  $dosCr      = "\x1B&ero;k3G";
  $ends = "\x0A";

  $port =  9100 unless $port;
  $them = "bach.sr.hp.com" unless $them;

  $AF_INET = 2;
  $SOCK_STREAM = 1;
  $SIG{'INT'} = 'dokill';
  $sockaddr = 'S n a4 x8';

  chop($hostname = `hostname`);
  ($name,$aliases,$proto) = getprotobyname('tcp');
  ($name,$aliases,$port) = getservbyname($port,'tcp')
      unless $port =~ /^\d+$/;;
  ($name,$aliases,$type,$len,$thisaddr) =
          gethostbyname($hostname);
  ($name,$aliases,$type,$len,$thataddr) = gethostbyname($them);
  $this = pack($sockaddr, $AF_INET, 0, $thisaddr);
  $that = pack($sockaddr, $AF_INET, $port, $thataddr);

  if (socket(S, $AF_INET, $SOCK_STREAM, $proto)) {
  #    print "socket ok\n";
  }
  else {
      die $!;
  }
  # Give the socket an address.
  if (bind(S, $this)) {
  #    print "bind ok\n";
  }
  else {
      die $!;
  }

  # Call up the server.

  if (connect(S,$that)) {
  #    print "connect ok\n";
  }
  else {
      die $!;
  }

  # Set socket to be command buffered.

  select(S); $| = 1; select(STDOUT);

  #    print S "@PJL ECHO Hi $hostname! $ends";
  #    print S "@PJL OPMSG DISPLAY=\"Job $whoami\" $ends";
  #    print S $dpi300;

  # Avoid deadlock by forking.

  if($child = fork) {
      print S $dosCr;
      print S $TimesNewR;

      while (<IN>) {
          print S;
      }
      sleep 3;
      do dokill();
  } else {
      while(<S>) {
          print;
      }
  }

  sub dokill {
      kill 9,$child if $child;
  }
</verb></tscreen>

<sect1>Esecuzione di if per una stampante remota

<p>Un difetto di lpd e' che l'<em/if/ non e' eseguito per le stampanti remote. Se avete
bisogno di eseguire un <em/if/, potete farlo configurando una coda di stampa doppia,
e riaccodando il lavoro di stampa. Come esempio prendiamo questo printcap:
<tscreen><verb>
       lj-5:remote-hplj:\
               :lp=/dev/null:sh:\
               :sd=/var/spool/lpd/lj-5:\
               :if=/usr/lib/lpd/filter-lj-5:
       lj-5-remote:lp=/dev/null:sh:rm=printer.name.com:\
               :rp=raw:sd=/var/spool/lpd/lj-5-raw:
</verb></tscreen>
alla luce di questo script di filtraggio filter-lj-5:
<tscreen><verb>
       #!/bin/sh
       gs <options> -q -dSAFER -sOutputFile=- - | \
               lpr -Plj-5-remote -U$5
</verb></tscreen>
               
<p>L'opzione <em/-U/ di lpr funziona solamente se lpr e' esguito come demone, e pone il
nome d'utente corretto nella seconda coda di stampa. Probabilmente e' meglio
usare un metodo piu' robusto per determinare il nome dell'utente, perche' in
alcuni casi non e' il quinto argomento. Verificate la man page di <em><htmlurl
name="printcap"
url="http://www.picante.com/~gtaylor/pht/man/printcap.html"></em>.

<sect>Come stampare su un fax

<sect1>Usando un faxmodem

<p>Ci sono o una quantita' di programmi per fax che permettono di spedire e
ricevere fax. Uno dei piu' complessi e' <em/HylaFax/ di Sam Leffler, disponibile 
presso <tt/ftp.sgi.com/ Supporta di tutto, dall'uso di piu' modem al broadcasting.

<p>E' anche disponibile, e probabilmente e' anche una scelta migliore per macchine
Linux, <tt><htmlurl name="efax"
url="http://www.picante.com/~gtaylor/pht/man/efax.html"></tt>, un semplice programma che spedisce fax. Il programma di getty
<tt/mgetty/ puo' ricevere i fax (ed anche gestire la posta vocale su alcuni modem!).

<sect1> Usare il servizio di Stampa Remota.
<p> Esiste un servizio sperimentale che permette di spedire un messaggio di
email contenente qualcosa che vorreste stampare, in modo che questo compaia su
un fax da qualche altra parte. Essendo supportati anche formati come il
postscript, questo e' un servizio che puo' essere utile, anche se la copertura
mondiale e' a macchie. Guardate la <url
url="http://www.town.hall.org/fax/faq.html" name="FAQ">.

<sect>Come generare qualcosa che valga la pena stampare

<p>Qui abbiamo veramente un sacco di programmi. Basicamente Linux puo' eseguire
quattro tipi di binari con vari livelli di successo: Linux, iBCS, Win16/win32s
(con dosemu, e, un giorno, con Wine), e Mac/68k (con Executor). Tratteremo solo
di applicazioni native per Linux e programmi comuni per Unix, facendo solo
notare che WordPerfect per SCO, e molto probabilmente altri programmi
commerciali di word processing, funzionano perfettamente sotto l'emulazione iBCS
di Linux.

<p>Per Linux, le scelte sono limitate a quelle disponibili per Unix in generale:

<sect1>Linguaggi di Markup

<p>La maggior parte dei linguaggi di markup serve per lavori ripetitivi, dove si
desidera che sia il computer a controllare l'aspetto del testo, per rendere le
cose uniformi. Fare un a bella firma in un linguaggio di markup e' sicuramente
difficile...
<p><descrip>
<tag><tt>nroff</tt></tag>
		Questo e' stato uno dei primi linguaggi di markup per Unix. Le
		man page sono l'esempio piu' comune di testo formattato con le
		macro *roff; molte persone lo gradiscono, ma per me nroff ha
		una sintassi piu' arcana del necessario, che lo rende
		inadeguato per nuovi lavori. Vale la pena sapere, comunque, che
		potete comporre una man page direttamente in PostScript con
		groff. La maggior parte dei comandi man lo fanno per voi con
		<tt/man -t foo | lpr/.
		
<tag/TeX/
		TeX, ed il package di macro LaTeX, e' uno dei piu' usati
		linguaggi di markup in ambiente Unix. Molti lavori tecnici sono
		scritti in LaTeX perche' semplifica notevolmente i problemi di
		aspetto della pagina ed e' ancora uno  dei pochi sistemi di
		text processing che supporta bene e completamente la simbologia
		matematica. TeX produce  file <tt/dvi/, che possono essere
		convertiti in PostScript oppure nel PCL dell'HP con <tt/dvips/ o
		<tt/dvilj/.
		
<tag/SGML/
		C'e' almeno un parser sgml free per Unix e Linux; esso forma la
		base del sistema di documentazione Linuxdoc-SGML, ma supporta
		anche altri DTD.
<tag/HTML/
		Qualcuno sostiene che per lavori semplici potrebbe essere
		sufficiente scrivere in HTML e stampare usando Netscape. Non
		sono d'accordo, ma voi potreste pensarla diversamente.
		
</descrip>

<sect1>WYSYWYG

<p>C'e' una generale mancanza di programmi di produzione di testi WYSYWYG.
Sentitevi liberi di scriverne qualcuno e fatemi sapere se ho omesso qualcosa.
<descrip>
	<tag/Lyrix/
		Lyrix e' un'interfaccia (front-end) a LaTeX che sembra molto
		promettente.
	
	<tag/The Andrew User Interface System/
     		AUIS include <tt/ez/, un editor in stile WYSYWYG con molte capacita'
     		basiche per un word processor, capacita' HTML, e pieno supporto
     		dei newsgroup e email MIME.
     		
     	<tag/Proposte commerciali/
     		Almeno Caldera e Red Hat distribuiscono package contenenti le
     		solite applicazioni per ufficio, come un word processor WYSYWYG
     		ed un foglio elettronico. Suppongo che facciano un buon lavoro,
     		ma non li ho mai usati. (Credo anche che caldera fornisca le
     		WABI della Sun, in tal modo potete probabilmente eseguire
     		qualcosa tipo MS Office se dovete integrare tali tipi di
     		files).
     		<p>Jeff Phillips <tt/&lt;jeff@I_RATUS.org>/ utilizza WordPerfect
     		 per Linux di Caldera, e dice che funziona bene. Apparentemente
     		 include il supporto per la stampante, come e' logico
     		 aspettarsi. Caldera dovrebbe avere delle informazioni su <url
     		  url="http://www.caldera.com/">.
     		 <p>RedHat distribuisce una suite chiamata <em/Applixware/;
     		 potete trovare il loro sito web a <url url="http://www.redhat.com/">.
</descrip>	
<sect>Ghostscript

<p>Ghostscript e' un programma incredibilmente importante per la stampa sotto
Linux. La maggior parte del software di stampa per Unix genera PostScript, che
e' un opzione da oltre mezzo milione su una stampante. Ghostscript invece e'
gratis (free) e genera il linguaggio della vostra stampante dal PostScript.
Quando viene collegato con il filtro di ingresso di <tt/lpd/, vi da' una stampante
PostScript virtuale e semplifica la vita immensamente.

<p>Ghostscript e' disponibile in due forme. La versione commerciale di
Ghostscript, detta Aladdin Ghostscript, puo' essere usata liberamente per scopi
personali, ma non puo' essere distrubuita nelle distribuzioni commerciali di
Linux. E' ira un anno avanti alla versione free di Ghostscript; al momento
supporta il Portable Document Format dell'Adobe Acrobat, mentre le versioni
precedenti non lo fanno.

<p>La versione free di Ghostscript e' il Ghostscript GNU, ed e' semplicemente una
versione piu' vecchia del ghostscript Alladin gentilmente fornita alla GNU.
(Grazie alla Alladin per questo accordo; piu' produttori di software dovrebbero
supportare il software free in questo modo).

<p>Il difetto principale di Ghostscript e' nei suoi font, che sono derivati dallo
scan dei caratteri. Font piu' belli, ma che necessitano di licenza commerciale,
possono essere ottenuti da diverse fonti, visto che Ghostscript puo' leggere i
font Adobe tipo 1. La Adobe distribuisce dei font utilizzabili con il loro
visualizzatore di PDF Acrobat, oppure potete usare i font della Adobe ATM o un
fontpack.

<p>Qualsiasi cosa facciate con <tt><htmlurl name="gs"
url="http://www.picante.com/~gtaylor/pht/man/gs.html"></tt>, assicuratevi di eseguirlo con l'opzione che
disabilita l'accesso ai file (<tt/-dSAFER/). Il PostScript e' un linguaggio
pienamente funzionale, ed un programma PostScript difettoso puo' procurarvi
piu' di un mal di testa.

<sect1>Regolazione dell'output di Ghostscript

<p>Ci sono un sacco di cose che si possono fare se l'output di gs non e'
soddisfacente (in realta' potete fare qualsiasi cosa, visto che avete i
sorgenti).

<sect2>Dimensioni e posizione dell'output

<p>La posizione, la dimensione ed il rapporto altezza-larghezza dell'immagine
sulla pagina dipendono dal driver specifico della stampante di ghostscript. Se
vi accorgete che le vostre pagine sono troppo corte, o troppo lunghe, o troppo
grandi di un fattore due, dovreste controllare il sorgente del driver della
vostra stampante e modificare i parametri che vi sembrano pertinenti.
Sfortunatamente ciascun driver e' differente, e quindi non posso dirvi
esattamente cosa modificare, ma la maggior parte e' ragionevolmente ben
commentata.

<sect2>Gamma, dotsize, etc.

<p>Molte stampanti non-laser hanno il problema che i singoli punti sono troppo
grandi. Cio' da' luogo a stampe troppo scure. Se avete questo problema dovete
usare una vostra funzione di trasferimento. Semplicemente create il seguente
file nella lib-dir di ghostscript, ed aggiungete il suo nome alle chiamate di
gs, appena prima del file vero e proprio. Potreste avere bisogno di modificare
i valori per adeguarli alla vostra stampante. Valori piu' bassi danno stampe
piu' chiare. Specialmente se il vostro driver usa l'algoritmo di
Floyd-Steinberg per rasterizzare i colori, valori piu' bassi (0.2-0.15) sono
una scelta migliore.
<tscreen><verb>
      ---8<---- gamma.ps ----8<---
       %!
       %transfer functions for cyan magenta yellow black
       {0.3 exp} {0.3 exp} {0.3 exp} {0.3 exp} setcolortransfer
       ---8<------------------8<---
</verb></tscreen>

<p>E' anche possibile rimettere a posto stampanti che hanno qualche problema con
il colore modificando questi valori. Se fate questo tipo di cose vi raccomando
l'uso del file colorcir.ps, che viene fornito con ghostscript (nella
sottodirectory example/), come pagina di prova.

<sect>Anteprima su schermo di immagini stampabili

<p>Quasi tutto cio' che puo' essere stampato puo' anche essere visualizzato sullo
schermo.

<sect1>PostScript

<p>Ghostscript ha un driver per X11, che viene sfruttato al meglio sotto il
controllo di <htmlurl name="Ghostview"
url="http://www.picante.com/~gtaylor/pht/man/ghostview.html">. Le ultime 
versioni di questi programmi supportano anche i file PDF.

<sect1>TeX dvi

<p>I Device Indipendent file di TeX possono essere visti sotto X11 con <htmlurl
name="xdvi" url="http://www.picante.com/~gtaylor/pht/man/xdvi.html">. Le
versioni  moderne di xdvi chiamano ghostscript per rendere alcune
particolarita' del PostScript.

Esiste un driver per VT100 che si chiama <tt/dgvt/. <tt/Tmview/ lavora con Linux e la
svgalib, se non avete niente di meglio.

<sect>Ringraziamenti

<p>Le informazioni su smbprint provengono da un articolo di Marcel Roelofs
<tt/&lt;marcel@paragon.nl>/.

<p>Le informazioni su nprint per usare stampanti NetWare sono state fornite da
Michael Smith <tt/&lt;mikes@bioch.ox.ac.uk>/.

<p>La sezione sulle stampanti seriali proviene da Andrew Tefft
<tt/&lt;teffta@engr.dnet.ge.com>/.

<p>Il materiale su gamma e cose del genere per gs e' stato mandato da Andreas
<tt/&lt;quasi@hub-fue.franken.de>/.


<sect>Note del traduttore.

<p>Questa e' la prima traduzione di questo documento. E' quindi da
considerarsi, per quanto riguarda lo stile e la lingua, poco piu' di una bozza.
Le informazioni contenute dovrebbero comunque essere corrette.
<p>Per commenti, critiche e quant'altro rivolegetevi direttamente al <url
name= "PLUTO" url="http://www.dei.unipd.it/it/linux/pluto/intro.html">, in
quanto non mi sara' piu' possibile occuparmi di questo documento.

</article>