Sophie

Sophie

distrib > Mandriva > 2008.1 > x86_64 > media > main-release > by-pkgid > e05c4514608e650af9b28d9be1d35a18 > files > 1491

howto-html-it-10.1-4mdv2008.1.noarch.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
 <META NAME="GENERATOR" CONTENT="LinuxDoc-Tools 0.9.21">
 <TITLE>The Linux Printing HOWTO: Come stampare su una stampante attraverso la rete.</TITLE>
 <LINK HREF="Printing-HOWTO-10.html" REL=next>
 <LINK HREF="Printing-HOWTO-8.html" REL=previous>
 <LINK HREF="Printing-HOWTO.html#toc9" REL=contents>
</HEAD>
<BODY>
<A HREF="Printing-HOWTO-10.html">Avanti</A>
<A HREF="Printing-HOWTO-8.html">Indietro</A>
<A HREF="Printing-HOWTO.html#toc9">Indice</A>
<HR>
<H2><A NAME="s9">9.</A> <A HREF="Printing-HOWTO.html#toc9">Come stampare su una stampante attraverso la rete.</A></H2>

<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.</P>

<H2><A NAME="ss9.1">9.1</A> <A HREF="Printing-HOWTO.html#toc9.1">Su un host Unix/lpd</A>
</H2>

<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</EM> 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</EM>; leggete la man page di <CODE>
<A HREF="http://www.picante.com/~gtaylor/pht/man/lpd.html">lpd</A></CODE> per
informazioni.</P>

<H2><A NAME="ss9.2">9.2</A> <A HREF="Printing-HOWTO.html#toc9.2">Con lpd</A>
</H2>

<P>Per stampare su un'altra macchina, dovete aggiungere ad
<EM>/etc/printcap</EM> una voce di questo tipo:
<BLOCKQUOTE><CODE>
<PRE>
     # REMOTE djet500
       lp|dj|deskjet:\
               :sd=/var/spool/lpd/dj:\
               :rm=machine.out.there.com:\
               :rp=printername:\
               :lp=/dev/null:\
               :sh:
               
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Notate che c'e' ancora la coda di stampa sulla macchina locale, gestita da
<EM>lpd</EM>, 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.</P>

<H2><A NAME="ss9.3">9.3</A> <A HREF="Printing-HOWTO.html#toc9.3">Con rlpr</A>
</H2>

<P>Si puo' anche usare <EM>rplr</EM> 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</EM>:</P>

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

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

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

<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.</P>
<P>Rlpr e' disponibile presso <CODE>
<A HREF="ftp://sunsite.unc.edu/pub/Linux/system/Printing/">SunSite</A></CODE>.</P>

<H2><A NAME="ss9.4">9.4</A> <A HREF="Printing-HOWTO.html#toc9.4">Su una stampante Win95, WinNT, LanManager o Samba.</A>
</H2>

<P>E' possibile dirigere una coda di stampa di lpd, attraverso il programma
<CODE>
<A HREF="http://www.picante.com/~gtaylor/pht/man/smbclient.html">smbclient</A></CODE> (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</EM> come <EM>if</EM>.</P>
<P>In <EM>/etc/printcap</EM> ci sara' qualcosa del genere:
<BLOCKQUOTE><CODE>
<PRE>
       lp|remote-smbprinter:\
           :lp=/dev/null:sh:\
           :sd=/var/spool/lpd/lp:\
           :if=/usr/local/sbin/smbprint:
</PRE>
</CODE></BLOCKQUOTE>
</P>

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

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

<H2><A NAME="ss9.5">9.5</A> <A HREF="Printing-HOWTO.html#toc9.5">Ad una stampante NetWare</A>
</H2>

<P>La suite ncpfs comprende una utility chiamata <CODE>nprint</CODE> che fornisce le stesse
funzionalita'  di <CODE>smbprint</CODE>, ma per NetWare. Potete ottenere ncpfs da
<A HREF="ftp://linux01.gwdg.de/pub/ncpfs/">ftp://linux01.gwdg.de/pub/ncpfs/</A>. Dalla LSM per ncpfs versione 0.16:
<BLOCKQUOTE>
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.
</BLOCKQUOTE>
</P>

<P>Per far funzionare <CODE>nprint</CODE> attraverso lpd, serve un piccolo script della shell
che stampa lo stdin sulla stampante NetWare, e che va installato  come <EM>if</EM> per
una coda di stampa di lpd. Dovreste avere qualcosa del tipo
<BLOCKQUOTE><CODE>
<PRE>
     sub2|remote-NWprinter:\
               :lp=/dev/null:sh:\
               :sd=/var/spool/lpd/sub2:\
               :if=/var/spool/lpd/nprint-script:
</PRE>
</CODE></BLOCKQUOTE>

mentre lo script per nprint sara' qualcosa del genere 
<BLOCKQUOTE><CODE>
<PRE>
      #! /bin/sh
       |/usr/local/bin/nprint -S net -U name -P passwd -q printq-q -
</PRE>
</CODE></BLOCKQUOTE>
       </P>

<H2><A NAME="ss9.6">9.6</A> <A HREF="Printing-HOWTO.html#toc9.6">Ad una stampante EtherTalk (Apple)</A>
</H2>

<P>Il package netatalk comprende qualcosa sul genere di <CODE>nprint</CODE> e
<CODE>smbclient</CODE>. 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
<A HREF="http://garnet.berkeley.edu/~weugster/appleprint.html">web page</A>.</P>

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

<H2><A NAME="ss9.7">9.7</A> <A HREF="Printing-HOWTO.html#toc9.7">Ad una stampante HP o altre stampanti ethernet.</A>
</H2>

<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 
<BLOCKQUOTE><CODE>
<PRE>
       lj-5|remote-hplj:\
               :lp=/dev/null:sh:\
               :sd=/var/spool/lpd/lj-5:\
               :rm=printer.name.com:rp=raw:
</PRE>
</CODE></BLOCKQUOTE>
               </P>
<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.</P>

<H3>Sulle vecchie HP</H3>

<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:
<BLOCKQUOTE><CODE>
<PRE>
#!/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&amp;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 (&lt;IN>) {
          print S;
      }
      sleep 3;
      do dokill();
  } else {
      while(&lt;S>) {
          print;
      }
  }

  sub dokill {
      kill 9,$child if $child;
  }
</PRE>
</CODE></BLOCKQUOTE>
</P>

<H2><A NAME="ss9.8">9.8</A> <A HREF="Printing-HOWTO.html#toc9.8">Esecuzione di if per una stampante remota</A>
</H2>

<P>Un difetto di lpd e' che l'<EM>if</EM> non e' eseguito per le stampanti remote. Se avete
bisogno di eseguire un <EM>if</EM>, potete farlo configurando una coda di stampa doppia,
e riaccodando il lavoro di stampa. Come esempio prendiamo questo printcap:
<BLOCKQUOTE><CODE>
<PRE>
       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:
</PRE>
</CODE></BLOCKQUOTE>

alla luce di questo script di filtraggio filter-lj-5:
<BLOCKQUOTE><CODE>
<PRE>
       #!/bin/sh
       gs &lt;options> -q -dSAFER -sOutputFile=- - | \
               lpr -Plj-5-remote -U$5
</PRE>
</CODE></BLOCKQUOTE>
</P>

<P>L'opzione <EM>-U</EM> 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>
<A HREF="http://www.picante.com/~gtaylor/pht/man/printcap.html">printcap</A></EM>.</P>

<HR>
<A HREF="Printing-HOWTO-10.html">Avanti</A>
<A HREF="Printing-HOWTO-8.html">Indietro</A>
<A HREF="Printing-HOWTO.html#toc9">Indice</A>
</BODY>
</HTML>