<!--
     The FreeBSD Documentation Project

     $FreeBSD$
-->

<chapter id="printing">
  <chapterinfo>
    <authorgroup>
      <author>
	<firstname>Sean</firstname>
	<surname>Kelly</surname>
	<contrib>Aportado por </contrib>
      </author>
      <!-- 30 Sept 1995 -->
    </authorgroup>
    <authorgroup>
      <author>
	<firstname>Jim</firstname>
	<surname>Mock</surname>
	<contrib>Reestructurado y actualizado por </contrib>
	<!-- Mar 2000 -->
      </author>
    </authorgroup>
  </chapterinfo>

  <title>Imprimir</title>

  <sect1>
    <title>Sin&oacute;psis</title>
    <indexterm><primary>Sistema de cola LPD</primary></indexterm>
    <indexterm><primary>imprimir</primary></indexterm>

    <para>FreeBSD puede ser utilizado para imprimir en una gran variedad
      de impresoras, desde las antiguas impresoras de matriz de punto, hasta
      las m&aacute;s modernas impresoras laser, y todo lo que existe en 
      medio de estas, permitiendole crear impresiones de alta calidad, desde 
      cualquier aplicaci&oacute;n que este utilizando.</para>

    <para>FreeBSD tambi&eacute;n puede ser configurado para actuar como 
      servidor de impresi&oacute;n en una red; en esta modalidad, FreeBSD puede
      recibir peticiones de impresi&oacute;n de una gran cantidad de
      computadoras, incluyendo computadoras corriendo FreeBSD, Windows y MacOS.  
      FreeBSD verifica que un trabajo sea impreso a la vez, y puede mantener
      estad&iacute;sticas sobre que usuario y maquina son los que m&aacute;s 
      imprimen, insertar una p&aacute;gina de aviso (<quote>titulares</quote>
      o <quote>p&aacute;ginas de encabezado</quote>), 
      antes de cada trabajo para verificar de quien es cada impresi&oacute;n, 
      y m&aacute;s.</para>

    <para>Al concluir el presente cap&iacute;tulo, usted sabr&aacute;:</para>

    <itemizedlist>
      <listitem>
	<para>Como configurar la cola de impresi&oacute;n en FreeBSD.</para>
      </listitem>

      <listitem>
	<para>Como instalar filtros de impresi&oacute;n, para manejar diferentes
	  trabajos especiales, incluyendo la conversi&oacute;n de documentos a
	  formatos aptos para la impresora.</para>
      </listitem>

      <listitem>
	<para>Como habilitar encabezados, o titularess en sus impresiones.</para>
      </listitem>

      <listitem>
	<para>Como imprimir en impresoras conectadas a otras computadoras</para>
      </listitem>

      <listitem>
	<para>Como imprimir en impresoras conectadas directamente a la red.</para>
      </listitem>

      <listitem>
	<para>Como controlar restricciones de impresi&oacute;n, incluyendo
	  limitantes en el tama&ntilde;o de los trabajos de impresi&oacute;n, y
	  restringiendo la impresi&oacute;n a ciertos usuarios.</para>
      </listitem>

      <listitem>
	<para>Como mantener estad&iacute;sticas de impresi&oacute;n, y cuentas
	  para el uso de la impresora.</para>
      </listitem>

      <listitem>
	<para>Como solucionar problemas de impresi&oacute;n comunes.</para>
      </listitem>
    </itemizedlist>

    <para>Antes de leer este cap&iacute;tulo, usted deber&iacute;a:</para>

    <itemizedlist>
      <listitem>
	<para>Saber como compilar e instalar un nuevo kernel 
	  (<xref linkend="kernelconfig">).</para>
      </listitem>
    </itemizedlist>
  </sect1>

  <sect1 id="printing-intro-spooler">
    <title>Introducci&oacute;n</title>

    <para>Para efecto de poder utilizar impresoras con FreeBSD, es necesario
      que configure estas, para trabajar con el sistema de cola de 
      impresi&oacute;n de Berkeley, tambi&eacute;n conocido como 
      Sistema de Cola <application>LPD</application>.  Este es el sistema
      de control de impresi&oacute;n est&aacute;ndar en FreeBSD.  Este
      cap&iacute;tulo introduce en el sistema <application>LPD</application>,
      llamado comunmente s&oacute;lo <application>LPD</application>, e
      introduce en la configuraci&oacute;n del mismo.</para>

    <para>Si usted esta familiarizado con el sistema de cola de
      impresi&oacute;n <application>LPD</application>, o bien, con
      algun otro sistema de impresi&oacute;n, puede saltar a la
      secci&oacute;n <link
      linkend="printing-intro-setup">Configurando el sistema de 
      Cola de Impresi&oacute;n</link>.</para>

    <para>La aplicaci&oacute;n <application>LPD</application> es 
      responsable de controlar todo lo que se refiere a impresi&oacute;n.
      Es responsable de un gran numero de cosas, tales como:</para>

    <itemizedlist>
      <listitem>
	<para>Controla el acceso a las impresoras conectadas directamente
	  al ordenador y las impresoras conectadas a otras
	  m&aacute;quinas de la red.</para>
      </listitem>

      <indexterm><primary>trabajos de impresi&oacute;n</primary></indexterm>
      <listitem>
	<para>Habilita a usuarios, para efecto de que puedan enviar ficheros
	  a imprimir; estos envios se conocen como <emphasis>trabajos</emphasis>
	  (<quote>jobs</quote>).</para>
      </listitem>

      <listitem>
	<para>Previene el hecho de que varios usuarios accesen a la impresora
	  al mismo tiempo, al mantener un orden en la cola de impresi&oacute;n
	  (<quote>queue</quote>) para cada impresora.</para>
      </listitem>

      <listitem>
	<para>Puede imprimir <emphasis>encabezados</emphasis> (<quote>header</quote>)
	  (tambi&eacute;n conocidos como <emphasis>titularess</emphasis> o
	  p&aacute;ginas de <emphasis>aviso</emphasis>), de tal forma que los
	  usuarios identifiquen f&aacute;cilmente sus impresiones, de una pila
	  de impresiones.</para>
      </listitem>

      <listitem>
	<para>Se ocupa de los par&aacute;metros para impresoras
	  conectadas a puertos seriales.</para>
      </listitem>

      <listitem>
	<para>Puede enviar trabajos de impresi&oacute;n por medio de
	  una red, a una cola <application>LPD</application> de una
	  maquina remota.</para>
      </listitem>

      <listitem>
	<para>Puede ejecutar filtros especiales para dar formato a 
	  trabajos que requieren de un manejo de lenguaje de impresi&oacute;n
	  diferente o impresoras de diferentes capacidades.</para>
      </listitem>

      <listitem>
	<para>Puede mantener un registro por uso de la impresora.</para>
      </listitem>
    </itemizedlist>

    <para>Por medio de un fichero de configuraci&oacute;n
      (<filename>/etc/printcap</filename>), y por medio de programas
      especiales de filtraje, usted puede habilitar al sistema
      <application>LPD</application> para hacer todo o una parte de
      lo mencionado anteriormente, para una gran variedad de
      impresoras.</para>

    <sect2 id="printing-intro-why">
      <title>&iquest;Por qu&eacute; utilizar una Cola de Impresi&oacute;n?</title>

      <para>Si usted es la &uacute;nica persona que hace uso de su sistema,
        probablemente se pregunte por que preocuparse por utilizar un sistema
        de cola de impresi&oacute;n, cuando no requiere acceso a controles,
        encabezados o cuentas para imprimir.  Mientras que es posible habilitar
        un acceso a su impresora de forma directa, usted debe utilizar el
        sistema de cola de impresi&oacute;n, por las siguientes razones:</para>

      <itemizedlist>
	<listitem>
	  <para>El sistema <application>LPD</application> opera los trabajos de
	    impresi&oacute;n es segundo plano; esto es, que usted no tiene que
	    esperar a que los datos sean pasados a la impresora para continuar
	    trabajando.</para>
	</listitem>

	<indexterm><primary>TeX</primary></indexterm>
	<listitem>
	  <para>Convenientemente <application>LPD</application> puede ejecutar
	    un trabajo para que sea filtrado, para a&ntilde;adir caracteres de
	    d&iacute;a/hora o bien convertir un fichero con formato especial
	    (tal como ficheros TeX DVI) a un formato que la impresora entiende.  
	    De tal manera que usted no tenga que hacer estos pasos manualmente.
	    </para>
	</listitem>

	<listitem>
	  <para>Muchos programas, libres y comerciales, proveen de un sistema
	    de impresi&oacute;n que esta basado en el sistema de cola de
	    impresi&oacute;n.  Al configurar su sistema de cola de 
	    impresi&oacute;n, usted podr&aacute; soportar otro software que
	    instale en el futuro o el que tiene actualmente.</para>
	</listitem>
      </itemizedlist>
    </sect2>
  </sect1>

  <sect1 id="printing-intro-setup">
    <title>Configuraci&oacute;n B&aacute;sica</title>

    <para>Para efecto de utilizar impresoras con el sistema de
      cola <application>LPD</application>, es necesario que se instale
      f&iacute;sicamente la impresora y el software de 
      <application>LPD</application>.  Este documento describe estos dos
      niveles de configuraci&oacute;n:</para>

    <itemizedlist>
      <listitem>
	<para>Vea la secci&oacute;n <link linkend="printing-simple">
	  Configuraci&oacute;n Simple de una Impresora</link>, para aprender
	  a conectar una impresora, indicarle a <application>LPD</application>
	  como comunicarse con ella, e imprimir ficheros de texto plano en
	  dicha impresora.</para>
      </listitem>

      <listitem>
	<para>Vea la secci&oacute;n <link linkend="printing-advanced">
	  Configuraci&oacute;n Avanzada de una Impresora</link>, para ver
	  como imprimir gran variedad de formatos especiales, imprimir
	  encabezados, para imprimir por medio de una red, controlar acceso
	  a las impresoras y crear cuentas de impresi&oacute;n.</para>
      </listitem>
    </itemizedlist>

    <sect2 id="printing-simple">
      <title>Configuraci&oacute;n Simple de una Impresora</title>

      <para>La presente secci&oacute;n le mostrar&aacute; como instalar
        f&iacute;sicamente la impresora, as&iacute; como el software de
	    <application>LPD</application> para usar dicha impresora.  
	    Le mostrar&aacute; lo b&aacute;sico de:</para>

      <itemizedlist>
	<listitem>
	  <para>La secci&oacute;n <link linkend="printing-hardware">
	    Instalaci&oacute;n F&iacute;sica</link>, le da algunos consejos
	    sobre como instalar su impresora a los puertos de su 
	    computadora.</para>
	</listitem>

	<listitem>
	  <para>La secci&oacute;n <link linkend="printing-software">
	    Instalaci&oacute;n de Software</link>, le muestra como instalar
	    y configurar el fichero de configuraci&oacute;n de 
	    <application>LPD</application> (<filename>/etc/printcap</filename>).
	    </para>
	</listitem>
      </itemizedlist>

      <para>Si usted esta instalando una impresora que utiliza protocolos de
        red para imprimir en lugar de una conexi&oacute;n directa a su 
        puerto serial o paralelo, vea la secci&oacute;n <link
        linkend="printing-advanced-network-net-if">Impresoras con Interfaces
        de Red para Secuencia de Datos</link>.</para>

      <para>Aun cuando esta secci&oacute;n se llama <quote>Configuraci&oacute;n
        Simple de una Impresora</quote>, puede resultar un tanto
        complicada.  Conseguir que su impresora trabaje con su ordenador y con
        la cola de impresi&oacute;n <application>LPD</application> es la parte
        m&aacute;s compleja.  Las opciones avanzadas, tal como imprimir 
        encabezados y crear cuentas, son sencillas una vez que su impresora
        est&aacute; trabajando.</para>

      <sect3 id="printing-hardware">
	<title>Instalaci&oacute;n F&iacute;sica</title>

	<para>Esta secci&oacute;n le informa sobre varias fomras en que
	  puede usted conectar la impresora a su PC.  Se describen los tipos
	  de puertos y cables, as&iacute; como la configuraci&oacute;n que
	  debe tener en su kernel, para permitir que FreeBSD se pueda
	  comunicar con su impresora.</para>

	<para>Si ya ha conectado su impresora y ha impreso exitosamente
	  trabajando en otro sistema operativo, probablemente desee brincar
	  a la secci&oacute;n <link linkend="printing-software">Configuraci&oacute;n
	  del Software</link>.</para>

	<sect4 id="printing-ports">
	  <title>Puertos y Cables</title>

	  <para>Practicamente cualquier impresora que adquiera hoy en d&iacute;a
	    para PC, cuenta con soporte para una o ambas interfaces que se 
	    presentan a continuaci&oacute;n:</para>

	  <itemizedlist>
	    <indexterm>
        <primary>impresora</primary>
        <secondary>serial</secondary>
      </indexterm>
	    <listitem>
	      <para>La interfaz <emphasis>serial</emphasis>, utiliza el puerto
	        serial de su computadora para enviar datos a la impresora.  La
	        interfaz serial es com&uacute;n en la industria de la
	        computaci&oacute;n y los cables existen disponibles facilmente
	        e incluso sencillos de hacer. En ocasiones las interfaces seriales 
	        requieren de cables especiales y posiblemente cierta 
	        configuraci&oacute;n compleja de opciones de comunicaci&oacute;n.
	        </para>
	    </listitem>

	    <indexterm>
        <primary>impresora</primary>
        <secondary>en paralelo</secondary>
      </indexterm>
	    <listitem>
	      <para>La interfaz en <emphasis>paralelo</emphasis> utiliza el puerto
	        paralelo de su computadora para enviar datos a la impresora.  Las
	        interfaces en paralelo son comunes en el mercado  de las PCs.  Los
	        cables son f&aacute;ciles de conseguir, pero un poco m&aacute;s
	        complicados de hacer a mano.  Normalmente no existen opciones de
	        comunicaci&oacute;n, haciendo su configuraci&oacute;n mucho 
	        m&aacute;s sencilla.</para>

	      <indexterm>
	        <primary>centronics</primary>
		<see>impresoras en paralelo</see>
	      </indexterm>
	      <para>En ocasiones las interfaces en paralelo son conocidas como
	        interfaces <quote>Centronics</quote>, en virtud del tipo de 
	        conector en la impresora.</para>
	    </listitem>
	  </itemizedlist>

	  <para>En t&eacute;rminos generales los interfaces seriales son m&aacute;s
	    lentos que las interfaces en paralelo. Por otro lado los interfaces en
	    paralelo s&oacute;lo ofrecen comunicaci&oacute;n de una v&iacute;a (de 
	    la computadora a la impresora), mientras que los seriales ofrecen de
	    dos v&iacute;as.  Gran cantidad de recientes impresoras y puertos
	    paralelos, pueden comunicarse en ambas direcciones bajo FreeBSD, 
	    cuando se utiliza un cable compatible con IEEE1284.</para>

	  <indexterm><primary>PostScript</primary></indexterm>
	  <para>Normalmente, el &uacute;nico escenario donde requiere de una
	    comunicaci&oacute;n de ambas v&iacute;as con la impresora, es
	    cuando la impresora maneja PostScript.  Las impresoras que manejan
	    PostScript detallan gran cantidad de informaci&oacute;n.  De hecho,
	    los trabajos PostScript, son programas enviados a la impresora; los
	    cuales no requieren de papel y pueden enviar la salida directamente 
	    a la computadora.  PostScript utiliza una comunicaci&oacute;n de dos
	    v&iacute;as, para informar al ordenador de los problemas que se 
	    puedan presentar, tal como errores en los programas PostScript o
	    papeles atascados.  Sus usuarios pueden apreciar este tipo de
	    informaci&oacute;n.  M&aacute;s all&aacute; de esto, la mejor forma 
	    de contabilizar con impresoras PostScript, es utilizando dos v&iacute;as
	    de comunicaci&oacute;n: usted solicita a la impresora el conteo de
	    impresiones (esto es, todas las impresiones hechas en su vida),
	    posteriormente envia el trabajo del usuario y repite la solicitud
	    de conteo.  Resta los dos valores obtenidos y sabra cuanto debe 
	    cobrar al usuario por uso de papel.</para>
	</sect4>
	  
	<sect4 id="printing-parallel">
	  <title>Puertos Paralelos</title>

	  <para>Para conectar una impresora usando el puerto en paralelo, 
	    conecte el cable Centronics entre la impresora y la 
	    computadora.  Las instrucciones que vienen con su impresora,
	    con su computadora o ambas, deben ser una buena gu&iacute;a
	    para llevar esto a cabo.</para>

	  <para>Recuerde cual es el puerto en paralelo que utiliz&oacute; en
	    su computadora.  Para FreeBSD, el primer puerto paralelo es
	    <filename>/dev/lpt0</filename>, el segundo puerto es
	    <filename>/dev/lpt1</filename> y as&iacute; sucesivamente.</para>
	</sect4>

	<sect4 id="printing-serial">
	  <title>Puertos Seriales</title>

	  <para>Para conectar una impresora, usando el puerto serial, conecte
	    el cable apropiado entre la impresora y el ordenador.  Las
	    instrucciones que vienen con su impresora, computadora o
	    ambas, deben ser suficientes para llevar esto a cabo.</para>

	  <para>Si usted no esta seguro de cual es el <quote>cable serial 
	    apropiado</quote>, puede intentar alguna de las siguientes 
	    alternativas:</para>

	  <itemizedlist>
	    <listitem>
	      <para>Un cable de <emphasis>m&oacute;dem</emphasis> conecta cada pin del
	        conector de un extremo, con el conector del otro extremo, de manera
	        directa.  Este tipo de cable tambi&eacute;n se le conoce como cable 
	        <quote>DTE-a-DCE</quote>.</para>
	    </listitem>

	    <indexterm><primary>cable de m&oacute;dem-nulo</primary></indexterm>
	    <listitem>
	      <para>Un cablde de <emphasis>m&oacute;dem-nulo</emphasis> conecta de
	        fomra directa algunos pins, algunos otros son compartidos (envia
	        datos para recibir datos, por ejemplo), y algunos otros internamente
	        son deshabilitados en los conectores.  Este tipo de cable 
	        tambi&eacute;n se le conoce como cable <quote>DTE-a-DTE</quote>.</para>
	    </listitem>

	    <listitem>
	      <para>Un cable de <emphasis>impresora serial</emphasis>, s&oacute;lo
	        es requerido por algunas impresoras poco comunes, es similar al
	        cable de m&oacute;dem-nulo, pero este envia se&ntilde;ales a su
	        contraparte, en lugar de que internamente se deshabilite.</para>
	    </listitem>
	  </itemizedlist>

	  <indexterm><primary>velocidad de baudio</primary></indexterm>
	  <indexterm><primary>paridad</primary></indexterm>
	  <indexterm><primary>protocolo de control de flujo</primary></indexterm>
	  <para>Tambi&eacute;n es necesario que configure los par&aacute;metros de
	    comunicaci&oacute;n para la impresora, nomralmente esto lo realiza
	    desde los controles de la misma o interruptores DIP en la impresora.  
	    Selecciones el <literal>bps</literal> (bits por segundo y en ocasiones
	    llamado <emphasis>velocidad de baudio</emphasis>) m&aacute;s alto, que
	    tanto su ordenador como impresora soporten.  Seleccione 7 u 8 bits de
	    datos; la paridad establezcala en: ninguna, igual o aleatoria y 1 o 2
	    en bits de paro.  Tambi&eacute;n seleccione un protocolo para el
	    control de flujo, que puede ser: ninguno o XON/XOFF (tambi&eacute;n
	    conocido como <quote>in-band</quote> o <quote>software</quote>).  
	    Recuerde las opciones que haya seleccionado en esta parte, 
	    para la configuraci&oacute;n del software, que veremos en la
	    siguiente secci&oacute;n.</para>
	</sect4>
      </sect3>

      <sect3 id="printing-software">
	<title>Configuraci&oacute;n del Software</title>

	<para>La presente secci&oacute;n describe la configuraci&oacute;n necesaria
	  para poder imprimir usando el sistema de cola 
	  <application>LPD</application>, bajo FreeBSD.</para>

	<para>Aqui presentamos un resumen de los pasos necesarios:</para>

	<procedure>
	  <step>
	    <para>Configure su kernel, si es necesario, para habilitar el uso del
	      puerto al que esta conectado su impresora.  En la secci&oacute;n
	      <link linkend="printing-kernel">Configuraci&oacute;n del Kernel</link>
	      encontrar&aacute; toda la informaci&oacute;n necesaria, para llevar
	      esto a cabo.</para>
	  </step>

	  <step>
	    <para>Establecer en modo de comunicaci&oacute;n el puerto en paralelo, 
	      si es que esta usando dicho puerto.  La secci&oacute;n <link
	      linkend="printing-parallel-port-mode">Estableciendo el Modo de
	      Comunicaci&oacute;n en el Puerto en Paralelo</link> le da detalles
	      al respecto.</para>
	  </step>

	  <step>
	    <para>Compruebe si el sistema operativo puede enviar datos a la 
	      impresora.  La secci&oacute;n <link 
	      linkend="printing-testing">Verificando la Comunicaci&oacute;n con la
	      Impresora</link> le puede dar detalles sobre como hacer esto.</para>
	  </step>

	  <step>
	    <para>Configurar <application>LPD</application> para su uso con la 
	      impresora, modificando el fichero <filename>/etc/printcap</filename>.  
	      Posteriormente en este cap&iacute;tulo, veremos como se lleva a 
	      cabo esto.</para>
	  </step>
	</procedure>

	<sect4 id="printing-kernel">
	  <title>Configuraci&oacute;n del Kernel</title>

	  <para>El kernel del sistema operativo es compilado para trabajar con 
	    ciertos dispositivos.  El puerto serial o paralelo de su computadora
	    es parte de los dispositivos que debe incluirse en la compilaci&oacute;n
	    del kernel.  Por lo tanto, puede que sea necesario recompilar el kernel
	    incluyendo el soporte para el o los puertos serial y/o paralelo, si
	    es que el kernel no cuente ya con dicho soporte.</para>

	  <para>Para averiguar si el kernel que tiene instalado actualmente, cuenta
	    con soporte para el puerto serial, teclee lo siguiente:</para>

	  <screen>&prompt.root; <userinput>dmesg | grep sio<replaceable>N</replaceable></userinput></screen>

	  <para>Donde <replaceable>N</replaceable> es el numero de puerto serial, 
	    comenzando desde cero.  Si observa una salida similar a la 
	    siguiente:</para>

	  <screen>sio2 at 0x3e8-0x3ef irq 5 on isa
sio2: type 16550A</screen>

	  <para>entonces su kernel ya cuenta con soporte para el puerto.</para>

	  <para>Para averiguar si su kernel cuenta con soporte para el puerto en
	    paralelo, teclee:</para>

	  <screen>&prompt.root; <userinput>dmesg | grep lpt<replaceable>N</replaceable></userinput></screen>

	  <para>Donde <replaceable>N</replaceable> es el numero de puerto serial, 
	    comenzando desde cero.  Si observa una salida similar a la
	    siguiente:</para>

	    <screen>lpt0 at 0x378-0x37f on isa</screen>

	  <para>entonces su kernel cuenta con soporte para el puerto.</para>

	  <para>Puede que sea necesario recompilar su kernel, para efecto de que
	    su kernel cuente con el soporte para el puerto serial o paralelo que
	    este utilizando su impresora.</para>

	  <para>Para a&ntilde;adir soporte para el puerto serial, vea la 
	    secci&oacute;n en Configuraci&oacute;n del Kernel.  Para a&ntilde;adir
	    soporte para el puerto paralelo, vea esa secci&oacute;n
	    <emphasis>y</emphasis> la siguiente secci&oacute;n.</para>
	</sect4>
      </sect3>

      <sect3 id="printing-dev-ports">
	<title>A&ntilde;adiendo Dispositivos de Puertos en 
	  <filename>/dev</filename></title>

	<para>Aun cuando el kernel cuente con el soporte de comunicaciones para
	  puertos seriales o en paralelo, aun deber&aacute; de contar con las
	  interfaces necesarias en su sistema, por medio de las cuales el sistema
	  puede enviar y recibir los datos.  En el directorio 
	  <filename>/dev</filename> es donde encontrar&aacute; dichas interfaces
	  en su sistema.</para>

	<para>Para <emphasis>a&ntilde;adir una entrada, para sus puertos, en el
	  directorio <filename>/dev</filename></emphasis> deber&aacute;:</para>

	<procedure>
	  <step>
	    <para>Cambiar de usuario a <username>root</username> con el comando 
	      &man.su.1;.  Ingresar la contrase&ntilde;a de <username>root</username>
	      cuando le sea solicitada.</para>
	  </step>

	  <step>
	    <para>Cambiar su posici&oacute;n al directorio <filename>/dev</filename>
	      de la siguiente forma:</para>

	    <screen>&prompt.root; cd <filename>/dev</filename></screen>
	  </step>

	  <step>
	    <para>Teclear:</para>

	    <screen>&prompt.root; <userinput>./MAKEDEV <replaceable>PUERTO</replaceable></userinput></screen>

	    <para>Donde <replaceable>PUERTO</replaceable> es la entrada del 
	      dispositivo que desea crear. Puede utilizar 
	      <literal>lpt0</literal> para el primer puerto en paralelo,
	      <literal>lpt1</literal> para el segundo puerto, y as&iacute; 
	      sucesivamente, para el primer puerto serial puede utilizar 
	      <literal>ttyd0</literal>, y para el segundo 
	      <literal>ttyd1</literal> y as&iacute; sucesivamente.</para>
	  </step>

	  <step>
	    <para>Teclee:</para>

	    <screen>&prompt.root; <userinput>ls -l <replaceable>PUERTO</replaceable></userinput></screen>

	    <para>para asegurarase de que la entrada del dispositivo correspondiente 
	      se ha creado.</para>
	  </step>
	</procedure>

	<sect4 id="printing-parallel-port-mode">
	  <title>Configurando el modo de Comunicaci&oacute;n para el
	    Puerto Paralelo</title>

	  <para>Cuando utiliza el puerto paralelo, puede seleccionar si FreeBSD va
	    a utilizar un modo de comunicaci&oacute;n por medio de interruptores
	    o a petici&oacute;n, con la impresora.</para>

	  <itemizedlist>
	    <listitem>
	      <para>El m&eacute;todo por medio de <emphasis>interruptores</emphasis>
	        es el m&eacute;todo que utiliza el kernel GENERICO de FreeBSD.  Con 
	        este m&eacute;todo el sistema operativo utiliza un IRQ para 
	        determinar si la impresora esta lista para recibir datos.</para>
	    </listitem>

	    <listitem>
	      <para>El m&eacute;todo a <emphasis>petici&oacute;n</emphasis> le
	        indica al sistema operativo que constantemente le pregunte a
	        la impresora si esta lista para recibir datos.  Una vez que
	        ha obtenido respuesta, el kernel comienza a transferir los
	        datos.</para>
	    </listitem>
	  </itemizedlist>

	  <para>Normalmente el m&eacute;todo por medio de interruptores es m&aacute;s
	    r&aacute;pido, pero nos ocupa un preciado IRQ.  Se sabe que algunas
	    impresoras nuevas de HP no funcionan muy bien con este m&eacute;todo
	    aparentemente debido (sin que aun se entienda el por que) a un
	    problema de tiempos.  Estas impresoras necesitan el m&eacute;todo a
	    petici&oacute;n.  Es conveniente que utilice el m&eacute;todo que
	    se ajuste a sus necesidades.  Algunas impresoras funcionan en ambos
	    m&eacute;todos, pero son dolorosamente lentas usando el m&eacute;todo
	    por medio de interruptores.</para>

	  <para>Para establecer el m&eacute;todo de comunicaci&oacute;n, puede
	    hacerlo de dos formas: configurando su kernel o bien, utilizando
	    el programa &man.lptcontrol.8;.</para>

	  <para><emphasis>Para establecerlo configurando su kernel,
	    deber&aacute;:</emphasis></para>

	  <procedure>
	    <step>
	      <para>Editar su fichero de configuraci&oacute;n del kernel.  Busque
	        una l&iacute;nea que contenga <literal>lpt0</literal>, si esta 
	        no existe a&ntilde;adala.  Si esta configurando su segundo puerto 
	        en paralelo, use <literal>lpt1</literal>.  Para un tercer puerto
	        paralelo utilice <literal>lpt2</literal> y as&iacute;
	        sucesivamente.</para>

	      <itemizedlist>
		<listitem>
		  <para>Si desea utilizar el modo por medio de interruptor, a&ntilde;ada
		    el especificador de <literal>irq</literal>:</para>

		  <programlisting>device lpt0 at isa? port? tty irq <replaceable>N</replaceable> vector lptintr</programlisting>

		  <para>Donde <replaceable>N</replaceable> es el numero de IRQ del puerto
		    paralelo de su computadora.</para>
		</listitem>

		<listitem>
		  <para>Si desea utilizar el modo a petici&oacute;n, no necesita agregar 
		    el especificador de <literal>irq</literal>:</para>

		  <programlisting>device lpt0 at isa? port? tty vector lptintr</programlisting>
		</listitem>
	      </itemizedlist>
	    </step>

	    <step>
	      <para>Guarde el fichero.  Posteriormente termine el proceso de 
	        configuraci&oacute;n, recompilaci&oacute;n e instalaci&oacute;n del
	        kernel, despu&eacute;s reinicie el sistema.  Vea <link
	        linkend="kernelconfig">Configuraci&oacute;n del Kernel</link> para
	        m&aacute;s informaci&oacute;n al respecto.</para>
	    </step>
	  </procedure>

	  <para><emphasis>Para establecer el modo de comunicaci&oacute;n</emphasis>
	    usando &man.lptcontrol.8;:</para>

	  <procedure>
	    <step>
	      <para>Teclee:</para>

	      <screen>&prompt.root; <userinput>lptcontrol -i -d <filename>/dev/lpt<replaceable>N</replaceable></filename></userinput></screen>

	      <para>para indicar el modo por medio de interruptor para 
		<literal>lpt<replaceable>N</replaceable></literal>.</para>
	    </step>

	    <step>
	      <para>Teclee:</para>

	      <screen>&prompt.root; <userinput>lptcontrol -p -d <filename>/dev/lpt<replaceable>N</replaceable></filename></userinput></screen>

	      <para>para establecer el modo a petici&oacute;n para
		<literal>lpt<replaceable>N</replaceable></literal>.</para>
	    </step>
	  </procedure>

	  <para>Estos comandos los podr&iacute;a incluir en su fichero
	    <filename>/etc/rc.local</filename> para que el sistema reconozca
	    estos modos cada vez que inicia el sistema.  Vea &man.lptcontrol.8; para
	    m&aacute;s informaci&oacute;n al respecto.</para>
	</sect4>

	<sect4 id="printing-testing">
	  <title>Verificando la Comunicaci&oacute;n de la Impresora</title>

	  <para>Antes de proceder a configurar el sistema de cola de 
	    impresi&oacute;n, es conveniente verificar que nuestro sistema
	    operativo pueda enviar datos exitosamente a nuestra impresora.  Es
	    mucho m&aacute;s sencillo detectar errores cuando se configura por
	    separado el m&eacute;todo de comunicaci&oacute;n y el sistema de
	    cola de impresi&oacute;n.</para>

	  <para>Para probar nuestra impresora, enviaremos un poco de texto.  Para 
	    impresoras que inmediatamente pueden imprimir caracteres, el programa
	    &man.lptest.1; es perfecto: este genera todos los 96 caracteres ASCII
	    imprimibles en 96 l&iacute;neas.</para>

	  <indexterm><primary>PostScript</primary></indexterm>
	  <para>Para impresoras PostScript (o de otro lenguaje de impresi&oacute;n),
	    vamos a necesitar una prueba m&aacute;s sofisticada.  Un peque&ntilde;o
	    programa PostScript, como el siguiente, ser&aacute; suficiente:</para>

	  <programlisting>%!PS
100 100 moveto 300 300 lineto stroke
310 310 moveto /Helvetica findfont 12 scalefont setfont
(Is this thing working?) show
showpage</programlisting>

	  <para>El c&oacute;digo PostScript descrito puede guardarse en un fichero y
	    usarse en el ejemplo que aparece en la siguiente secci&oacute;n.</para>

	  <indexterm><primary>PCL</primary></indexterm>
	  <note>
	    <para>Cuando este documento se refiere a lenguaje de impresi&oacute;n,
	      se asume lenguaje como PostScript y no el PCL de Hewlett Packard.  Aun
	      cuando PCL tiene gran funcionalidad, pueden acabar mezclandose 
	      caracteres de escape con el texto plano, y ese es el tipo de lenguaje
	      de impresi&oacute;n, para el cual necesitaremos realizar ajustes
	      especiales.</para>
	  </note>

	  <sect5 id="printing-checking-parallel">
	    <title>Verificando Impresoras en Paralelo</title>

	    <indexterm>
        <primary>impresora</primary>
        <secondary>paralelo</secondary>
      </indexterm>
	    <para>Esta secci&oacute;n le indica como comprobar la comunicaci&oacute;n
	      de una impresora en paralelo, bajo FreeBSD.</para>

	    <para><emphasis>Para probar una impresora en paralelo:</emphasis></para>

	    <procedure>
	      <step>
		<para>Cambiar a <username>root</username> con el comando &man.su.1;</para>
	      </step>

	      <step>
		<para>Enviar datos a la impresora.</para>

		<itemizedlist>
		  <listitem>
		    <para>Si la impresora puede imprimir texto plano, usar el comando
		      &man.lptest.1;.  Teclee:</para>

		    <screen>&prompt.root; <userinput>lptest &gt; /dev/lpt<replaceable>N</replaceable></userinput></screen>

		    <para>Donde <replaceable>N</replaceable> es el numero del puerto en
		      paralelo, comenzando desde cero.</para>
		  </listitem>

		  <listitem>
		    <para>Si la impresora utiliza PostScript u otro lenguaje de
		      impresi&oacute;n, entonces envie un peque&ntilde;o programa a
		      la impresora. Teclee:</para>

		    <screen>&prompt.root; <userinput>cat &gt; /dev/lpt<replaceable>N</replaceable></userinput></screen>

		    <para>Posteriormente, l&iacute;nea por l&iacute;nea teclee el 
		      programa, <emphasis>cuidadosamente</emphasis> en virtud de que no
		      puede editar una l&iacute;nea ya que presionado la tecla
		      <literal>RETURN</literal> o <literal>ENTER</literal>.  Una vez que
		      ha terminado de introducir el programa, presiona las teclas
		      <literal>CONTROL+D</literal>, o cualquier tecla que funcione para
		      efecto de especificar un fin de fichero.</para>

		    <para>Otra manera de hacer esto, es guardar el programa en un 
		      fichero y teclear:</para>

		    <screen>&prompt.root; <userinput>cat <replaceable>fcihero</replaceable> &gt; /dev/lpt<replaceable>N</replaceable></userinput></screen>

		    <para>Donde <replaceable>fichero</replaceable> es el nombre del
		      fichero que le dio al programa, que desea enviar a imprimir.</para>
		  </listitem>
		</itemizedlist>
	      </step>
	    </procedure>

	    <para>En este punto debe ver alguna impresi&oacute;n.  No se preocupe si
	      el texto no aparece bien; es algo que arreglaremos m&aacute;s 
	      adelante.</para>
	  </sect5>

	  <sect5 id="printing-checking-serial">
	    <title>Verificando una Impresora Serial</title>

	    <indexterm>
        <primary>impresora</primary>
        <secondary>serial</secondary>
      </indexterm>
	    <para>Esta secci&oacute;n explica como verificar la comunicaci&oacute;n,
	      bajo FreeBSD, de una impresora conectada al puerto serial.</para>

	    <para><emphasis>Para probar una impresora conectada el puerto
	      serial:</emphasis></para>

	    <procedure>
	      <step>
		<para>Cambiar a <username>root</username> usando &man.su.1;.</para>
	      </step>

	      <step>
		<para>Edite el fichero <filename>/etc/remote</filename>.  
		  A&ntilde;adiendo la siguiente entrada:</para>

		<programlisting>printer:dv=/dev/<replaceable>puerto</replaceable>:br#<replaceable>bps</replaceable>:pa=<replaceable>paridad</replaceable></programlisting>

		<indexterm><primary>bits-por-segundo</primary></indexterm>
		<indexterm><primary>puerto serial</primary></indexterm>
		<indexterm><primary>paridad</primary></indexterm>
		<para>Donde <replaceable>puerto</replaceable> es el dispositivo usado
		  por el puerto serial (<literal>ttyd0</literal>, 
		  <literal>ttyd1</literal>, etc.), <replaceable>bps</replaceable> se
		  refiere a la velocidad, en bits-por-segundo, a la que se comunica la
		  impresora, y <replaceable>paridad</replaceable> es la paridad
		  requerida por la impresora (ya sea <literal>even</literal>, 
		  <literal>odd</literal>, <literal>none</literal> o
		  <literal>zero</literal>).</para>

		<note>
		  <para>N de T: Las opciones de paridad se han dejado en ingl&eacute;s, 
		    en virtud de que as&iacute; deber&aacute;n especificarse en la
		    configuraci&oacute;n.</para>
		</note>

		<para>He aqui un ejemplo para una impresora conectada por medio de un 
		  puerto serial, el tercer puerto a 19200 bps, sin paridad:</para>

		<programlisting>printer:dv=/dev/ttyd2:br#19200:pa=none</programlisting>
	      </step>

	      <step>
		<para>Conectarse a la impresora por medio de &man.tip.1;.
		  Teclee:</para>

		<screen>&prompt.root; <userinput>tip printer</userinput></screen>

		<para>Si este paso no funciona, edite nuevamente el fichero 
		  <filename>/etc/remote</filename> e intente utilizando
		  <filename>/dev/cuaa<replaceable>N</replaceable></filename>
		  en lugar de utilizar 
		  <filename>/dev/ttyd<replaceable>N</replaceable></filename>.</para>
	      </step>

	      <step>
		<para>Envio de datos a la impresora.</para>

		<itemizedlist>
		  <listitem>
		    <para>Si la impresora puede imprimir texto plano, entonces utilice
		      &man.lptest.1;.  Teclee:</para>

		    <screen>&prompt.user; <userinput>$lptest</userinput></screen>
		  </listitem>

		  <listitem>
		    <para>Si es una impresora PostScript o que utilice otro lenguaje,
		      entonces envie un peque&ntilde;o programa a la impresora.  Teclee
		      el programa, l&iacute;nea por l&iacute;nea, 
		      <emphasis>muy cuidadosamente</emphasis> ya que algunas teclas, como
		      la de retroceso son significativas para la impresora.  Puede ser 
		      que tambi&eacute;n necesite un caracter especial para marcar el 
		      fin-de-fichero y que la impresora sepa que ha recibido el 
		      programa completo.  Para impresoras PostScript, utilice las teclas
		      <literal>CONTROL+D</literal>.</para>

		    <para>Otra variante es, guardar el programa en un fichero y teclear:
		    </para>

		    <screen>&prompt.user; <userinput>&gt;<replaceable>fichero</replaceable></userinput></screen>

		    <para>Donde <replaceable>fichero</replaceable> es el nombre del 
		      fichero que contiene el programa.  Una vez que &man.tip.1; envia
		      el programa, presione la tecla correspondiente a fin de
		      archivo.</para>
		  </listitem>
		</itemizedlist>
	      </step>
	    </procedure>

	    <para>Usted debe ver algo de impresi&oacute;n.  No se preocupe si el 
	      texto no se ve del todo bien; posteriormente arreglaremos esto.</para>
	  </sect5>
	</sect4>
      </sect3>

      <sect3 id="printing-printcap">
	<title>Habilitando la Cola de Impresi&oacute;n: El fichero
	  <filename>/etc/printcap</filename></title>

	<para>En este punto, su impresora debe estar conectada, su kernel
	  configurado con el soporte de comunicaci&oacute;n, y debe haber podido
	  enviar datos a su impresora.  Ahora estamos listos para configurar
	  <application>LPD</application> para controlar el accesos a nuestra
	  impresora.</para>

	<para>Para efecto de configurar <application>LPD</application>, es
	  necesario editar el fichero <filename>/etc/printcap</filename>.  El
	  sistema de cola de <application>LPD</application> lee este fichero
	  cada vez que se utiliza, de tal forma que los cambios que se realicen
	  en este fichero, surten efecto inmediatamente.</para>

	<indexterm>
    <primary>impresora</primary>
    <secondary>caracter&iacute;sticas</secondary>
  </indexterm>
	<para>El formato que mantiene el fichero &man.printcap.5; es muy
	  concreto.  Utilice su editor de texto favorito para hacer cambios
	  en <filename>/etc/printcap</filename>.  El formato es id&eacute;ntico
	  al que guardan los ficheros que describen capacidades, tal como
	  <filename>/usr/share/misc/termcap</filename> y
	  <filename>/etc/remote</filename>.  Para ver mayor informaci&oacute;n
	  con respecto al formato, vea la p&aacute;gina de ayuda &man.cgetent.3;.
	  </para>

	<para>De un modo simple, la configuraci&oacute;n de una cola consiste en
	  los siguientes pasos:</para>

	<procedure>
	  <step>
	    <para>Seleccione un nombre (y algunos alias convenientes) para la
	      impresora, y especif&iacute;quelos en el fichero
	      <filename>/etc/printcap</filename> ; vea la secci&oacute;n 
	      <link linkend="printing-naming">Nombrando la Impresora</link>
	      para m&aacute;s informaci&oacute;n al respecto.</para>
	  </step>

	  <indexterm><primary>p&aacute;ginas encabezado</primary></indexterm>
	  <step>
	    <para>Desactive el encabezado de p&aacute;ginas (el cual esta
	      activado por default), al insertar la caracter&iacute;stica
	      <literal>sh</literal>; vea la secci&oacute;n <link
	      linkend="printing-no-header-pages">Eliminando las P&aacute;ginas
	      de Encabezados</link> para m&aacute;s informaci&oacute;n al
	      respecto.</para>
	  </step>

	  <step>
	    <para>Cree un directorio para la cola, y especifique su
	      ubicaci&oacute;n con la caracter&iacute;stica
	      <literal>sd</literal>; vea la secci&oacute;n <link
	      linkend="printing-spooldir">Creando el Directorio de
	      la Cola</link> para mayor informaci&oacute;n.</para>
	  </step>

	  <step>
	    <para>Ubique el dispositivo <filename>/dev</filename> a
	      usar por la impresora e indiquelo en el fichero
	      <filename>/etc/printcap</filename> con la caracter&iacute;stica
	      <literal>lp</literal>; vea la secci&oacute;n <link
	      linkend="printing-device">Identificando el Dispositivo de
	      Impresi&oacute;n</link> para mayor informaci&oacute;n.  As&iacute;
	      mismo, si la impresora esta conectada a un dispositivo serial,
	      utilice las caracter&iacute;sticas <literal>fs</literal>,
	      <literal>fc</literal>, <literal>xs</literal> y <literal>xc</literal>
	      para establecer los par&aacute;metros de comunicaci&oacute;n; esto
	      se detalla en la secci&oacute;n <link
	      linkend="printing-commparam">Configurando los Par&aacute;metros de
	      Comunicaci&oacute;n de la Cola de Impresi&oacute;n</link>.</para>
	  </step>

	  <step>
	    <para>Instalar un filtro de entrada de texto plano; vea la
	      secci&oacute;n <link linkend="printing-textfilter">Instalando un
	      Filtro de Texto</link> para m&aacute;s detalles.</para>
	  </step>

	  <step>
	    <para>Probar la configuraci&oacute;n, al imprimir algo con el comando
	      &man.lpr.1;.  Para m&aacute;s detalles vea las secciones <link
	      linkend="printing-trying">Probando la Configuraci&oacute;n</link> y
	      <link linkend="printing-troubleshooting">Resoluci&oacute;n de 
	      Problemas</link>.
	      </para>
	  </step>
	</procedure>

	<note>
	  <para>Las impresoras basadas en un lenjuaje, tal como PostScript,  no
	    pueden imprimir texto plano directamente.  Los pasos de 
	    configuraci&oacute;n mencionados anteriormente, as&iacute; como las
	    siguientes secciones, asumen que si usted cuenta con una impresora
	    de este tipo, s&oacute;lo va a imprimir ficheros que la impresora
	    puede manejar.</para>
	</note>

	<para>Normalmente los usuarios esperan poder imprimir texto plano a
	  cualquier impresora conectada al sistema.  Los programas que usan como
	  interfaz de impresi&oacute;n a <application>LPD</application>, asumen
	  lo mismo.  Si usted cuenta con una impresora basada en lenguaje y desea
	  poder imprimir en el lenguaje de la impresora <emphasis>as&iacute; como
	  </emphasis> texto plano, es importante considerar que debe a&ntilde;adir
	  un paso adicional a los mencionados anteriormente: instalar un programa
	  de conversi&oacute;n detexto-plano-a-PostScript (u otro lenguaje).  La
	  secci&oacute;n <link linkend="printing-advanced-if-conversion">Acomodando
	  Trabajos de Texto Plano en Impresoras PostScript</link> le indica como
	  debe hacerse esto.</para>

	<sect4 id="printing-naming">
	  <title>Nombrando la Impresora</title>

	  <para>El primer paso (sencillo) es escojer un nombre para su impresora.  
	    En realidad no importa mucho si este nombre es funcional o un tanto
	    abstracto, en virtud de que usted podr&aacute; asignar alias para la
	    impresora.</para>

	  <para>Cuando menos una de las impresoras se&ntilde;aladas en el fichero
	    <filename>/etc/printcap</filename> debe contar con el alias
	    <literal>lp</literal>.  Este es el nombre de la impresora por default.
        Si los usuarios del sistema no cuentan con la variable de entorno 
        <envar>PRINTER</envar> o bien no especifican en la l&iacute;nea de
        comando, al ejecutar cualquier comando de <application>LPD</application>,
        el nombre de la impresora a utilizar, entonces <literal>lp</literal>
        ser&aacute; la impresora por default a utilizar.</para>

	  <para>Tambi&eacute;n, como pr&aacute;ctica com&uacute;n, se suele asignar
	    el &uacute;ltimo alias a la descripci&oacute;n completa de la
	    impresora, incluyendo marca y modelo.</para>

	  <para>Una vez que ha seleccionado un nombre y algunos aliases, ingreselos
	    en el fichero <filename>/etc/printcap</filename>.  El nombre de la
	    impresora deber&aacute; colocarse en la columna izquierda 
	    m&aacute;xima.  Separe cada alias con una barra vertical e incluya
	    dos puntos despu&eacute;s del &uacute;ltimo alias.</para>

	  <para>En el siguiente ejemplo, comenzaremos con el esqueleto del
	    fichero <filename>/etc/printcap</filename>, que define dos
	    impresoras (una de matriz Diablo 630 y una impresora laser
	    PostScript Panasonic KX-P4455):</para>

	  <programlisting>#
#  Fichero /etc/printcap para el host rose
#
rattan|line|diablo|lp|Diablo 630 Line Printer:

bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:</programlisting>

	  <para>En este caso, la primer impresora se llama
	    <literal>rattan</literal> y tiene como aliases
	    <literal>line</literal>, <literal>diablo</literal>,
	    <literal>lp</literal>, y <literal>Diablo 630 Line
	    Printer</literal>.  Dado que tiene el alias
	    <literal>lp</literal>, tambi&eacute; se considera la impresora por 
	    default.  La segunda impresora se llama
	    <literal>bamboo</literal>, y cuenta con los aliases
	    <literal>ps</literal>, <literal>PS</literal>,
	    <literal>S</literal>, <literal>panasonic</literal>, y
	    <literal>Panasonic KX-P4455 PostScript v51.4</literal>.</para>
	</sect4>

	<sect4 id="printing-no-header-pages">
	  <title>Eliminando las P&aacute;ginas de Encabezados</title>
	  <indexterm>
      <primary>imprimir</primary>
      <secondary>p&aacute;ginas de encabezado</secondary>
    </indexterm>

	  <para>El sistema de cola de impresi&oacute;n 
	    <application>LPD</application>, por default, imprimir&aacute; una
	    <emphasis>p&aacute;gina de encabezado</emphasis> para cada trabajo.  Esta
	    p&aacute;gina contiene el nombre del usuario que solicit&oacute; la
	    impresi&oacute;n, el host del cual se envio el trabajo y el nombre
	    del trabajo, todo en letras grandes.  Desafortunadamente, todo esta 
	    impresi&oacute;n extra, interfiere con el trabajo de depuraci&oacute;n
	    de la configuraci&oacute;n b&aacute;sica de la impresora, por lo que 
	    vamos a deshabilitar esta opci&oacute;n.</para>

	  <para>Para eliminar las p&aacute;ginas de encabezado, a&ntilde;ada 
	    <literal>sh</literal>en la entrada de la impresora del fichero
	    <filename>/etc/printcap</filename>.  He aqui un ejemplo del fichero
	    <filename>/etc/printcap</filename> con <literal>sh</literal>
	    incluida en &eacute;l:</para>

	  <programlisting>#
#  FIchero /etc/printcap para el  host rose - sin paginas de encabezado
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
        :sh:

bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
        :sh:</programlisting>

	  <para>Note como hemos utilizado el formato correcto: donde la primer 
	    l&iacute;nea comienza en la primer columna de la izquierda y las
	    l&iacute;neas subsecuentes estan cuentan con sangr&iacute;a de un
	    solo tabulador (<keycap>TAB</keycap>).  Cada l&iacute;nea termina con
	    una diagonal invertida, excepto la &uacute;ltima.</para>
	</sect4>

	<sect4 id="printing-spooldir">
	  <title>Creando el Directorio de la Cola</title>
	  <indexterm><primary>cola de impresi&oacute;n</primary></indexterm>
	  <indexterm><primary>trabajos de impresi&oacute;n</primary></indexterm>

	  <para>El siguiente paso en la configuraci&oacute;n de la cola, es crear el
	    <emphasis>directorio de cola de impresi&oacute;n</emphasis>, un
	    directorio en el cual residen los trabajos de impresi&oacute;n hasta que
	    son llevados a cabo, y donde otros ficheros de soporte se
	    localizan.</para>

	  <para>Dada la naturaleza variante de los directorios de cola, es costumbre
	    que estos se localicen en <filename>/var/spool</filename>.  No es 
	    necesario respaldar el contenido de estos directorios, ya que rehacerlos
	    es tan simple como ejecutar &man.mkdir.1;.</para>

	  <para>Tambi&eacute;n es una buena costumbre crear el directorio con el
	    mismo nombre que tenga la impresora, como se muestra a 
	    continuaci&oacute;n:</para>

	  <screen>&prompt.root; <userinput>mkdir /var/spool/<replaceable>nombre-impresora</replaceable></userinput></screen>

	  <para>Aunque si cuenta con bastantes impresoras en su red, puede que
	    desee crear todos los directorios de cola, bajo un s&oacute;lo
	    directorio reservado para todas aquellas que imprimen usando
	    <application>LPD</application>.  En nuestro ejemplo haremos esto con
	    nuestras dos impresoras de ejemplo
	    <literal>rattan</literal> y
	    <literal>bamboo</literal>:</para>

	  <screen>&prompt.root; <userinput>mkdir /var/spool/lpd</userinput>
&prompt.root; <userinput>mkdir /var/spool/lpd/rattan</userinput>
&prompt.root; <userinput>mkdir /var/spool/lpd/bamboo</userinput></screen>

	  <note>
	    <para>Si a usted le preocupa la privacidad de los trabajos que
	      imprimen los usuarios, puede que desee proteger el directorio
	      de cola, de tal forma que no sea de acceso p&uacute;blico.  Los
	      directorios de cola deben pertenecer 
	      al usuario daemon y grupo daemon, y debe contar con permisos de 
	      lectura, escritura y navegaci&oacute;n por estos y nadie
	      m&aacute;s.  Haremos esto para nuestros ejemplos:</para>

	    <screen>&prompt.root; <userinput>chown daemon:daemon /var/spool/lpd/rattan</userinput>
&prompt.root; <userinput>chown daemon:daemon /var/spool/lpd/bamboo</userinput>
&prompt.root; <userinput>chmod 770 /var/spool/lpd/rattan</userinput>
&prompt.root; <userinput>chmod 770 /var/spool/lpd/bamboo</userinput></screen>
	  </note>

	  <para>Finalmente, debe indicar a <application>LPD</application> acerca
	    de estos directorios, en el fichero
	    <filename>/etc/printcap</filename>.  Esta indicaci&oacute;n se hace 
	    por medio de la caracter&iacute;stica <literal>sd</literal> :</para>

	  <programlisting>#
#  Fichero /etc/printcap para el host rose - incluyendo directorios de cola
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
        :sh:sd=/var/spool/lpd/rattan:

bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
        :sh:sd=/var/spool/lpd/bamboo:</programlisting>

	  <para>Notese que el nombre de la impresora inicia en la primer columna
	    mientras que el resto debe contar con sangr&iacute;a de un tabulador y
	    todas las l&iacute;neas, excepto la &uacute;ltima, terminar con una
	    diagonal invertida.</para>

	  <para>En el caso de que usted no especifique directorio alguno con 
	    <literal>sd</literal>, el sistema de cola usara como default
	    <filename>/var/spool/lpd</filename> .</para>
	</sect4>

	<sect4 id="printing-device">
	  <title>Identificando el Dispositivo de Impresi&oacute;n</title>

	  <para>En la secci&oacute;n <link 
	    linkend="printing-dev-ports">A&ntilde;adiendo Dispositivos de
	    Puertos en <filename>/dev</filename></link>, vimos que dispositivo bajo
	    el directorio <filename>/dev</filename> iba a utilizar FreeBSD para 
	    comunicarse con la impresora.  Ahora le indicaremos esto a 
	    <application>LPD</application>.  Cuando el sistema de cola tiene un 
	    trabajo por imprimir, abrir&aacute; el dispositivo especificado en
	    nombre del programa filtro (reponsable de pasar los datos a la
	    impresora).</para>

	  <para>Para efecto de indicar esto, en la entrada de la impresora en 
	    el fichero <filename>/etc/printcap</filename>, usaremos la
	    caracter&iacute;stica <literal>lp</literal>.</para>

	  <para>En el ejemplo que hemos visto, asumiremos que
	    <literal>rattan</literal> esta conectada al primer puerto paralelo, y
	    <literal>bamboo</literal> en el sexto puerto serial; he aqui lo que
	    tendriamos que a&ntilde;adir a <filename>/etc/printcap</filename>:</para>

	  <programlisting>#
#  Fichero /etc/printcap para el host rose - identificando los dispositivos a usar
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
        :sh:sd=/var/spool/lpd/rattan:\
        :lp=/dev/lpt0:

bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
        :sh:sd=/var/spool/lpd/bamboo:\
        :lp=/dev/ttyd5:</programlisting>

	  <para>Si usted no indica la caracter&iacute;stica <literal>lp</literal>
	    en el fichero <filename>/etc/printcap</filename>,
	    <application>LPD</application> usar&aacute; el dispositivo
	    <filename>/dev/lp</filename> por default.  El dispositivo
	    <filename>/dev/lp</filename> actualmente no existe en FreeBSD.</para>

	  <para>Si la impresora que esta instalando esta conectada a un puerto
	    en paralelo, puede saltar la siguiente parte y dirijirse a la 
	    secci&oacute;n <link linkend="printing-textfilter">Instalando un
	    Filtro de Texto</link>.  De otra manera, asegurese de seguir las
	    instrucciones de la siguiente secci&oacute;n.</para>
	</sect4>

	<sect4 id="printing-commparam">
	  <title>Configurando los Par&aacute;metros de Comunicaci&oacute;n
	    del la Cola de Impresi&oacute;n</title>
	  <indexterm>
      <primary>impresora</primary>
      <secondary>serial</secondary>
    </indexterm>

	  <para>Para impresoras conectadas a un puerto serial, 
	    <application>LPD</application> puede especificar la velocidad de
	    bps, la paridad, y otros par&aacute;metros de comunicaci&oacute;n
	    en lugar del programa filtro que manda los datos a la
	    impresora.  Esto es una ventaja dado lo siguiente:</para>

	  <itemizedlist>
	    <listitem>
	      <para>Le permite probar diferentes par&aacute;metros de 
	    comunicaci&oacute;n, con el simple hecho de modificar el fichero
	    <filename>/etc/printcap</filename>; con lo cual no es necesario
	    recompilar el programa filtro.</para>
	    </listitem>

	    <listitem>
	      <para>Habilita el sistema de cola de impresi&oacute;n para hacer
	    uso del mismo programa filtro, para varias impresoras que pueden
	    contar con diferentes configuraciones de comunicaci&oacute;n.</para>
	    </listitem>
	  </itemizedlist>

	  <para>Para efecto de controlar los par&aacute;metros de
	    comunicaci&oacute;n por medio de un puerto serial, con la
	    caracter&iacute;stica <literal>lp</literal>, en el fichero
	    <filename>/etc/printcap</filename>, utilizarmos lo
	    siguiente:</para>

	  <variablelist>
	    <varlistentry>
	      <term><literal>br#<replaceable>bps-velocidad</replaceable></literal></term>

	      <listitem>
		<para>Establece la velocidad de comunicaci&oacute;n del dispositivo, 
		  donde <replaceable>bps-velocidad</replaceable> puede ser 50, 75, 110,
		  134, 150, 200, 300, 600, 1200, 1800, 2400, 4800, 9600,
		  19200, o 38400 bits-por-segundo.</para>
	      </listitem>
	    </varlistentry>

	    <varlistentry>
	      <term><literal>fc#<replaceable>limpiar-bits</replaceable></literal></term>

	      <listitem>
		<para>Limpia la marca de bits, donde
		  <replaceable>limpiar-bits</replaceable> afecta en la estructura de
		  <replaceable>sgttyb</replaceable> una vez que se ha entablado la
		  comunicaci&oacute;n con el dispositivo.</para>
	      </listitem>
	    </varlistentry>

	    <varlistentry>
	      <term><literal>fs#<replaceable>establece-bits</replaceable></literal></term>

	      <listitem>
		<para>Establece la marca de bits
		  <replaceable>establece-bits</replaceable> en la estructura de
		  <replaceable>sgttyb</replaceable>.</para>
	      </listitem>
	    </varlistentry>

	    <varlistentry>
	      <term><literal>xc#<replaceable>limpia-bits</replaceable></literal></term>

	      <listitem>
		<para>Limpieza del modo bits, de forma local
		  <replaceable>limpia-bits</replaceable> una vez que se ha abierto
		  la comunicaci&oacute;n con el dispositivo.</para>
	      </listitem>
	    </varlistentry>

	    <varlistentry>
	      <term><literal>xs#<replaceable>establece-bits</replaceable></literal></term>

	      <listitem>
		<para>Establece el modo bits, de forma local
		  <replaceable>establece-bits</replaceable>.</para>
	      </listitem>
	    </varlistentry>
	  </variablelist>

	  <para>Para mayor informaci&oacute;n con respecto al uso de las
	    caractr&iacute;stica de bits:  
	    <literal>fc</literal>, <literal>fs</literal>,
	    <literal>xc</literal>, y <literal>xs</literal>,
	    vea el fichero 
	    <filename>/usr/include/sys/ioctl_compat.h</filename>.</para>

	  <para>Cuando <application>LPD</application> abre el canal de
	    comunicaci&oacute;n con el dispositivo especificado por
	    <literal>lp</literal>, lee la marca de bits en la estructura
	    <literal>sgttyb</literal>; limpia cualquier bit en la 
	    caracter&iacute;stica <literal>fc</literal> y establece bits
	    en la caracter&iacute;stica <literal>fs</literal>, para
	    posteriormente aplicar la configuraci&oacute;n resultante.  El
	    mismo procedimiento se sigue en el modo de bits local.</para>

	  <para>Ahora a&ntilde;adamos la impresora de ejemplo que esta
	    conectada al puerto serial numero seis.  La velocidad de bps la
	    estableceremos en 38400 bps.  Para las marcas de bits usaremos
	    <literal>TANDEM</literal>,
	    <literal>ANYP</literal>, <literal>LITOUT</literal>,
	    <literal>FLUSHO</literal>, y <literal>PASS8</literal>.
	    Para el modo local de bits, estableceremos 
	    <literal>LITOUT</literal> y <literal>PASS8</literal> :</para>

	  <programlisting>bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
        :sh:sd=/var/spool/lpd/bamboo:\
        :lp=/dev/ttyd5:fs#0x82000c1:xs#0x820:</programlisting>
	</sect4>

	<sect4 id="printing-textfilter">
	  <title>Instalando un Filtro de Texto</title>
	  <indexterm><primary>filtros de impresi&oacute;n</primary></indexterm>

	  <para>Ahora estamos listos para indicarle a <application>LPD</application>
	    que filtro de texto debe utilizar para enviar los trabajos a la
	    impresora.  Un <emphasis>filtro de texto</emphasis>, tambi&eacute;n
	    conocido como <emphasis>filtro de entrada</emphasis>, es un
	    programa que ejecuta <application>LPD</application> cuando tiene
	    un trabajo para imprimir.  Cuando <application>LPD</application>
	    ejecuta el filtro de texto para una impresora, configura de manera
	    estandar la entrada para el trabajo a imprimir, y la salida
	    estandar a la impresora indicada en la caracter&iacute;stica
	    <literal>lp</literal>.  El filtro espera leer el trabajo de la
	    entrada estandar, hacer el trabajo de traducci&oacute;n necesario 
	    para la impresora, y enviar los resultados a la salida estandar, lo
	    cual ser&aacute; impreso.  Para mayor informaci&oacute;n en los
	    filtros de texto, vea la secci&oacute;n <link
	    linkend="printing-advanced-filters">Como Trabajan los Filtros</link>.
	    </para>
	    
	  <para>En el caso de nuestro ejemplo, el filtro de texto puede ser un 
	    peque&ntilde;o script que s&oacute;lo ejecute
	    <command>/bin/cat</command> para enviar el trabajo a la
	    impresora.  FreeBSD cuenta con otro filtro llamado 
	    <filename>lpf</filename> que controla los caracteres de regreso y
	    subrayado en impresoras que pueden presentar problemas con
	    dichos caracteres.  Y desde luego, usted puede utilizar cualquier
	    filtro que desee.  El filtro <command>lpf</command> se describe a
	    detalle en la secci&oacute;n titulada <link
	    linkend="printing-advanced-lpf">lpf: un Filtro de Texto</link>.</para> 

	  <para>En primer lugar hagamos del script
	    <filename>/usr/local/libexec/if-simple</filename> un simple filtro
	    de texto.  Introduzca el siguiente texto en un fichero, con su
	    eitor de texto favorito:</para>

	  <programlisting>#!/bin/sh
#
# if-simple - Filtro de texto simple para lpd
# Instalado en la ruta /usr/local/libexec/if-simple
#
# Simplemente copia stdin a stdout.  Ignora todos los argumentos del filtro.

/bin/cat &amp;&amp; exit 0
exit 2</programlisting>

	  <para>Haga el fichero ejecutable:</para>

	  <screen>&prompt.root; <userinput>chmod 555 /usr/local/libexec/if-simple</userinput></screen>

	  <para>Ahora indiquele a LPD que lo use, al a&ntilde;adirlo con la
	    caracter&iacute;stica <literal>if</literal>, en el fichero
	    <filename>/etc/printcap</filename>.  Este filtro, lo vamos a
	    a&ntilde;adir en ambas impresoras de nuestro ejemplo, en el fichero
	    <filename>/etc/printcap</filename>:</para>

	  <programlisting>#
#  Fichero /etc/printcap para host rose - a&ntilde;adiendo el filtro de texto
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
        :sh:sd=/var/spool/lpd/rattan:\ 
        :lp=/dev/lpt0:\
        :if=/usr/local/libexec/if-simple:

bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
        :sh:sd=/var/spool/lpd/bamboo:\
        :lp=/dev/ttyd5:fs#0x82000e1:xs#0x820:\
        :if=/usr/local/libexec/if-simple:</programlisting>
	</sect4>

	<sect4>
	  <title>Encienda <application>LPD</application></title>

	  <para>&man.lpd.8; se puede correr desde <filename>/etc/rc</filename>,
	    controlado por la variable <literal>lpd_enable</literal>.  Esta
	    variable por default esta deshabilitada con <literal>NO</literal>.  
	    Si usted no cuenta con esta l&iacute;nea, a&ntilde;adala de la
	    siguiente forma:</para>

	  <programlisting>lpd_enable="YES"</programlisting>

	  <para>al fichero <filename>/etc/rc.conf</filename>, y posteriormente puede
	    reiniciar su sistema o ejecutar &man.lpd.8;.</para>

	  <screen>&prompt.root; <userinput>lpd</userinput></screen>
	</sect4>
	
	<sect4 id="printing-trying">
	  <title>Probando la Configuraci&oacute;n</title>

	  <para>Usted ha llegado al fin de una configuraci&oacute;n sencilla de
	    <application>LPD</application>.  Desafortunadamente, aun no es
	    momento de una felicitaci&oacute;n, dado que aun debemos probar
	    la configuraci&oacute;n y resolver cualquier problema que se
	    presente.  Para efecto de probar la configuraci&oacute;n, intente
	    imprimir algo.  Para imprimir con el sistema 
	    <application>LPD</application>, utilice el comando &man.lpr.1;, 
	    el cual envia el trabajo para su impresi&oacute;n.</para>

	  <para>Puede combinar &man.lpr.1; con el programa &man.lptest.1;,
	    el cual se ve en la secci&oacute;n <link
	    linkend="printing-testing">Verificando la Comunicaci&oacute;n
	    con la impresora</link>, para generar un texto de prueba.</para>

	  <para><emphasis>Simplemente para probar la configuraci&oacute;n de
	    <application>LPD</application>, intente:</emphasis></para>

	  <para>Teclee:</para>

	  <screen>&prompt.root; <userinput>lptest 20 5 | lpr -P<replaceable>nombre-impresora</replaceable></userinput></screen>
	  
	  <para>Donde <replaceable>nombre-impresora</replaceable> es uno de 
	    los nombres (o alias) que aparecen especificados en el fichero
	    <filename>/etc/printcap</filename> para las impresoras.  Para
	    probar con la impresora por default, teclee &man.lpr.1; sin la
	    opci&oacute;n <option>-P</option>.  Nuevamente, si esta probando
	    una impresora que espera recibir PostScript, envie un programa
	    PostScript en ese lenguaje, en lugar de usar &man.lptest.1;.  Puede
	    hacer esto poniendo el programa en un fichero y tecleando
	    <command>lpr <replaceable>fichero</replaceable></command>.</para>

	  <para>Para una impresora PostScript, usted debe visualizar el
	    resultado del programa.  Si esta usando &man.lptest.1;, 
	    entonces su resultado debe verse algo similar a lo siguiente:</para>

	  <programlisting>!"#$%&amp;'()*+,-./01234
"#$%&amp;'()*+,-./012345
#$%&amp;'()*+,-./0123456
$%&amp;'()*+,-./01234567
%&amp;'()*+,-./012345678</programlisting>

	  <para>Para m&aacute;s pruebas de la impresora, intente descargar
	    programas m&aacute;s largos (para impresoras basadas en un
	    lenguaje) o ejecutar &man.lptest.1; con diferentes opciones.  Por
	    ejemplo <command>lptest 80 60</command> producir&aacute; 60
	    l&iacute;neas de 80 caracteres cada una.</para>

	  <para>Si la impresora no funcion&oacute;, vea la secci&oacute;n <link
	    linkend="printing-troubleshooting">Resoluci&oacute;n de
	    Problemas</link>.</para>
	</sect4>
      </sect3>
    </sect2>
  </sect1>
  
  <sect1 id="printing-advanced">
    <title>Configuraci&oacute;n Avanzada de una Impresora</title>
    
    <para>Esta secci&oacute;n describe el uso de filtros para formatos
      especiales, encabezados de p&aacute;gina, impresi&oacute;n en red, y
      restricci&oacute;n de uso de la impresora por cuenta.</para>

    <sect2 id="printing-advanced-filter-intro">
      <title>Filtros</title>
      <indexterm><primary>filtros de impresi&oacute;n</primary></indexterm>
      
      <para>Aun cuando <application>LPD</application> maneja con protocolos
        de red, controles de acceso, requisiciones y otros aspectos de la
        impresi&oacute;n, la mayor parte del trabajo <emphasis>real</emphasis>
        se lleva a cabo por los filtros.  Los Filtros son programas que se
        comunican con la impresora y controlan las dependendcias de su 
        dispositivo y requerimientos especiales.  En el ejemplo de la impresora
        simple, instalamos un muy sencillo filtro de texto plano&mdash;un ejemplo
        extremadamente sencillo que debiese trabajar con la mayor&iacute;a de
        las impresoras (en la secci&oacute;n <link 
        linkend="printing-textfilter">Instalando un Filtro de Texto</link>).
        </para>
          
      <para>De cualquier manera, para tomar ventaja de la conversi&oacute;n de 
        formatos, cuentas de impresi&oacute;n, trucos espec&iacute;ficos de las
        impresoras y dem&aacute;s, es importante saber como trabajan los filtros.
        En virtud de que todos estos aspectos son la responsabilidad de estos
        filtros.  Y la mala noticia es, que la mayor parte del tiempo 
        <emphasis>usted</emphasis> debe proveerse de estos filtros.  La buena
        noticia es normalmente estos ya existen disponibles; y cuando no,
        son sencillos de escribir.</para>
          
      <para>FreeBSD tambi&eacute; cuenta con un 
        <filename>/usr/libexec/lpr/lpf</filename>, que trabaja con muchas
        impresoras que pueden imprimir texto plano.  (Maneja caracteres de
        regreso y tabulador en el fichero, as&iacute; como conteo, pero se
        puede decir que eso es todo).  Existen tambi&eacute;n una gran
        cantidad de filtros y componentes de estos, disponibles en la 
        Colecci&oacute;n de Ports de FreeBSD.</para>
          
      <para>He aqui lo que encontrar&aacute; en esta secci&oacute;n:</para>
      
      <itemizedlist>
        <listitem>
          <para>La secci&oacute;n <link 
            linkend="printing-advanced-filters">Como Trabajan los Filtros</link>
            intenta dar un repaso general al papel que juegan los filtros en el
            proceso de impresi&oacute;n.  Es importante que lea esta 
            secci&oacute;n para ver que sucede <quote>tras bambalinas</quote>
            cuando <application>LPD</application> usa filtros.  Este conocimiento
            puede ayudarle a anticiparse y resolver problemas que puede
            encontrar cuando instala m&aacute;s y m&aacute;s filtros en cada
            impresora.</para>
        </listitem>
              
        <listitem>
          <para>Normalmente <application>LPD</application> espera poder imprimir
            texto plano en todas las impresoras.  Esto puede representar un 
            problema para las impresoras PostScript (o que manejen otro lenguaje
            de impresi&oacute;n), las cuales no pueden imprimir texto plano
            directamente.  La secci&oacute;n <link
            linkend="printing-advanced-if-conversion">Acomodando Trabajos de 
            Texto Plano en Impresoras PostScript</link> le indica que debe de
            hacer si se le presenta este problema.  Es importante que lea esta
            secci&oacute;n si usted cuenta con una impresora PostScript.</para>
        </listitem>

        <listitem>
          <para>PostScript es un formato de salida muy popular.  Incluso algunas
            personas (yo, incluido) escriben c&oacute;digo PostScript 
            directamente.  Pero las impresoras PostScript son caras.  La 
            secci&oacute;n <link
            linkend="printing-advanced-ps">Simulando PostScript en Impresoras
            No-PostScript</link> le indica como puede hacer, para que una 
            impresora no-PostScript, acepte e imprima datos PostScript.  
            Es recomendable que lea esta secci&oacute;n si cuenta con una
            impresora <emphasis>no-PostScript</emphasis>.</para>
        </listitem>
              
        <listitem>
          <para>La secci&oacute;n <link
            linkend="printing-advanced-convfilters">Filtros de 
            Conversi&oacute;n</link>, le indica la forma en que puede
            automatizar la conversi&oacute;n de ciertos formatos
            espec&iacute;ficos de ficheros, tal como gr&aacute;ficos o
            datos de un determinado tipo, a un formato que la impresora
            puede entender.  Despu&eacute;s de leer esta secci&oacute;n usted
            podr&aacute; configurar su impresora de tal forma que los
            usuarios puedan teclear <command>lpr -t</command> para imprimir
            datos troff o <command>lpr -d</command> para imprimir datos de tipo
            TeX DVI, o bien <command>lpr -v</command> para imprimir datos de
            imagen y as&iacute; sucesivamente.  Recomiendo la lectura de esta
            secci&oacute;n.</para>
        </listitem>
              
        <listitem>
          <para>La secci&oacute;n <link linkend="printing-advanced-of">
            Filtros de Salida</link> explica todo acerca de las utilidades
            que no son muy usadas de <application>LPD</application>: filtros
            de salida.  A menos que usted haya habilitado la impresi&oacute;n de
            p&aacute;ginas de encabezado (vea <link
            linkend="printing-advanced-header-pages">P&aacute;ginas de
            Encabezado</link>), puede saltar toda esta secci&oacute;n.</para>
        </listitem>

        <listitem>
          <para>La secci&oacute;n <link linkend="printing-advanced-lpf">lpf: 
            Un Filtro de Texto</link> detalla el uso de <command>lpf</command>,
            un sencillo filtro de texto, para impresoras de matriz de puntos (e
            impresoras laser que actuan como estas) que viene con FreeBSD.  Si
            usted necesita una forma r&aacute;pida de tener un contador de
            trabajos de impresi&oacute;n para texto plano, o bien si tiene una
            impresora que al ver caracteres de regreso (backspace) comienza a
            echar humo, definitivamente debe considerar <command>lpf</command>
            como su alternativa.</para>
        </listitem>
      </itemizedlist>
      
      <sect3 id="printing-advanced-filters">
        <title>Como Trabajan los Filtros</title>

        <para>Como se menciono anteriormente, un filtro es un programa ejecutable
          que se inicia por <application>LPD</application>, para manejar el
          dispositivo dependiente, responsable de la comunicaci&oacute;n con la
          impresora.</para>
            
        <para>Cuando <application>LPD</application> desea imprimir un trabajo, 
          inicia un programa filtro.  Establece como entrada estandar del filtro
          al fichero, y a la impresora como salida estandar, y como error
          estandard al fichero log (indicado con la cracter&iacute;stica
          <literal>lf</literal>, en el fichero <filename>/etc/printcap</filename>
          o por default como <filename>/dev/console</filename>).</para>
            
        <indexterm>
          <primary><command>troff</command></primary>
        </indexterm>
        <para>Cual filtro debe ser iniciado por <application>LPD</application> y
          con que argumentos, depende en lo especificado en el fichero
          <filename>/etc/printcap</filename> y los argumentos que hayan sido
          utilizados por el usuario al momento de usar en la l&iacute;nea de
          comandos: &man.lpr.1;.  Por ejemplo, si el usuario teclea
          <command>lpr -t</command>, <application>LPD</application> 
          iniciar&aacute; el filtro para ficheros troff, listado en las
          caracter&iacute;sticas <literal>tf</literal> para la impresora
          destino.  Si el usuario desea imprimir texto plano iniciar&aacute;
          el filtro <literal>if</literal> (esto casi es as&iacute;, para mayor
          informaci&oacute;n, vea la secci&oacute;n <link
          linkend="printing-advanced-of">Filtros de Salida</link>).</para>

        <para>Existen tres tipos de filtros que puede declarar en el fichero
          <filename>/etc/printcap</filename>:</para>

        <itemizedlist>
          <listitem>
            <para>El <emphasis>filtro de texto</emphasis>, erroneamente llamado
              <emphasis>filtro de entrada</emphasis> en la documentaci&oacute;n
              de <application>LPD</application>, este se encarga de manejar la
              impresi&oacute;n de texto simple.  Piense en este como en el
              filtro por default.  <application>LPD</application> espera que
              todas las impresoras puedan imprimir texto plano y es el 
              filtro de texto, el que se encarga de manejar los caracteres de
              retroceso y tabulador, de tal forma que la impresora no se
              confunda.  Si en su sistema se debe llevar un conteo de 
              impresiones, el filtro de texto tambi&eacute;n debe llevar un
              conteo de p&aacute;ginas impresas, normalmente al llevar la
              cuenta de las l&iacute;neas impresas y comparandolas con el
              numero de l&iacute;neas soportadas por p&aacute;gina.  El filtro
              de texto se comienza con los siguientes argumentos:

              <cmdsynopsis>
                <command>nombre-del-filtro</command>
                <arg>-c</arg>
                <arg choice="plain">-w<replaceable>anchura</replaceable></arg>
                <arg choice="plain">-l<replaceable>longitud</replaceable></arg>
                <arg choice="plain">-i<replaceable>sangrado</replaceable></arg>
                <arg choice="plain">-n <replaceable>login</replaceable></arg>
                <arg choice="plain">-h <replaceable>host</replaceable></arg>
                <arg choice="plain"><replaceable>fichero-act</replaceable></arg>
              </cmdsynopsis>

              donde
              
              <variablelist>
                <varlistentry>
                  <term><option>-c</option></term>

                  <listitem>
                    <para>aparece si el trabajo se envio utilizando <command>lpr
                        -l</command></para>
                  </listitem>
                </varlistentry>
                
                <varlistentry>
                  <term><replaceable>anchura</replaceable></term>
                  
                  <listitem>
                    <para>es el valor de la caracter&iacute;stica 
                      <literal>pw</literal> (ancho de p&aacute;gina), indicado en
                      <filename>/etc/printcap</filename>, por default se usa
                      un valor de 132</para>
                  </listitem>
                </varlistentry>
                
                <varlistentry>
                  <term><replaceable>longitud</replaceable></term>
                  
                  <listitem>
                    <para>es el valor de la caracter&iacute;stica 
                      <literal>pl</literal> (longitud de p&aacute;gina), por 
                      default su valor es 66</para>
                  </listitem>
                </varlistentry>
                
                <varlistentry>
                  <term><replaceable>sangrado</replaceable></term>
                  
                  <listitem>
                    <para>se refiere a los espacios que se considerar&aacute;n para
                      <command>lpr -i</command>, por default es 0.</para>
                  </listitem>
                </varlistentry>
                
                <varlistentry>
                  <term><replaceable>login</replaceable></term>
                  
                  <listitem>
                    <para>es el nombre de la cuenta del usuario que imprime
                      el trabajo</para>
                  </listitem>
                </varlistentry>
                
                <varlistentry>
                  <term><replaceable>host</replaceable></term>
                  
                  <listitem>
                    <para>es el nombre del host, del cual se ha enviado el trabajo
                      de impresi&oacute;n</para>
                  </listitem>
                </varlistentry>
                
                <varlistentry>
                  <term><replaceable>fichero-act</replaceable></term>
                  
                  <listitem>
                    <para>es el nombre del fichero contador, de 
                      la caracter&iacute;stica <literal>af</literal>.</para>
                  </listitem>
                </varlistentry>
              </variablelist>
            </para>
          </listitem>

	  <indexterm>
      <primary>impresora</primary>
      <secondary>filtros</secondary>
    </indexterm>          
          <listitem>
            <para>Un <emphasis>filtro de conversi&oacute;n</emphasis> convierte
              un formato espec&iacute;fico, a uno que la impresora puede
              plasmar en un papel.  Por ejemplo, datos de tipo ditroff no pueden
              imprimirse directamente, pero puede instalar un filtro de
              conversi&oacute;n para ficheros ditroff, de tal forma que los
              datos ditroff se conviertan a un formato que entiende la 
              impresora.  La secci&oacute;n <link
              linkend="printing-advanced-convfilters">Filtros de 
              Conversi&oacute;n</link> explica todo lo que usted necesita saber
              sobre ellos.  Los filtros de conversi&oacute;n tambi&eacute;n
              requieren de llevar un conteo, si usted requiere de este
              control.  Los filtros de conversi&oacute;n se inicializan con
              estos argumentos:

              <cmdsynopsis>
                <command>nombre-del-filtro</command>
                <arg
                  choice="plain">-x<replaceable>ancho-pixel</replaceable></arg>
                <arg choice="plain">-y<replaceable>alto-pixel</replaceable></arg>
                <arg choice="plain">-n <replaceable>login</replaceable></arg>
                <arg choice="plain">-h <replaceable>host</replaceable></arg>
                <arg choice="plain"><replaceable>fichero-act</replaceable></arg>
              </cmdsynopsis>

              donde <replaceable>ancho-pixel</replaceable> es el valor de la
              caracter&iacute;stica <literal>px</literal> (default 0) y
              <replaceable>alto-pixel</replaceable> es el valor de la 
              caracter&iacute;stica <literal>py</literal> (default 0).</para>
          </listitem>
          
          <listitem>
            <para>El <emphasis>filtro de salida</emphasis> es usado solamente si 
              no existe un filtro de texto, o bien si las p&aacute;ginas de
              encabezado est&aacute;n habilitadas.  En mi experiencia, los
              filtros de salida raramente se utilizan.  La secci&oacute;n <link
                linkend="printing-advanced-of">Filtros de Salida</link> describe
              el uso de estos.  S&oacute;lo existen dos argumentos:

              <cmdsynopsis>
                <command>nombre-filtro</command>
                <arg choice="plain">-w<replaceable>ancho</replaceable></arg>
                <arg choice="plain">-l<replaceable>largo</replaceable></arg>
              </cmdsynopsis>

              los cuales son id&eacute;nticos a los argumentos 
              <option>-w</option> y <option>-l</option> de los filtros de 
              texto.</para>
          </listitem>
        </itemizedlist>

        <para>La <emphasis>salida</emphasis> de los filtros debe ser con
          el siguiente resultado:</para>
            
        <variablelist>
          <varlistentry>
            <term>exit 0</term>

            <listitem>
              <para>Esto es si el resultado de la impresi&oacute;n es 
                satisfactorio.</para>
            </listitem>
          </varlistentry>
          
          <varlistentry>
            <term>exit 1</term>
            
            <listitem>
              <para>Si el filtro fall&oacute; en la impresi&oacute;n, pero
                desea que <application>LPD</application> intente de nuevo
                el trabajo de impresi&oacute;n. <application>LPD</application>
                reiniciar&aacute; el filtro si sale con esta clave.</para>
            </listitem>
          </varlistentry>
          
          <varlistentry>
            <term>exit 2</term>
            
            <listitem>
              <para>Si el filtro falla imprimiendo el fichero y no desea que
                <application>LPD</application> lo intente de nuevo.  
		<application>LPD</application> desechar&aacute; el fichero.</para>
            </listitem>
          </varlistentry>
        </variablelist>

        <para>El filtro de texto 
          <filename>/usr/libexec/lpr/lpf</filename> que viene con FreeBSD,
          toma ventaja de los argumentos de ancho y largo, para determinar
          cuando alimentar la impresora y como llevar el conteo de uso de la
          impresora.  Utiliza el host y login, as&iacute; como el fichero de
          conteo, para llevar el control de este registro.</para>

        <para>Si usted esta buscando adquirir filtros, verifique que ellos son
          compatibles con LPD.  Si lo son, deberan soportar los argumentos
          descritos anteriormente.  Si usted planea escribir filtros para
          uso general, entonces creelos pensando en soportar estos
          argumentos y c&oacute;digos de salida.</para>
      </sect3>
      
      <sect3 id="printing-advanced-if-conversion">
        <title>Acomodando Trabajos de Texto Plano en Impresoras PostScript</title>
        <indexterm><primary>trabajos de impresi&oacute;n</primary></indexterm>

        <para>Si usted es el &uacute;nico usuario de su computadora e impresora
          PostScript (u otro lenguaje de impresoras), y promete nunca enviar
          texto plano a su impresora o bien hacer uso de algunos programas que 
          probablemente envien texto plano a su impresora, entonces usted no
          debe preocuparse por leer esta secci&oacute;n.</para>
            
        <para>Pero, si usted desea enviar tanto texto plano, como PostScript a
          su impresora, entonces es altamente recomendable que prepare la
          configuraci&oacute;n de su impresora.  Para efecto de hacer esto, 
          contamos con el filtro de texto, para detectar si los trabajos que
          se han mandado son de texto plano o PostScript.  Todos los trabajos de
          tipo PostScript, deben comenzar con <literal>%!</literal> (para otros
          lenguajes de impresi&oacute;n, vea la documentaci&oacute;n de su
          impresora).  Si esos son los dos primeros caracteres de su trabajo, 
          entonces se considera PostScript y puede pasar el resto del trabajo de
          forma directa.  Si esos no son los primeros dos caracteres, entonces el
          filtro har&aacute; la conversi&oacute;n del texto a PostScript e
          imprimir&aacute; el resultado.</para>
            
        <para>&iquest;C&oacute;mo se hace esto?</para>

        <indexterm>
          <primary>impresora</primary>
          <secondary>serial</secondary>
        </indexterm>
        <para>Si usted cuenta con una impresora serial, una buena forma de hacer
          esto es instalando <command>lprps</command>.  <command>lprps</command>
          es un filtro de impresi&oacute;n PostScript que lleva a cabo una
          comunicaci&oacute;n de dos v&iacute;as con la impresora.  Actualiza
          el fichero de estatus de la impresora, por medio de informaci&oacute;n
          actualizada, de tal forma que los usuarios y administradores pueden
          ver exactamente el estado que guarda la impresora (tal como
          <errorname>toner bajo</errorname> o 
          <errorname>papel atorado</errorname>).  Pero m&aacute;s importante
          es el programa que incluye llamado <command>psif</command>, el cual
          detecta si el trabajo que se ha enviado es texto plano, con lo cual
          llama a <command>textps</command> (otro programa que viene con 
          <command>lprps</command>), para convertir el texto plano a 
          PostScript.  Posteriormente utiliza  <command>lprps</command> para
          enviar el trabajo a la impresora.</para>
            
        <para>El programa <command>lprps</command> es parte de la 
          Colecci&oacute;n de Ports de FreeBSD (vea la secci&oacute;n <link
          linkend="ports">La Colecci&oacute;n de Ports</link>).  Claro esta, que
          usted puede descargar, compilar e instalarlo.  Una vez que instale
          <command>lprps</command>, simplemente especifique la ruta al programa 
          <command>psif</command> que a su vez es parte de 
          <command>lprps</command>.  Si ha instalado <command>lprps</command>
          de la <link linkend="ports">Colecci&oacute;n de Ports</link>, 
          a&ntilde;ada lo siguiente, en la parte correspondiente a su 
          impresora Serial-PostScript, en el fichero
          <filename>/etc/printcap</filename>:</para>
              
        <programlisting>:if=/usr/local/libexec/psif:</programlisting>

        <para>Tambi&eacute;n deber&aacute; especificar la caracter&iacute;stica
          <literal>rw</literal>; que le indica a <application>LPD</application>
          abrir la impresora en modo de lectura-escritura.</para>
            
        <para>Si usted cuenta con una impresora PostScript, conectada a un puerto
          paralelo (y por lo tanto no cuenta con la comunicaci&oacute;n de dos
          v&iacute;as con la impresora, que <command>lprps</command> requiere), 
          puede utilizar el siguiente script de shell como filtro de texto:
          </para>

        <programlisting>#!/bin/sh
#
#  psif - Imprime PostScript o texto plano en impresoras PostScript
#  Script version; NO la version que viene con lprps
#  Instalado en /usr/local/libexec/psif
#

read first_line
first_two_chars=`expr "$first_line" : '\(..\)'`

if [ "$first_two_chars" = "%!" ]; then
    #
    #  Trabajo PostScript, imprimirlo.
    #
    echo "$first_line" &amp;&amp; cat &amp;&amp; printf "\004" &amp;&amp; exit 0
    exit 2
else
    #
    #  Texto Plano, convertirlo e imprimirlo.
    #
    ( echo "$first_line"; cat ) | /usr/local/bin/textps &amp;&amp; printf "\004" &amp;&amp; exit 0
    exit 2
fi</programlisting>
            
        <para>En este script, <command>textps</command> es un programa que hemos
          instalado por separado, para convertir texto plano a PostScript.  Usted
          puede utilizar cualquier cualquier programa de conversi&oacute;n de
          texto plano a PostScript que desee.  La <link
          linkend="ports">Colecci&oacute;n de Ports</link> de FreeBSD incluye un
          programa muy completo llamado <literal>a2ps</literal> que quiz&aacute;s
          desee investigar.</para>
      </sect3>
          
      <sect3 id="printing-advanced-ps">
        <title>Simulando PostScript en Impresoras No-PostScript</title>
        <indexterm>
          <primary>PostScript</primary>
          <secondary>emulaci&oacute;n</secondary>
        </indexterm>
        <indexterm>
          <primary>Ghostscript</primary></indexterm>
        <para>PostScript es el estandar <emphasis>por excelencia</emphasis> en
          impresiones de alta calidad.  Aunque en realidad PostScript resulta
          ser un estandar algo <emphasis>caro</emphasis>.  Afortunadamente la
          Empresa Alladin, cuenta con un emulador PostScript, llamado
          <application>Ghostscript</application> que corre bajo FreeBSD.  
          Ghostscript puede leer la mayor&iacute;a de los ficheros PostScript
          y volcarlos en una gran variedad de dispositivos, incluyendose gran
          variedad de impresoras no-PostScript.  Al instalar Ghostscript y usando
          un filtro de texto especial para su impresora, puede hacer que su
          impresora no-PostScript actue como una impresora PostScript real.
          </para>
            
        <para>Ghostscript se encuentra en la Colecci&oacute;n de Ports de FreeBSD
          por lo que puede realizar la instalaci&oacute;n desde este medio.  
          Tambi&eacute;n puede descargarlo, compilarlo e instalarlo de una
          manera f&aacute;cil.</para>
            
        <para>Para efecto de simular PostScript, contamos con el filtro de texto
          que detecta si se esta imprimiendo un fichero PostScript.  Si no es
          as&iacute;, el filtro pasar&aacute; el trabajo directamente a la
          impresora, de otra forma utilizar&aacute; Ghostscript para convertir
          primero el fichero a un formato que la impresora entienda.</para>
            
        <para>Aqui tenemos un ejemplo: el siguiente script es un filtro de
          texto para impresoras Hewlett Packard DeskJet 500.  Para otras
          impresoras, substituya el argumento <option>-sDEVICE</option> del
          comando <command>gs</command> (Ghostscript).  Teclee <command>gs 
          -h</command> para obtener una lista de todos los dispositivos
          soportados por Ghostscript en su sistema).</para>

        <programlisting>#!/bin/sh
#
#  ifhp - Impresion simulada-Ghostscript PostScript en una DeskJet 500
#  Instalada en /usr/local/libexec/hpif

#
#  Trate a LF como CR+LF:
#
printf "\033&amp;k2G" || exit 2

#
#  Read first two characters of the file
#
read first_line
first_two_chars=`expr "$first_line" : '\(..\)'`

if [ "$first_two_chars" = "%!" ]; then
    #
    #  Se trata de PostScript; use Ghostscript para convertir e imprimir.
    #
    #  Note que los ficheros PostScript son , de hecho, programas interpretados,
    #  y esos programas se permiten escribir en la salida estandar, lo que puede
    #  confundir la salida impresa.  De tal forma que redireccionaremos la salida
    #  estandar a error estandar, y crearemos una clave de salida 3, para la 
    #  salida estandar, y haremos que Ghostscript escriba su salida a esta.
    #  Un ejercicio para el lector astuto:  capture la salida del error estandar
    #  de Ghostscript y envielo por correo de regreso al usuario original, que
    #  genero el trabajo de impresion.
    #
    exec 3&gt;&amp;1 1&gt;&amp;2
    /usr/local/bin/gs -dSAFER -dNOPAUSE -q -sDEVICE=djet500 \
        -sOutputFile=/dev/fd/3 - &amp;&amp; exit 0

    #
    /usr/local/bin/gs -dSAFER -dNOPAUSE -q -sDEVICE=djet500 -sOutputFile=- - \
        &amp;&amp; exit 0
else
    #
    #  Texto plano o PCL de HP, asi que solo vamos a imprimirlo directamente;
    #  permita la alimentacion de forma al final, para expulsar la ultima
    #  pagina.
    #
    echo $first_line &amp;&amp; cat &amp;&amp; printf "\033&amp;l0H" &amp;&amp; 
exit 0
fi

exit 2</programlisting>

        <para>Finalmente, necesita notificar a <application>LPD</application>
          de la caracter&iacute;stica <literal>if</literal>, que corresponde
          al filtro a utilizar:</para>
            
        <programlisting>:if=/usr/local/libexec/ifhp:</programlisting>

        <para>Y eso es todo.  Puede teclear <command>lpr texto.plano</command> y
          <filename>lpr cualquier.ps</filename> y ambos deben imprimirse
          exitosamente.</para>
      </sect3>
      
      <sect3 id="printing-advanced-convfilters">
        <title>Filtros de Conversi&oacute;n</title>

        <para>Una vez que se ha completado la configuraci&oacute;n descrita en
          la secci&oacute;n <link
          linkend="printing-simple">Configuraci&oacute;n Simple de
          una Impresora</link>, probablemente lo primero que deba hacer es
          instalar filtros de conversi&oacute;n para su formato de fichero
          favorito (aparte de text plano ASCII).</para>
            
        <sect4>
          <title>&iquest;Por qu&eacute; Instalar Filtros de 
            Conversi&oacute;n?</title>
          <indexterm>
            <primary>TeX</primary>
            <secondary>impresi&oacute;n de ficheros dvi</secondary>
          </indexterm>
          
          <para>Los filtros de conversi&oacute;n sirven para instalar de una 
            manera sencilla varios tipos de formatos especiales.  Como ejemplo,
            suponga que requiere imprimir un buen numero de ficheros 
            desarrollados con el sistema de escritura TeX, y contamos con una
            impresora PostScript.  Cada vez que generemos un fichero DVI desde
            TeX, no podremos imprimirlo directamente hasta que hagamos una
            conversi&oacute;n de este a PostScript.  La secuencia de comandos
            a seguir es algo as&iacute;:</para>
                
          <screen>&prompt.user; <userinput>dvips fichero-prueba.dvi</userinput>
&prompt.user; <userinput>lpr fichero-prueba.ps</userinput></screen>
                
          <para>Al instalar un filtro de conversi&oacute;n, podemos omitir
            llevar a cabo la conversi&oacute;n manual, y permitir que
            <application>LPD</application> se haga cargo por nosotros. Ahora,
            cada vez que generemos un fichero DVI, s&oacute;lo estaremos a
            un paso de su impresi&oacute;n:</para>
              
          <screen>&prompt.user; <userinput>lpr -d fichero-prueba.dvi</userinput></screen>
                
          <para>Con esto le hemos indicado a <application>LPD</application> que 
            haga la conversi&oacute;n del fichero DVI.  Esto se lleva a cabo
            por medio de la opci&oacute;n <option>-d</option>. La secci&oacute;n
            <link linkend="printing-lpr-options-format">Opciones de Formato y
            Conversi&oacute;n</link> enumera las opciones de conversi&oacute;n.
            </para>
              
          <para>Por cada una de las opciones que desea que una impresora
            reconozca, instale un <emphasis>filtro de 
            conversi&oacute;n</emphasis> y se&ntilde;ale su ruta en el fichero
            <filename>/etc/printcap</filename>.  Un filtro de conversi&oacute;n
            es como el filtro de texto usado en la configuraci&oacute;n de una
            impresora simple (vea la secci&oacute;n <link 
            linkend="printing-textfilter">Instalando un Filtro de Texto</link>
            para una referencia) excepto de que en lugar de imprimir texto 
            plano, el filtro convierte el fichero a un formato que la impresora
            puede entender.</para>
        </sect4>

        <sect4>
          <title>&iquest;Qu&eacute; Filtros de Conversi&oacute;n Debo 
            Instalar?</title>
          
          <para>Usted debe instalar los filtros de conversi&oacute;n que vaya a
            necesitar.  Si imprime gran cantidad de documentos DVI, es
            recomendable que instal un filtro de conversi&oacute;n para DVI.  
            Si cuenta con bastantes ficheros troff por imprimir, entonces
            un filtro troff ser&iacute;a una buena idea.</para>
              
          <para>En la siguiente tabla encontrar&aacute; un res&uacute;men de
            los filtros con que trabaja <application>LPD</application>, un
            ejemplo de su entrada en <filename>/etc/printcap</filename> y
            como hacer uso de estos con el comando <command>lpr</command> :
            </para>

          <informaltable frame="none">
            <tgroup cols="3">
              <thead>
                <row>
                  <entry>Tipo de Fichero</entry>
                  <entry>Caracter&iacute;stica <filename>/etc/printcap</filename></entry>
                  <entry>Opci&oacute;n <command>lpr</command></entry>
                </row>
              </thead>
              
              <tbody>
                <row>
                  <entry>cifplot</entry>
                  <entry><literal>cf</literal></entry>
                  <entry><option>-c</option></entry>
                </row>
                
                <row>
                  <entry>DVI</entry>
                  <entry><literal>df</literal></entry>
                  <entry><option>-d</option></entry>
                </row>
                
                <row>
                  <entry>plot</entry>
                  <entry><literal>gf</literal></entry>
                  <entry><option>-g</option></entry>
                </row>
                
                <row>
                  <entry>ditroff</entry>
                  <entry><literal>nf</literal></entry>
                  <entry><option>-n</option></entry>
                </row>
                
                <row>
                  <entry>FORTRAN texto</entry>
                  <entry><literal>rf</literal></entry>
                  <entry><option>-f</option></entry>
                </row>
                
                <row>
                  <entry>troff</entry>
                  <entry><literal>rf</literal></entry>
                  <entry><option>-f</option></entry>
                </row>
                
                <row>
                  <entry>raster</entry>
                  <entry><literal>vf</literal></entry>
                  <entry><option>-v</option></entry>
                </row>
                
                <row>
                  <entry>texto plano</entry>
                  <entry><literal>if</literal></entry>
                  <entry>ninguna, <option>-p</option>, o
                    <option>-l</option></entry>
                </row>
              </tbody>
            </tgroup>
          </informaltable>
          
          <para>En nuestro ejemplo, el uso de <command>lpr -d</command> indica
            que la impresora requiere de la caracter&iacute;stica 
            <literal>df</literal>, en su entrada del fichero
            <filename>/etc/printcap</filename>.</para>
              
          <indexterm><primary>fortran</primary></indexterm>
          <para>A pesar de lo que otros puedan opinar, formatos como texto
            de FORTRAN o plot, son probablemnte obsoletos.  A su  gusto, usted
            puede encontrar nuevos usos de estos formatos, as&iacute; como a
            cualquier otro con el simple hecho de instalar los filtros
            adecuados.  Por ejemplo, supongamos que desea imprimir ficheros de
            tipo Printerleaf (que son ficheros generados por el programa de
            promoci&oacute;n de  escritorio Interleaf) de forma directa, pero
            que nunca imprime ficheros plot.  Podr&iacute;a instalar un filtro
            de conversi&oacute;n de Printerleaf bajo la caracter&iacute;stica
            <literal>gf</literal> y posteriormente educar a sus usuarios a
            que utilicen el comando <command>lpr -g</command> para llevar a
            cabo <quote>impresiones de ficheros Printleaf</quote>.</para>
        </sect4>

        <sect4>
          <title>Instalando Filtros de Conversi&oacute;n</title>
          
          <para>Considerando que los filtros de conversi&oacute;n son programas
            que usted instala independientemente de la instalaci&oacute;n base
            de FreeBSD, probablemente el mejor lugar para colocarlos
            ser&iacute;a bajo el directorio <filename>/usr/local</filename>.  
            El directorio <filename>/usr/local/libexec</filename> es un
            lugar com&uacute;n, en virtud de que estos son programas especiales
            que s&oacute;lo ser&aacute;n ejecutados por 
            <application>LPD</application>; los usuarios comunes no 
            necesitar&aacute;n ejecutarlos nunca.</para>
              
          <para>Para habilitar un filtro de conversi&oacute;n, deber&aacute;
            especificar su ruta bajo la caracter&iacute;stica adecuada, en la
            entrada de la impresora correspondiente en el fichero
            <filename>/etc/printcap</filename>.</para>
              
          <para>En nuestro ejemplo, a&ntilde;adiremos el filtro de 
            conversi&oacute;n DVI, para la impresora llamada 
            <literal>bamboo</literal>.  He aqui un ejemplo del fichero
            <filename>/etc/printcap</filename> que hemos estado utilizando,
            con la nueva caracter&iacute;stica <literal>df</literal>, para
            la impresora <literal>bamboo</literal>.</para>

          <programlisting>#
#  Fichero /etc/printcap para host rose - a&ntilde;adiendo df a bamboo
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
        :sh:sd=/var/spool/lpd/rattan:\
        :lp=/dev/lpt0:\
        :if=/usr/local/libexec/if-simple:

bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
        :sh:sd=/var/spool/lpd/bamboo:\
        :lp=/dev/ttyd5:fs#0x82000e1:xs#0x820:rw:\
        :if=/usr/local/libexec/psif:\
        :df=/usr/local/libexec/psdf:</programlisting>

          <para>El filtro DVI es un script de shell llamado
            <filename>/usr/local/libexec/psdf</filename>.  Aqui presentamos el
            script:</para>

          <programlisting>#!/bin/sh
#
#  psdf - Filtro de impresion DVI a PostScript
#  Instalado en /usr/local/libexec/psdf
#
#  Llamado por lpd cuando el usuario ejecuta lpr -d
#
exec /usr/local/bin/dvips -f | /usr/local/libexec/lprps "$@"</programlisting>

          <para>Este script ejecuta <command>dvips</command> en modo de filtro
            (la opci&oacute;n <option>-f</option>) con la entrada estandar, que
            es el trabajo a imprimir.  Posteriormente inicia el filtro de
            impresi&oacute;n PostScript <command>lprps</command> (vea la
            secci&oacute;n <link 
            linkend="printing-advanced-if-conversion">Acomodando Trabajos de 
            Texto Plano en Impresoras PostScript</link>), con las opciones que
            <application>LPD</application> haya pasado al script.  El comando
            <command>lprps</command> har&aacute; uso de esas opciones para 
            llevar la cuenta de las p&aacute;ginas impresas.</para>
        </sect4>
            
        <sect4>
          <title>M&aacute;s Ejemplos de Filtros de Conversi&oacute;n</title>
              
          <para>Considerando que no existe una serie de pasos establecida, para 
            instalar filtros de conversi&oacute;n, me permito mostrar algunos
            ejemplos m&aacute;s.  Puede usarlos tal como aparecen, si es que se
            ajustan a sus necesidades.</para>
              
          <para>Este ejemplo es de un filtro de conversi&oacute;n raster
            (bueno, de hecho se trata de un fichero GIF), para una impresora
            Hewlett Packard LaserJet III-Si:</para>

          <programlisting>#!/bin/sh
#
#  hpvf - Convierte ficheros GIF a HP/PCL, posteriormente los imprime
#  Instalado en /usr/local/libexec/hpvf
                  
PATH=/usr/X11R6/bin:$PATH; export PATH
giftopnm | ppmtopgm | pgmtopbm | pbmtolj -resolution 300 \
    &amp;&amp; exit 0 \
    || exit 2</programlisting>

          <para>Esto trabaja convirtiendo el fichero GIF a cualquier tipo de
            fichero mapa portable, y conviritendo eso a un mapa en escala de
            grises, y ese mapa de regreso a un fichero portable de mapa de
            bits, y finalmente eso a datos compatibles con HP/PCL, entendible
            por la impresora LaserJet.</para>
              
          <para>Aqui esta un ejemplo del fichero 
            <filename>/etc/printcap</filename> usando el filtro anterior, con la
            impresora mencionada.</para>

          <programlisting>#
#  Fichero /etc/printcap para el host orchid
#
teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\
        :lp=/dev/lpt0:sh:sd=/var/spool/lpd/teak:mx#0:\
        :if=/usr/local/libexec/hpif:\
        :vf=/usr/local/libexec/hpvf:</programlisting>
              
          <para>El siguiente script es un filtro de conversi&oacute;n de datos de
            tipo troff desde un sistema groff, para la impresora PostScript
            denominada <literal>bamboo</literal>:</para>

          <programlisting>#!/bin/sh
#
#  pstf - Convierte datos de troff tipo groff a PS, y los imprime.
#  Instalado en /usr/local/libexec/pstf
#
exec grops | /usr/local/libexec/lprps "$@"</programlisting>
              
          <para>El script de arriba, nuevamente hace uso del comando 
            <command>lprps</command>, para manejar la comunicaci&oacute;n con
            la impresora.  Si la impresora se encontrase en un puerto paralelo,
            usariamos el siguiente script:</para>

          <programlisting>#!/bin/sh
#
#  pstf - Convierte datos groff a PS, y los imprime.
#  Instalado en /usr/local/libexec/pstf
#
exec grops</programlisting>
          
          <para>Eso es todo.  Aqui presentamos la entrada necesaria en
            <filename>/etc/printcap</filename> para habilitar el filtro:</para>
                
          <programlisting>:tf=/usr/local/libexec/pstf:</programlisting>
              
          <para>Aqui presentamos un ejemplo que puede hacer que los viejos 
            usuarios de FORTRAN se ruboricen.  Es un filtro de texto para
            FORTRAN, usando impresoras que pueden imprimir directamente texto
            plano.  Lo instalaremos para la impresora <literal>teak</literal>:
            </para>

          <programlisting>#!/bin/sh
#
# hprf - Filtro de Texto FORTRAN para LaserJet 3si:
# Instalado en /usr/local/libexec/hprf
#

printf "\033&amp;k2G" &amp;&amp; fpr &amp;&amp; printf "\033&amp;l0H" &amp;&amp;
 exit 0
exit 2</programlisting>
              
          <para>Y a&ntilde;adiremos esta l&iacute;nea al fichero
            <filename>/etc/printcap</filename> para la impresora 
            <literal>teak</literal>, para efecto de habilitar el filtro:</para>
              
          <programlisting>:rf=/usr/local/libexec/hprf:</programlisting>
              
          <para>Aqui presentamos el &uacute;ltimo ejemplo que puede resultar algo
            complicado.  Vamos a a&ntilde;adir un filtro DVI para la impresora
            LaseJet <literal>teak</literal> comentada anteriormente.  Primero, la
            parte sencilla: actualizaremos <filename>/etc/printcap</filename> 
            con la ubicaci&oacute;n del filtro DVI:</para>
              
          <programlisting>:df=/usr/local/libexec/hpdf:</programlisting>
              
          <para>Ahora la parte complicada: crar el filtro.  Para eso, vamos
            a necesitar un programa de conversi&oacute;n de DVI-a-LaserJet/PCL.
            La Colecci&oacute;n de Ports de FreeBSD (vea <link
            linkend="ports">La Colecci&oacute;n de Ports</link>) cuenta con
            uno, el nombre del paquete es: <command>dvi2xx</command>.  Al
            instalar este programa, nos brinda la funcionalidad que buscamos,
            <command>dvilj2p</command>, el cual convierte ficheros DVI a
            ficheros compatibles con LaserJet IIp, LaserJet III y LaserJet
            2000 y c&oacute;digos compatibles.</para>
              
          <para>El programa <command>dvilj2p</command> hace que el filtro
            <command>hpdf</command> sea m&aacute;s complejo, en virtud de que
            <command>dvilj2p</command> no puede leer desde la entrada 
            estandar.  Este desea trabajar desde un nombre de fichero.  Y lo
            que es peor, es que el nombre del fichero debe contar con la
            terminaci&oacute;n <filename>.dvi</filename>, de tal forma que
            usar <filename>/dev/fd/0</filename> como entrada estandar representa
            un problema.  Esto lo podremos solucionar, creando un enlace
            (simb&oacute;lico) de un fichero temporal (uno que su tenga como
            extensi&oacute;n <filename>.dvi</filename>) a 
            <filename>/dev/fd/0</filename>, y por tanto forzando a
            <command>dvilj2p</command> a leer la entrada estandar.</para>
              
          <para>El &uacute;nico punto negativo que nos queda por resolver, es
            que no podemos utilizar <filename>/tmp</filename> para el enlace
            temporal.  Los enlaces simb&oacute;licos son propiedad del grupo y
            usuario <username>bin</username>.  El filtro de ejecuta como usuario
            <username>daemon</username>.  Y el directorio 
            <filename>/tmp</filename> cuenta con el bit <quote>pegajoso</quote> 
            activado.  El filtro puede crear el enlace, pero no podr&aacute;
            limpiarlo una vez que termine y eliminarlo, ya que pertenece a un
            usuario diferente.</para>
              
          <para>En lugar de esto, el filtro crear&aacute; el enlace 
            simb&oacute;lico en el directorio de trabajo actual, el cual 
            ser&aacute; el directorio de la cola de impresi&oacute;n
            (especificado en <filename>/etc/printcap</filename> por la
            caracter&iacute;stica <literal>sd</literal>).  Este lugar es
            perfecto para que los filtros hagan su trabajo, especialmente que
            aqui existe m&aacute;s espacio (algunas veces) en disco duro, que
            bajo el directorio <filename>/tmp</filename>.</para>
              
          <para>Finalmente, aqui presentamos el filtro:</para>

          <programlisting>#!/bin/sh
#
#  hpdf - Impresion de datos DVI en una impresora HP/PCL
#  Instalado en /usr/local/libexec/hpdf

PATH=/usr/local/bin:$PATH; export PATH

#
#  Definir una funcion para limpiar nuestros ficheros temporales.  Estos existen
#  en el directorio de trabajo actual, el cual servira para la cola de impresion de
#  la impresora.
#
cleanup() {
   rm -f hpdf$$.dvi
}

#
#  Definir funcion para el manejo de errores fatales: imprimir un mensaje dado y salir
#  con codigo de salida 2.  Al salir con 2, le indica a LPD que no intente la impresion 
#  de nuevo.
#
fatal() {
    echo "$@" 1&gt;&amp;2
    cleanup
    exit 2
}

#
#  Si el usuario elimina el trabajo, LPD enviara un SIGINT, para que SIGINT
#  (y algunas otros avisos) limpien despues de nosotros.
#
trap cleanup 1 2 15 

#
#  Asegurarse de que no estamos creando un conflicto con ficheros existentes.
#
cleanup

#
#  Crear el enlace de la entrada DVI a la entrada estandar (el fichero a imprimir).
#
ln -s /dev/fd/0 hpdf$$.dvi || fatal "Cannot symlink /dev/fd/0"

#
#  Hacer  LF = CR+LF
#
printf "\033&amp;k2G" || fatal "Cannot initialize printer"

# 
#  Convertir e imprimir.  Regresar valor de dvilj2p no parece my confiable, 
#  asi que es ignorado.
#
dvilj2p -M1 -q -e- dfhp$$.dvi

#
#  Limpiar y salir
#
cleanup
exit 0</programlisting>
        </sect4>

        <sect4 id="printing-advanced-autoconv">
          <title>Conversi&oacute;n Autom&aacute;tica: Una Alternativa A Los Filtros
            De Conversi&oacute;n</title>
              
          <para>Todos estos filtros de conversi&oacute;n realizan una gran labor
            en pro de sus labores de impresi&oacute;n, pero con el inconveniente 
            de que cada usuario debe especificar cual filtro es el que se debe 
            utilizar (cuando se invoca el comando &man.lpr.1;).  Si sus usarios
            no son lo que podemos llamar aficionados a la computaci&oacute;n, el 
            especificar que filtro utilizar puede volverse algo molesto.  Y lo 
            que es peor, el uso de un filtro inadecuado puede causar que su 
            impresora termine imprimiendo cientos de hojas de papel de manera
            incorrecta.</para>
              
          <para>En lugar de instalar filtros de conversi&oacute;n, quiz&aacute;s
            le interese intentar que su filtro de texto (dado que es el filtro
            por default) determine que tipo de fichero se esta enviando a 
            imprimir y autom&aacute;ticamente ejecute el filtro adecuado.  En 
            este caso, herramientas como <command>file</command> pueden ser
            de mucha utilidad.  Claro esta, puede que algunos tipos de ficheros
            puede ser dif&iacute;cil determinar de que tipo son, pero siempre
            puede contar con filtros especiales para ellos.</para>
              
          <indexterm><primary>apsfilter</primary></indexterm>
          <indexterm>
            <primary>impresora</primary>
            <secondary>filtros</secondary>
            <tertiary>apsfilter</tertiary>
          </indexterm>
          <para>La Colecci&oacute;n de Ports de FreeBSD cuenta con un filtro de
            texto que ejecuta de forma autom&aacute;tica la conversi&oacute;n, 
            llamado <command>apsfilter</command>.  Este puede detectar texto 
            plano, PostScript y ficheros DVI, ejecutar la conversi&oacute;n
            adecuada e imprimir.</para>
        </sect4>
      </sect3>
      
      <sect3 id="printing-advanced-of">
        <title>Filtros de Salida</title>

        <para>El sistema de cola de impresi&oacute;n de 
          <application>LPD</application> soporta otro tipo de filtros, que
          aun no hemos explicado aqui: un filtro de salida.  Un filtro de
          salida esta dise&ntilde;ado para imprimir texto plano 
          &uacute;nicamente, como el filtro de texto, pero de una forma
          m&aacute;s simplificada.  Si usted esta usando un filtro de
          salida pero no filtro de texto, entonces:</para>

        <itemizedlist>
          <listitem>
            <para><application>LPD</application> inicia el filtro de salida para
              el trabajo completo, en lugar de hacerlo para cada fichero del
              trabajo.</para>
          </listitem>
          
          <listitem>
            <para>Para el filtro de salida, <application>LPD</application> 
              no realiza un trabajo extra para identificar el comienzo o
              el fin del trabajo.</para>
          </listitem>
          
          <listitem>
            <para>En el filtro de salida, <application>LPD</application> no
              utiliza como argumento el nombre de usuario o host, por lo tanto
              no esta dise&ntilde;ado para llevar un conteo por usuario.  De 
              hecho, este s&oacute;lo maneja dos argumentos:</para>
                    
            <cmdsynopsis>
              <command>nombre-filtro</command>
              <arg choice="plain">-w<replaceable>ancho</replaceable></arg>
              <arg choice="plain">-l<replaceable>largo</replaceable></arg>
            </cmdsynopsis>
            
            <para>Donde <replaceable>ancho</replaceable> es tomado de la
              caracter&iacute;stica <literal>pw</literal> y
              <replaceable>largo</replaceable> es tomado de la 
              caracter&iacute;stica <literal>pl</literal>, para la impresora
              en cuesti&oacute;n.</para>
          </listitem>
        </itemizedlist>

        <para>Es importante que no se deje seducir por la simplicidad del filtro
          de salida.  Si usted desea que cada fichero de un trabajo sea impreso
          en una p&aacute;gina diferente, el filtro de salida <emphasis>no 
          har&aacute; este trabajo</emphasis>.  Utilice un filtro de texto 
          (tambi&eacute;n conocido como filtro de entrada); vea la secci&oacute;n
          <link linkend="printing-textfilter">Instalando un Filtro de Texto
          </link>.  Mas all&aacute;, el filtro de salida es de hecho <emphasis>
          m&aacute;s complicado</emphasis> en ese aspecto dado que examina la
          cadena de bytes que se ha enviado, para buscar alguna marca especial y
          enviarse se&ntilde;as &eacute;l mismo, a nombre de 
          <application>LPD</application>.</para>
            
        <para>De cualquier forma, un filtro de salida es 
          <emphasis>necesario</emphasis> si usted desea p&aacute;ginas de 
          encabezado y requiere de enviar un secuencia de escape u otras
          cadenas de inicializaci&oacute;n para habilitar la impresi&oacute;n de
          encabezados.  (Aunque tambi&eacute;n es <emphasis>trivial</emphasis> si
          desea cobrar de acuerdo a las p&aacute;ginas encabezado de cada 
          usuario, dado que <application>LPD</application> no otorga 
          informaci&oacute;n del usuario o host, al filtro de salida.)</para>
            
        <para>En una sola impresora, <application>LPD</application> permite el
          uso tanto del filtro de salida como el filtro de texto.  En cuyo caso,
          <application>LPD</application> iniciar&aacute; el filtro de salida
          para imprimir las p&aacute;ginas de encabezado (vea la secci&oacute;n
          <link linkend="printing-advanced-header-pages">P&aacute;ginas de
          Encabezado</link>) &uacute;nicamente.  Posteriormente 
          <application>LPD</application> espera que el filtro de salida se
          <emphasis>detenga por s&iacute; mismo</emphasis> al enviarle dos
          bytes al filtro: ASCII 031 seguido de ASCII 001.  Cuando un filtro de
          salida recibe estos dos bytes (031, 001), deber&aacute; pararse, 
          enviandose a s&iacute; mismo una se&ntilde;al 
          <literal>SIGSTOP</literal>.  Una vez que <application>LPD</application>
          ha terminado de ejecutar otros filtros, reiniciar&aacute; el filtro de
          salida, el enviarle una se&ntilde;al <literal>SIGCONT</literal>.</para>
            
        <para>Si existe un filtro de salida, pero <emphasis>no</emphasis> existe
          un filtro de texto y <application>LPD</application> esta trabajando con
          un trabajo en texto plano, <application>LPD</application> 
          utilizar&aacute; el filtro de salida para hacer el trabajo.  Como se
          comento anteriormente, el filtro de salida imprimir&aacute; cada
          fichero del trabajo en secuencia, sin intervenci&oacute;n de 
          alimentaci&oacute;n u otras ventajas con lo que al papel se refiere, y
          seguramente que esto <emphasis>no</emphasis> es lo que usted desea.  En
          casi todos los casos usted necesitar&aacute; un filtro de texto.</para>
            
        <para>El programa <command>lpf</command>, que comentamos anteriormente
          como un filtro de texto, tambi&eacute;n es capaz de ejecutar un filtro
          de salida.  Si desea un trabajo r&aacute;pido-y-sucio del filtro de 
          salida, pero no desea que se escriban bytes de detecci&oacute;n, ni
          envien c&oacute;digos, puede usar <command>lpf</command>.  
          Tambi&eacute;n puede incluir <command>lpf</command> en un script de
          shell, para que controle cualquier c&oacute;digo de 
          inicializaci&oacute;n que la impresora requiera.</para>
      </sect3>
      
      <sect3 id="printing-advanced-lpf">
        <title><command>lpf</command>: Un Filtro de Texto</title>

        <para>El programa <filename>/usr/libexec/lpr/lpf</filename> que viene
          con los binarios de FreeBSD, como un filtro de texto (filtro de
          entrada) que puede darle sang&iacute;a a los trabajos (usando la
          opci&oacute;n <command>lpr -i</command>), que permite el env&iacute;o 
          literal de caracteres (con el comando <command>lpr -l</command>), 
          ajusta la posici&oacute;n de impresi&oacute;n para caracteres de 
          retroceso y tabulador, y contabiliza las p&aacute;ginas impresas.  
          Tambi&eacute;n puede funcionar como un filtro de salida.</para>
            
        <para><command>lpf</command> se ajusta a la configuraci&oacute;n de 
          gran cantidad de impresoras.  Y aunque no tiene la habilidad de enviar
          secuencias de inicializaci&oacute;n a la impresora, es muy sencillo
          escribir un script de shell para llevar a cabo la inicializaci&oacute;n
          y posteriormente ejecutar <command>lpf</command>.</para>
            
        <indexterm><primary>conteo de p&aacute;ginas</primary></indexterm>
        <indexterm>
          <primary>conteo</primary>
          <secondary>impresora</secondary>
        </indexterm>
        <para>Para efecto de que <command>lpf</command> lleve un conteo correcto,
          requiere que se tengan los valores adecuados de las 
          caracter&iacute;sticas <literal>pw</literal> y <literal>pl</literal>, 
          en el fichero <filename>/etc/printcap</filename>.  En base a estos,
          determina cuanto texto puede existir en una p&aacute;gina y cuantas
          p&aacute;ginas existen en el trabajo de un usuario.  Para mayor
          informaci&oacute;n al respecto, vea la secci&oacute;n <link  
          linkend="printing-advanced-acct">Contabilidad del Uso de la 
          Impresora</link>.</para>
      </sect3>
    </sect2>
    
    <sect2 id="printing-advanced-header-pages">
      <title>P&aacute;ginas de Encabezado</title>
      
      <para>Si usted cuenta con <emphasis>gran</emphasis> cantidad de usuarios, 
        y todos imprimiendo en varias impresoras, entonces ser&iacute;a
        conveniente considerar las <emphasis>p&aacute;ginas de 
        encabezado</emphasis> como un mal necesario.</para>
          
      <indexterm>
        <primary>p&aacute;ginas titulares</primary>
	<see>p&aacute;ginas encabezados</see>
      </indexterm>
      <indexterm><primary>p&aacute;ginas encabezados</primary></indexterm>
      <para>Las p&aacute;ginas de encabezados, tambi&eacute;n conocidas como
        <emphasis>titulares</emphasis> o 
        <emphasis>p&aacute;ginas de aviso</emphasis> identifican a quien
        pertenece el trabajo enviado a imprimir, una vez que han sido
        impresos.  Normalmente estas son impresas en letras grandes y de color
        negro remarcado (negritas), y quiz&aacute;s con bordes decorativos, de
        tal forma que puedan distinguirse entre el resto de las p&aacute;ginas
        enviadas a imprimir.  Estas permiten a los usuarios localizar 
        r&aacute;pidamente sus impresiones.  El obvio lado negativo de estas
        p&aacute;ginas es que se debe imprimir una hoja adicional, por cada
        trabajo enviado a la impresora, su utilidad ef&iacute;mera, no dura
        m&aacute;s que unos minutos, terminando en una bandeja de reciclaje.
        (Note que las p&aacute;ginas de encabezado se imprimen con cada trabajo
        enviado a la impresora, no con cada p&aacute;gina impresa, de tal
        manera que el deperdicio de papel no es tan grave.)</para>
          
      <para>El sistema <application>LPD</application> puede proveerle de las
        p&aacute;ginas de encabezado de forma autom&aacute;tica para sus 
        impresiones, <emphasis>si</emphasis> su impresora soporta de la 
        impresi&oacute;n de texto plano directamente.  Si usted cuenta con una
        impresora PostScript, necesitar&aacute; un programa externo para generar
        estas p&aacute;ginas; vea la secci&oacute;n <link 
        linkend="printing-advanced-header-pages-ps">P&aacute;ginas de Encabezado 
        en Impresoras PostScript</link>.</para>
      
          <sect3 id="printing-advanced-header-pages-enabling">
        <title>Habilitando las P&aacute;ginas de Encabezado</title>

        <para>En la secci&oacute;n <link 
          linkend="printing-simple">Configuraci&oacute;n Simple
          de una Impresora</link>, deshabilitamos la impresi&oacute;n de estas
          p&aacute;ginas al especificar <literal>sh</literal> (que son siglas 
          en ingl&eacute;s para <quote>supress header</quote>, algo as&iacute;
          como <quote>eliminar encabezados</quote>) en el fichero 
          <filename>/etc/printcap</filename>.  Para efecto de habilitar la 
          impresi&oacute;n de p&aacute;ginas de encabezado, simplemente elimine
          la caracter&iacute;stica <literal>sh</literal> del fichero.</para>

        <para>&iquest;Suena demasiado f&aacute;cil, verdad?</para>

        <para>Efectivamente.  Es <emphasis>probable</emphasis> que deba proveer
          de un filtro de salida, para efecto de que se mande la cadena de
          inicializaci&oacute;n a la impresora.  Aqui tenemos un ejemplo de un 
          filtro de salida para impresoras compatibles con PCL de Hewlett 
          Packard:</para>

        <programlisting>#!/bin/sh
#
#  hpof - Filtro de salida para impresoras compatibles con Hewlett Packard PCL
#  Instalado en /usr/local/libexec/hpof

printf "\033&amp;k2G" || exit 2
exec /usr/libexec/lpr/lpf</programlisting>
            
        <para>Especifique la ruta del filtro de salida, en la 
          caracter&iacute;stica <literal>of</literal>.  Vea la secci&oacute;n
          <link linkend="printing-advanced-of">Filtros de Salida</link> para 
          m&aacute;s informaci&oacute;n al respecto.</para>
            
        <para>Aqui podr&aacute; ver un ejemplo de un fichero 
          <filename>/etc/printcap</filename> para la impresora 
          <literal>teak</literal> que trabajamos anteriormente; hemos
          a&ntilde;adido las p&aacute;ginas de encabezado, as&iacute;
          como el filtro de salida mencionado anteriormente:</para>

        <programlisting>#
#  /etc/printcap for host orchid
#
teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\
        :lp=/dev/lpt0:sd=/var/spool/lpd/teak:mx#0:\
        :if=/usr/local/libexec/hpif:\
        :vf=/usr/local/libexec/hpvf:\
        :of=/usr/local/libexec/hpof:</programlisting>
            
        <para>Ahora, cuando los usuarios impriman sus trabajos a la impresora 
          <literal>teak</literal>, ellos obtendr&aacute;n una p&aacute;gina de 
          encabezado por cada trabajo que manden a imprimir.  Si los usuarios
          desean pasar un tiempo buscando sus impresiones, pueden deshabilitar la
          impresi&oacute;n de esta p&aacute;gina con el comando
          <command>lpr -h</command>; para m&aacute;s informaci&oacute;n sobre las
          opciones de &man.lpr.1;, vea la secci&oacute;n <link
            linkend="printing-lpr-options-misc">Opciones de P&aacute;ginas de
          Encabezado</link>.</para>

        <note>
          <para>El sistema <application>LPD</application> envia a la impresora
            un caracter de alimentaci&oacute;n de p&aacute;gina.  Si su
            impresora utiliza un caracter diferente de alimentaci&oacute;n de
            p&aacute;gina, especif&iacute;quelo en el fichero 
            <filename>/etc/printcap</filename>, bajo la caracter&iacute;stica
            <literal>ff</literal>.</para>
        </note>
      </sect3>
      
      <sect3 id="printing-advanced-header-pages-controlling">
        <title>Controlando las P&aacute;ginas de Encabezado</title>

        <para>Al habilitar las p&aacute;ginas de encabezado, 
          <application>LPD</application> produce un <emphasis>encabezado 
          largo</emphasis>, una p&aacute;gina completa con letras largas que
          identifican el usuario, la maquina host, y el trabajo.  Aqui tenemos
          un ejemplo (kelly ha impreso un trabajo llamado outline, desde el
          host <hostid>rose</hostid>):</para>
            
        <programlisting>      k                   ll       ll
      k                    l        l
      k                    l        l
      k   k     eeee       l        l     y    y
      k  k     e    e      l        l     y    y
      k k      eeeeee      l        l     y    y
      kk k     e           l        l     y    y
      k   k    e    e      l        l     y   yy
      k    k    eeee      lll      lll     yyy y
                                               y
                                          y    y
                                           yyyy


                                   ll
                          t         l        i
                          t         l
       oooo    u    u   ttttt       l       ii     n nnn     eeee
      o    o   u    u     t         l        i     nn   n   e    e
      o    o   u    u     t         l        i     n    n   eeeeee
      o    o   u    u     t         l        i     n    n   e
      o    o   u   uu     t  t      l        i     n    n   e    e
       oooo     uuu u      tt      lll      iii    n    n    eeee









      r rrr     oooo     ssss     eeee
      rr   r   o    o   s    s   e    e
      r        o    o    ss      eeeeee
      r        o    o      ss    e
      r        o    o   s    s   e    e
      r         oooo     ssss     eeee







                                              Job:  outline
                                              Date: Sun Sep 17 11:04:58 1995</programlisting>

        <para>Despu&eacute;s de esta p&aacute;gina, 
          <application>LPD</application> manda un caracter de alimentaci&oacute;n
          de p&aacute;gina, para que el trabajo sea impreso en una hoja blanca
          nueva (a menos que cuente con <literal>sf</literal> (por sus siglas en
          ingl&eacute;s <quote>supress form feed</quote>, que es 
          <quote>eliminaci&oacute;n de alimentaci&oacute;n de 
          p&aacute;gina</quote>) en el fichero
          <filename>/etc/printcap</filename>).</para>
            
        <para>Si lo prefiere, <application>LPD</application> puede generar un
          <emphasis>encabezado peque&ntilde;o</emphasis>; puede hacer esto, al
          especificar <literal>sb</literal> en el fichero
          <filename>/etc/printcap</filename>. La p&aacute;gina de encabezado que
          ser&aacute; impresa se vera as&iacute;:</para>
            
        <programlisting>rose:kelly  Job: outline  Date: Sun Sep 17 11:07:51 1995</programlisting>

        <para>Por default, <application>LPD</application> imprime la 
          p&aacute;gina de encabezado en primer t&eacute;rmino y posteriormente
          el trabajo.  Para cambiar este comportamiento, es necesario incluir
          la caracter&iacute;stica <literal>hl</literal> (encabezado a lo 
          &uacute;ltimo por sus siglas en ingl&eacute;s), en el fichero
          <filename>/etc/printcap</filename>.</para>
      </sect3>
      
      <sect3 id="printing-advanced-header-pages-accounting">
        <title>Conteo de P&acute;ginas de Encabezado</title>

        <para>Cuando se utiliza la utilidad integrada de conteo de
          <application>LPD</application>, refuerza el paradigma de que;
          cuando se refiere al conteo de impresiones: las p&aacute;ginas de 
          encabezados deben ser <emphasis>sin coto alguno</emphasis>.</para>
            
        <para>&iquest;Por qu&eacute;?</para>

        <para>Por que el filtro de salida es el &uacute;nico programa externo
          que puede llevar un conteo de las p&aacute;ginas impresas, cuando 
          tiene el control, y este no es provisto con informaci&oacute;n de un 
          <emphasis>usuario o host</emphasis> o algun fichero contador, de tal
          forma que no tiene idea de a quien cargar estas impresiones.  Tampoco
          es conveniente, simplemente <quote>cargar una impresi&oacute;n</quote>
          al total de las impresiones del filtro de texto o filtro de 
          conversi&oacute;n (esos que cuentan con informaci&oacute;n del 
          usuario y host), esto en virtud de que los usuarios pueden suprimir
          el uso de estas p&aacute;ginas con <command>lpr -h</command>.  Esto
          implica que se le podr&iacute;an cobrar hojas que ellos no imprimieron.
          B&aacute;sicamente el comando <command>lpr -h</command> ser&iacute;a la
          opci&oacute;n preferida de los usuarios concientes del sistema, pero
          usted no puede ofrecer incentivo alguno para que se utilice.</para>
            
        <para><emphasis>Tampoco es una buena alternativa</emphasis> que cada
          filtro genere sus p&aacute;ginas de encabezado (y por lo tanto poder
          cobrar por ellas).  Si los usuarios desean suprimirlas usando la
          opci&oacute;n <command>lpr -h</command>, a&uacute;n obtendr&aacute;n
          estas p&aacute;ginas y les ser&aacute;n cobradas, en virtud de que 
          <application>LPD</application> no tiene transfiere la opci&oacute;n
          <option>-h</option> a los filtros.</para>

        <para>As&iacute; que, &iquest;Qu&eacute; opciones tenemos?</para>

        <para>Usted puede:</para>

        <itemizedlist>
          <listitem>
            <para>Aceptar el paradigma de <application>LPD</application> y no
              cobrar por las p&aacute;ginas de encabezado.</para>
          </listitem>
          
          <listitem>
            <para>Instalar una alternativa a <application>LPD</application>,
	          tal como <application>LPRng</application>. La secci&oacute;n  
              <link linkend="printing-lpd-alternatives">Alternativas al Sistema 
              de Impresi&oacute;n Est&aacute;ndar</link> le informa sobre otros
              programas que puede utilizar, que sustituyan a
              <application>LPD</application>.</para>
          </listitem>
          
          <listitem>
            <para>Escribir un filtro de salida <emphasis>inteligente</emphasis>.  
              Normalmente, un filtro de salida no esta dise&ntilde;ado para hacer
              otra cosa, que no sea inicializar la impresora o bien hacer alguna
              conversi&oacute;n sencilla de caracteres.  Esta dise&ntilde;ado
              para p&aacute;ginas de encabezado y trabajos en texto plano (cuando
              no existe algun filtro de texto (entrada)).  Pero cuando si existe
              un filtro de texto, para los trabajos en texto plano, entonces
              <application>LPD</application> s&oacute;lo har&aacute; uso del
              filtro de salida para las p&aacute;ginas de encabezado.  Y el 
              filtro de salida puede pasar el texto de la p&aacute;gina 
              encabezado generado por <application>LPD</application>, para
              determinar el usuario y el host al cual se le cobrar&aacute; dicha
              impresi&oacute;n.  El &uacute;nico problema con este metodo es
              que el filtro de salida a&uacute;n no sabe que fichero usar
              para llevar la cuenta de las impresiones (la caracter&iacute;stica
              <literal>af</literal> no pasa el nombre del fichero), pero si
              usted cuenta con un fichero establecido para llevar esta cuenta, 
              puede incluirlo en el c&oacute;digo del filtro de salida.  Para
              efecto de facilitar este paso, utilice la caracter&iacute;stica
              <literal>sh</literal> (encabezado corto) del fichero
              <filename>/etc/printcap</filename>.  Nuevamente, todo esto 
              podr&iacute;a resultar muy complicado, y los usuarios estaran
              muy agradecidos con el generoso administrador del sistema que
              genera las p&aacute;ginas de encabezado gratis.</para>
          </listitem>
        </itemizedlist>
      </sect3>
      
      <sect3 id="printing-advanced-header-pages-ps">
        <title>P&aacute;ginas de Encabezado en Impresoras PostScript</title>

        <para>Como se ha descrito anteriormente, <application>LPD</application> 
          puede generar p&aacute;ginas encabezado en texto plano para gran 
          cantidad de impresoras.  Claro esta, que PostScript no puede imprimir
          texto plano directamente, de tal forma que la habilidad de imprimir
          estas p&aacute;ginas de <application>LPD</application>, es
          inservible&mdash;o casi.</para>
            
        <para>Una forma obvia de crear las p&aacute;ginas de encabezado, es hacer
          que cada filtro de conversi&oacute;n y de texto, creen sus
          p&aacute;ginas de encabezado.  Los filtros deber&aacute;n utilizar el
          nombre de usuario y host, para generar esta p&aacute;gina 
          personalizada.  Lo malo de este metodo es que los usuarios siempre
          obtendr&aacute;n una p&aacute;gina de encabezado, aun cuando usen en
          sus impresiones <command>lpr -h</command>.</para>
            
        <para>Exploremos este metodo.  El siguiente script considera tres
          argumentos (nombre del login del usuario, nombre del host, y nombre del
          trabajo) y genera una p&aacute;gina simple de encabezado PostScript:
          </para>

        <programlisting>#!/bin/sh
#
#  make-ps-header - crea una pagina de encabezado PostScript a stdout
#  Instalado en /usr/local/libexec/make-ps-header
#

#
#  Estas son unidades PostScript (72 a la pulgada).  Modifiquelo para A4 o 
#  cualquier tamano de papel que este utilizando.
#
page_width=612
page_height=792
border=72

#
#  Verificar argumentos
#
if [ $# -ne 3 ]; then
    echo "Usage: `basename $0` &lt;user&gt; &lt;host&gt; &lt;job&gt;" 1&gt;&amp;2
    exit 1
fi

#
#  Salvar estos, principalmente para lectura de PostScript, mas abajo.
#
user=$1
host=$2
job=$3
date=`date`

#
#  Enviar el codigo PostScript a la salida estandar.
#
exec cat &lt;&lt;EOF
%!PS

%
%  Segurese de no interferir con el trabajo del usuario c continuacion
%
save

%
%  Crear un grueso y poco placentero borde alrededor del borde de la pagina.
%
$border $border moveto
$page_width $border 2 mul sub 0 rlineto
0 $page_height $border 2 mul sub rlineto
currentscreen 3 -1 roll pop 100 3 1 roll setscreen
$border 2 mul $page_width sub 0 rlineto closepath
0.8 setgray 10 setlinewidth stroke 0 setgray

%
%  Desplegar nombre de login del usuario, bonito largo y prominente
%
/Helvetica-Bold findfont 64 scalefont setfont
$page_width ($user) stringwidth pop sub 2 div $page_height 200 sub moveto
($user) show

%
%  Ahora mostrar los aburridos detalle generales
%
/Helvetica findfont 14 scalefont setfont
/y 200 def
[ (Job:) (Host:) (Date:) ] {
200 y moveto show /y y 18 sub def }
forall

/Helvetica-Bold findfont 14 scalefont setfont
/y 200 def
[ ($job) ($host) ($date) ] {
        270 y moveto show /y y 18 sub def
} forall

%
% Eso es todo
%
restore
showpage
EOF</programlisting>

        <para>Ahora, cada uno de los filtros de conversi&oacute;n y de texto, 
          pueden invocar este script, para en primer lugar generar esta
          p&aacute;gina y despu&eacute;s imprimir el trabajo del usuario.  Aqui
          tenemos el filtro de conversi&oacute;n DVI que revisamos anteriormente
          en este documento, modificado para generar p&aacute;ginas de
          encabezado:</para>

        <programlisting>#!/bin/sh
#
#  psdf - DVI to PostScript printer filter
#  Installed in /usr/local/libexec/psdf
#
#  Invoked by lpd when user runs lpr -d
#
                
orig_args="$@"

fail() {
    echo "$@" 1&gt;&amp;2
    exit 2
}

while getopts "x:y:n:h:" option; do
    case $option in
        x|y)  ;; # Ignore
        n)    login=$OPTARG ;;
        h)    host=$OPTARG ;;
        *)    echo "LPD started `basename $0` wrong." 1&gt;&amp;2
              exit 2
              ;;
    esac
done

[ "$login" ] || fail "No login name"
[ "$host" ] || fail "No host name"

( /usr/local/libexec/make-ps-header $login $host "DVI File"
  /usr/local/bin/dvips -f ) | eval /usr/local/libexec/lprps $orig_args</programlisting>

        <para>Note como el filtro debe pasar los argumentos en orden, para efecto
          de determinar el nombre de usuario y host.  El procedimiento para los
          otros filtros de conversi&oacute;n es identico.  El filtro de texto
          tiene una peque&ntilde;a variaci&oacute;n (vea la secci&oacute;n <link 
          linkend="printing-advanced-filters">Como Trabajan los Filtros</link>).
          </para>
            
        <para>Como hemos mencionado anteriormente, este esquema simplemente nos
          sirve para deshabilitar la opci&oacute;n <quote>eliminar 
          encabezados</quote> (la opci&oacute;n <option>-h</option>) de
          <command>lpr</command>.  Si los usuarios desean salvar algunos arboles
          (o algunos centavos si usted cobra por estas p&aacute;ginas), no
          podr&aacute;n deshabilitar esta opci&oacute;n, ya que cada filtro
          imprimir&aacute; una p&aacute;gina de encabezado con cada trabajo
          impreso.</para>
            
        <para>Para permitir que los usuarios desactiven las p&aacute;ginas de 
          encabezado en cada trabajo, ser&aacute; necesario que utilice el truco
          del que hablamos en la secci&oacute;n <link  
          linkend="printing-advanced-header-pages-accounting">Conteo de
            P&aacute;ginas de Encabezado</link>: escribir un filtro de salida que
          pase la p&aacute;gina generada por LPD y produzca una versi&oacute;n
          PostScript de la misma.  Si el usuario utiliza 
          <command>lpr -h</command>, entonces <application>LPD</application> no
          generar&aacute; una p&aacute;gina encabezado, y tampoco su filtro de
          salida.  De otra forma, su filtro de salida tomar&aacute; los datos de
	  <application>LPD</application> y enviar&aacute; el c&oacute;digo
	  PostScript apropiado para la impresi&oacute;n de la p&aacute;gina de
	  encabezado.</para>
            
        <para>Si usted cuenta con una impresora PostScript conectada a un
          puerto serial, puede usar <command>lprps</command>, que cuenta con
          un filtro de salida, <command>psof</command>, que hace lo 
          mencionado.  Note que <command>psof</command> no cobra por las
          p&aacute;ginas de encabezado.</para>
      </sect3>
    </sect2>
    
    <sect2 id="printing-advanced-network-printers">
      <title>Impresi&oacute;n en Red</title>
      
      <indexterm>
        <primary>impresora</primary>
        <secondary>red</secondary>
      </indexterm>
      <indexterm><primary>impresi&oacute;n en red</primary></indexterm>
      <para>FreeBSD cuenta con soporte para impresi&oacute;n en red: env&iacute;o
        de trabajos a impresoras remotas.  La impresi&oacute;n en red, 
        normalmente se cuenta con dos escenarios:</para>
      
      <itemizedlist>
        <listitem>
          <para>Accesando a una impresora que esta conectada a un host
            remoto.  Esto es, una impresora que esta conectada por algun medio
            convencional, como puerto serial o paralelo, en un host.  Y por
            otro lado se habilita <application>LPD</application> para poder
            imprimir desde otros hosts de la red.  La secci&oacute;n <link  
            linkend="printing-advanced-network-rm">Impresoras Instaladas en
            Hosts Remotos</link> le indica como hacer esto.</para>
        </listitem>

        <listitem>
          <para>Accesando a una impresora que esta conectada directamente a la 
            red.  En este caso la impresora cuenta con un dispositivo de red en
            adici&oacute;n (o en su lugar) del convencional paralelo o serial.  
            Esta impresora puede funcionar de la siguiente manera:</para>
          
          <itemizedlist>
            <listitem>
              <para>Puede comprender el protocolo de
                <application>LPD</application> e inclusive hacer consulta de
                trabajos en hosts remotos.  En este caso, actua tal como un
                host normal que esta ejecutando <application>LPD</application>.  
                Aplique el procedimiento revisado en <link 
                linkend="printing-advanced-network-rm">Impresoras
                  Instaladas en Hosts Remotos</link> para efecto de configurar
                estas impresoras.</para>
            </listitem>
            
            <listitem>
              <para>Puede contar con soporte para env&iacute;o de datos por medio
                de la conexi&oacute;n de red.  En este caso, usted 
                <quote>conecta</quote> la impresora a un host de la red, al hacer
                responsable, a dicho host, de la administraci&oacute;n de los
                trabajos en la cola de impresi&oacute;n y su envio a la
                impresora.  La secci&oacute;n <link  
                linkend="printing-advanced-network-net-if">Impresoras con 
                Interfaces de Red para Secuencia de Datos</link> le da algunos
                consejos y sugerencias sobre como instalar estas impresoras.
                </para>
            </listitem>
          </itemizedlist>
        </listitem>
      </itemizedlist>
          
      <sect3 id="printing-advanced-network-rm">
        <title>Impresoras Instaladas en Hosts Remotos</title>

        <para>El sistema de cola de impresi&oacute;n de 
          <application>LPD</application> cuenta con soporte integrado para enviar
          trabajos de impresi&oacute;n a un host remoto que cuente con 
          <application>LPD</application> (o alguna sistema compatible con 
	      <application>LPD</application>).  Esta habilidad le permite instalar 
	      una impresora en un host, y hacerla accesible desde otros hosts.  
	      Tambi&eacute;n es &uacute;til con impresoras que cuentan con 
	      interfaces de red que comprenden el protocolo de
	      <application>LPD</application>.</para>
            
        <para>Para habilitar la funcionalidad de impresi&oacute;n remota, primero
          instale la impresora en un host, que ser&aacute; el <emphasis>host de
          impresi&oacute;n</emphasis>.  Esto lo podemos hacer utilizando los
          pasos descritos en la secci&oacute;n <link  
          linkend="printing-simple">Configuraci&oacute;n Simple de una
          impresora</link>.  Realice cualquier configuraci&oacute;n adicional
          adicional que se requiera, de acuerdo a lo descrito en la 
          secci&oacute;n <link  
          linkend="printing-advanced">Configuraci&oacute;n Avanzada de una
          Impresora</link>.  Asegurese de probar la impresora y de que esta 
          funcionando correctamente, as&iacute; como las funciones de
          <application>LPD</application> que haya habilitado.  Tambi&eacute;n
          asegurese de que el <emphasis>host local</emphasis> cuenta con 
          autorizaci&oacute;n para usar el servicio de 
          <application>LPD</application> en el <emphasis>host remoto</emphasis>
          (vea la secci&oacute;n <link  
          linkend="printing-advanced-restricting-remote">Restricci&oacute;n de
            Trabajos de Impresoras Remotas</link>).</para>
            
        <indexterm>
          <primary>impresora</primary>
          <secondary>red</secondary>
        </indexterm>
        <indexterm><primary>impresi&oacute;n en red</primary></indexterm>
        <para>Si usted esta utilizando una impresora que cuenta con un 
          dispositivo de red, compatible con <application>LPD</application>, 
          entonces el <emphasis>host de impresi&oacute;n</emphasis> mencionado 
          m&aacute;s adelante, ser&aacute; la misma impresora, y el
          <emphasis>nombre de la impresora</emphasis> ser&aacute; el nombre que
          usted le haya asignado a la impresora.  Vea la documentaci&oacute;n 
          que incluye su impresora y/o el dispositivo de impresi&oacute;n en
          red para detalles al respecto.</para>

        <tip>
          <para>Si usted esta utilizando una impresora LaserJet Hewlett Packard 
            entonces la impresora <literal>nombre</literal> 
            autom&aacute;ticamente har&aacute; la conversi&oacute;n de LF a
            CRLF, de tal forma que no ser&aacute; necesario el uso del script
            <filename>hpif</filename>.</para>
        </tip>
            
        <para>Y de esta manera, para los hosts que desee que tengan acceso a la
          impresora, deber&aacute; crear una entrada en su fichero
          <filename>/etc/printcap</filename>, que contenga lo siguiente:</para>

        <orderedlist>
          <listitem>
            <para>Nombre la entrada como desee.  Para simplificar, quiz&aacute;s 
              desee darle el mismo nombre y alias usado en el host de 
              impresi&oacute;n.</para>
          </listitem>
          
          <listitem>
            <para>La caracter&iacute;stica <literal>lp</literal> dejela en 
              blanco, de manera expl&iacute;cita (<literal>:lp=:</literal>).
              </para>
          </listitem>
          
          <listitem>
            <para>Cree un directorio para la cola de impresi&oacute;n y 
              especifique su ruta en la caracter&iacute;stica 
              <literal>sd</literal>.  <application>LPD</application> 
              utilizar&aacute; este directorio para almacenar los trabajos 
              antes de que sean enviados al host de impresi&oacute;n.</para>
          </listitem>
          
          <listitem>
            <para>A&ntilde;ada el nombre del host de impresi&oacute;n a la
              caracter&iacute;stica <literal>rm</literal>.</para>
          </listitem>
          
          <listitem>
            <para>A&ntilde;ada el nombre de la impresora en el host de 
              impresi&oacute;n en la caracter&iacute;stica 
              <literal>rp</literal>.</para>
          </listitem>
        </orderedlist>

        <para>Eso es todo.  No es necesario listar los filtros de 
          conversi&oacute;n, dimensiones de la p&aacute;gina, o algo
          adicional en el fichero <filename>/etc/printcap</filename>.</para>

        <para>Aqui tenemos un ejemplo.  El host <hostid>rose</hostid> cuenta 
          con dos impresoras, <literal>bamboo</literal> y 
          <literal>rattan</literal>.  Vamos a habilitar a usuarios en el host
          <hostid>orchid</hostid> para que puedan imprimir en esas impresoras.  
          Aqui tenemos el fichero <filename>/etc/printcap</filename> para el
          host <hostid>orchid</hostid> (usado en la secci&oacute;n <link  
          linkend="printing-advanced-header-pages-enabling">Habilitando las
            P&aacute;ginas de Encabezado</link>).  Ya cuenta con la entrada
          para la impresora <literal>teak</literal>; y hemos a&ntilde;adido 
          las entradas para las impresoras del host <hostid>rose</hostid>:</para>

        <programlisting>#
#  Fichero /etc/printcap para el host orchid - anadiendo impresoras 
#  (remotas) del host rose
#

#
#  teak es impresora local; esta conectada directamente a orchid:
#
teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\
        :lp=/dev/lpt0:sd=/var/spool/lpd/teak:mx#0:\
        :if=/usr/local/libexec/ifhp:\
        :vf=/usr/local/libexec/vfhp:\
        :of=/usr/local/libexec/ofhp:

#
#  rattan esta conectada a rose; envio de trabajos para rattan en rose:
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
        :lp=:rm=rose:rp=rattan:sd=/var/spool/lpd/rattan:

#
#  bamboo tambien esta conectada a rose:
#
bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
        :lp=:rm=rose:rp=bamboo:sd=/var/spool/lpd/bamboo:</programlisting>

        <para>Posteriormente, s&oacute;lo necesitamos crear los directorios
          para la cola de impresi&oacute;n en el host 
          <hostid>orchid</hostid>:</para>
              
        <screen>&prompt.root; <userinput>mkdir -p /var/spool/lpd/rattan /var/spool/lpd/bamboo</userinput>
&prompt.root; <userinput>chmod 770 /var/spool/lpd/rattan /var/spool/lpd/bamboo</userinput>
&prompt.root; <userinput>chown daemon:daemon /var/spool/lpd/rattan /var/spool/lpd/bamboo</userinput></screen>
              
        <para>Ahora los usuarios de <hostid>orchid</hostid> pueden imprimir en 
          <literal>rattan</literal> y <literal>bamboo</literal>.  Si, por
          ejemplo, un usuario en <hostid>orchid</hostid> teclea
              
          <screen>&prompt.user; <userinput>lpr -P bamboo -d sushi-review.dvi</userinput></screen>

          el sistema de cola de <application>LPD</application> en el host
          <hostid>orchid</hostid>, copiar&aacute; el trabajo al directorio
          de cola <filename>/var/spool/lpd/bamboo</filename> y notar&aacute;
          que se trata de un trabajo DVI.  Tan pronto como el host
          <hostid>rose</hostid> tenga espacio en el directorio de cola de
          impresi&oacute;n de <literal>bamboo</literal>, los dos
          <application>LPDs</application> transferir&aacute;n el fichero a
          <hostid>rose</hostid>.  El fichero quedar&aacute; en espera en
          la cola de <hostid>rose</hostid> hasta que sea impreso.  Este 
          ser&aacute; convertido de DVI a PostScript (dado que 
          <literal>bamboo</literal> es una impresora PostScript), en 
          <hostid>rose</hostid>.</para>
      </sect3>
      
      <sect3 id="printing-advanced-network-net-if">
        <title>Impresoras con Interfaces de Red para Secuencia de Datos</title>

        <para>Comunmente, cuando usted adquiere una tarjeta de red para 
          impresoras, puede obtener dos versiones: una que emula la cola
          de impresi&oacute;n (que son las de mayor valor), o bien, otra
          que simplemente le permite recibir datos tal como lo hace un
          puerto serial o paralelo (la versi&oacute; econ&oacute;mica).  Esta
          secci&oacute;n le explica como utilizar la versi&oacute;n
          econ&oacute;mica.  Para el uso de la versi&oacute;n de mayor
          valor, vea la secci&oacute;n <link
            linkend="printing-advanced-network-rm">Impresoras Instaladas en
            Hosts Remotos</link>.</para>
            
        <para>El formato del fichero <filename>/etc/printcap</filename> le
          permite especificar que puerto serial o paralelo utilizar, y (en
          caso de que utilice un puerto serial) la velocidad de baudio, si
          utiliza control de flujo, retraso en tabulador, conversi&oacute;n 
          de nuevas l&iacute;neas y m&aacute;s.  Pero no hay manera de indicar
          la conexi&oacute;n de una impresora que escucha en un puerto TCP/IP
          u otro puerto de red.</para>
            
        <para>Para efecto de enviar datos a una impresora en red, usted necesita
          crear un programa de comunicaci&oacute;n que pueda ser llamado desde
          un filtro de texto o de conversi&oacute;n.  Aqui tenemos un ejemplo
          de dicho programa: el script <command>netprint</command>, que toma
          todos los datos de la entrada estandar y los envia a un impresora
          conectada a la red.  Hemos especificado el nombre de host de la 
          impresora como primer argumento y el puerto al que esta conectado
          como segundo argumento, en <command>netprint</command>.  Note que
          este tipo de soporte s&oacute;lo trabaja en una v&iacute;a (de FreeBSD
          a la impresora); gran cantidad de impresoras cuentan con soporte de
          ambas v&iacute;as, y quiz&aacute;s desee tomar ventaja de esto (para
          obtener estatus de impresi&oacute;n, contabilidad, desempe&ntilde;o,
          etc.).</para>

        <programlisting>#!/usr/bin/perl
#
#  netprint - Filtro de texto para impresoras en red
#  Instalado en /usr/local/libexec/netprint
#
$#ARGV eq 1 || die "Usage: $0 &lt;printer-hostname&gt; &lt;port-number&gt;";

$printer_host = $ARGV[0];
$printer_port = $ARGV[1];

require 'sys/socket.ph';

($ignore, $ignore, $protocol) = getprotobyname('tcp');
($ignore, $ignore, $ignore, $ignore, $address)
    = gethostbyname($printer_host);

$sockaddr = pack('S n a4 x8', &amp;AF_INET, $printer_port, $address);

socket(PRINTER, &amp;PF_INET, &amp;SOCK_STREAM, $protocol)
    || die "Can't create TCP/IP stream socket: $!";
connect(PRINTER, $sockaddr) || die "Can't contact $printer_host: $!";
while (&lt;STDIN&gt;) { print PRINTER; }
exit 0;</programlisting>
            
        <para>Una vez hecho este script, podemos utilizarlo en varios filtros.  
          Supongamos que contamos con la impresora de l&iacute;nea Diablo 750-N
          conectada a la red.  La impresora acepta datos para impresi&oacute;n 
          en el puerto 5100.  El nombre de host que tiene la impresora es
          scrivener.  El filtro de texto a usar quedar&iacute;a de la
          siguiente manera:</para>

        <programlisting>#!/bin/sh
#
#  diablo-if-net - Filtro de texto para la impresora Diable en `scrivener' usando
#  el puerto 5100.   Instalado en /usr/local/libexec/diablo-if-net
#
exec /usr/libexec/lpr/lpf "$@" | /usr/local/libexec/netprint scrivener 5100</programlisting>
      </sect3>
    </sect2>
    
    <sect2 id="printing-advanced-restricting">
      <title>Restricci&oacute;n del Uso de la Impresora</title>
      
      <indexterm>
        <primary>impresora</primary>
        <secondary>restringiendo el acceso a</secondary>
      </indexterm>
      <para>Esta secci&oacute;n le da informaci&oacute;n sobre la 
        restricci&oacute;n en el uso de la impresora.  El sistema de
        <application>LPD</application> le permite controlar quien puede
        acceder a la impresora de ambas formas, local y remota, si los 
        usuarios pueden imprimir m&uacute;ltiples copias, que tan grandes
        pueden ser los trabajos de impresi&oacute;n, y limitar el tama&ntilde;o
        de la cola de impresi&oacute;n.</para>
      
      <sect3 id="printing-advanced-restricting-copies">
        <title>Restricci&oacute;n de Copias Multiples</title>

        <para>El sistema de <application>LPD</application> le facilita a los
          usuarios el imprimir m&uacute;ltiples copias de un mismo fichero.  Los
          usuarios pueden usar (por ejemplo) <command>lpr -#5</command> para
          imprimir 5 copias de cada fichero enviado.  El hecho de que esto sea
          bueno o no es algo que depende de usted.</para>
            
        <para>Si usted siente que las copias m&uacute;ltiples causan trabajo 
          inecesario a su impresora, puede deshabilitar la opci&oacute;n
          <option>-#</option> de &man.lpr.1;, al incluir la caracter&iacute;stica
          <literal>sc</literal> en su fichero <filename>/etc/printcap</filename>.
          Cuando los usuarios utilicen la opci&oacute;n <option>-#</option> al
          momento de imprimir, ver&aacute;n el siguiente aviso:</para>
              
        <screen>lpr: multiple copies are not allowed</screen>


        <para>Recuerde que si usted a configurado una impresora para su 
          acceso de forma remota (vea la secci&oacute;n <link  
          linkend="printing-advanced-network-rm">Impresoras
            Instaladas en Hosts Remotos</link>), ser&aacute; necesario que
          tambi&eacute;n cuente con la caracter&iacute;stica <literal>sc</literal>
          en el fichero <filename>/etc/printcap</filename> del host remoto, o 
          bien, los usuarios aun podr&aacute;n hacer uso de la opci&oacute;n
          <option>-#</option>, al usar un host diferente.</para>

        <para>Aqui presentamos un ejemplo.  Este es un ejemplo del fichero 
          <filename>/etc/printcap</filename>, del host <hostid>rose</hostid>.  
          La impresora <literal>rattan</literal> es <quote>de batalla</quote> 
          por lo que permitiremos las copias m&uacute;ltiples, pero la
          impresora laser <literal>bamboo</literal> es m&aacute;s delicada por 
          lo que vamos a deshabilitar las copias m&uacute;ltiples, al
          a&ntilde;adir la caracter&iacute;stica <literal>sc</literal>:</para>

        <programlisting>#
#  Fichero /etc/printcap del host rose - restringe copias multiples en bamboo
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
        :sh:sd=/var/spool/lpd/rattan:\
        :lp=/dev/lpt0:\
        :if=/usr/local/libexec/if-simple:

bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
        :sh:sd=/var/spool/lpd/bamboo:sc:\
        :lp=/dev/ttyd5:fs#0x82000e1:xs#0x820:rw:\
        :if=/usr/local/libexec/psif:\
        :df=/usr/local/libexec/psdf:</programlisting>
            
        <para>Ahora, tambi&eacute; debemos a&ntilde;adir la caracter&iacute;stica
          <literal>sc</literal> en el fichero <filename>/etc/printcap</filename> 
          del host <hostid>orchid</hostid> (y ya que estamos en eso, 
          deshabiltemos las copias m&uacute;ltiples para la impresora
          <literal>teak</literal>):</para>

        <programlisting>#
#  Fichero /etc/printcap del host orchid - sin copias multiples para la
#  impresora local teak o impresora remota bamboo
teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\
        :lp=/dev/lpt0:sd=/var/spool/lpd/teak:mx#0:sc:\
        :if=/usr/local/libexec/ifhp:\
        :vf=/usr/local/libexec/vfhp:\
        :of=/usr/local/libexec/ofhp:

rattan|line|diablo|lp|Diablo 630 Line Printer:\
        :lp=:rm=rose:rp=rattan:sd=/var/spool/lpd/rattan:

bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
        :lp=:rm=rose:rp=bamboo:sd=/var/spool/lpd/bamboo:sc:</programlisting>
            
        <para>Al incluir la caracter&iacute;stica <literal>sc</literal>, hemos
          prevenido el uso de <command>lpr -#</command>, pero eso no previene 
          el uso de &man.lpr.1; gran cantidad de veces, o el env&iacute;o del
          mismo trabajo varias veces, tal como:</para>
              
        <screen>&prompt.user; <userinput>lpr forsale.sign forsale.sign forsale.sign forsale.sign forsale.sign</userinput></screen>
              
        <para>Existen gran cantidad de formas para prevenir este abuso 
          (incluyendo el ignorarlo), que usted queda en libertad de explorar.
          </para>
      </sect3>
      
      <sect3 id="printing-advanced-restricting-access">
        <title>Restricci&oacute;n de Acceso a Impresoras</title>

        <para>Usted puede controlar quien puede imprimir y en que impresoras, 
          haciendo uso del mecanismo de grupos de Unix y de la 
          caracter&iacute;stica <literal>rg</literal> en el fichero
          <filename>/etc/printcap</filename>.  Simplemente a&ntilde;ada en un
          grupo determinado, a los usuarios que desea puedan imprimir en cierta
          impresora, y despu&eacute;s a&ntilde;ada el nombre del grupo a la
          caracter&iacute;stica <literal>rg</literal>.</para>
            
        <para>Todos los usuarios que no pertenezcan a este grupo (incluyendo al
          superusuario (<username>root</username>)), y que deseen imprimir en la
          impresora controlada, les aparecer&aacute; este mensaje:
          
          <errorname>lpr: Not a member of the restricted group</errorname></para>

        <para>De la misma forma que hicimos con <literal>sc</literal> (la
          eliminaci&oacute;n de copias m&uacute;ltiples), con 
          <literal>rg</literal> deber&acute; indicarla en los hosts remotos que
          tengan acceso a sus impresoras si lo cree conveniente (vea la
          secci&oacute;n <link
            linkend="printing-advanced-network-rm">Impresoras Instaladas en
            Hosts Remotos</link>).</para>
            
        <para>Por ejemplo, vamos a permitir que cualquiera imprima en 
          <literal>rattan</literal>, pero solo aquellos que forman parte del 
          grupo <literal>artistas</literal> podr&aacute;n usar la impresora 
          <literal>bamboo</literal>.  Nuevamente tenemos el fichero
          <filename>/etc/printcap</filename> para el host
          <hostid>rose</hostid>:</para>

        <programlisting>#
#  Fichero /etc/printcap del host rose - grupo restringido para bamboo
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
        :sh:sd=/var/spool/lpd/rattan:\
        :lp=/dev/lpt0:\
        :if=/usr/local/libexec/if-simple:

bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
        :sh:sd=/var/spool/lpd/bamboo:sc:rg=artistas:\
        :lp=/dev/ttyd5:fs#0x82000e1:xs#0x820:rw:\
        :if=/usr/local/libexec/psif:\
        :df=/usr/local/libexec/psdf:</programlisting>

        <para>Vamos a dejar de lado el otro fichero 
          <filename>/etc/printcap</filename> de ejemplo (el del host
          <hostid>orchid</hostid>).  Claro esta, que cualquier usuario desde
          <hostid>orchid</hostid> puede imprimir en <literal>bamboo</literal>.  
          En este caso podriamos aceptar s&oacute;lo ciertos accesos desde 
          <hostid>orchid</hostid>, y esto les dar&iacute;a acceso a la impresora.
          O no.</para>

        <note>
          <para>S&oacute;lo puede haber un grupo restringido por impresora.</para>
        </note>
      </sect3>
      
      <sect3 id="printing-advanced-restricting-sizes">
        <title>Controlando el Tama&ntilde;o de los Trabajos Enviados</title>

        <indexterm><primary>trabajos de impresi&oacute;n</primary></indexterm>
        <para>Si usted cuenta con gran cantidad de usuarios accesando sus
		  impresoras, probablemente necesite establecer un l&iacute;mite
		  m&aacute;ximo en el tama&ntilde;o que deban tener los trabajos
		  enviados a imprimir.  Despu&eacute;s de todo, s&oacute;lo existe 
		  tanto espacio libre en el sistema de ficheros como el que se tiene
		  en los directorios de cola, y tambi&eacute;n usted debe asegurarse
		  de que exista el espacio suficiente para otros usuarios.</para>
            
        <indexterm>
          <primary>trabajos de impresi&oacute;n</primary>
          <secondary>controlando</secondary>
        </indexterm>
        <para>El sistema de <application>LPD</application>, le permite 
		  especificar un monto maximo de tama&ntilde;o en bytes para un trabajo,
		  con la caracter&iacute;stica <literal>mx</literal>.  Las unidades 
		  est&aacute;n indicadas en blques <literal>BUFSIZ</literal>, que son
		  de 1024 bytes.  Si usted le agrega un cero a esta 
		  caracter&iacute;stica, no habr&aacute; l&iacute;mite en el 
		  tama&ntilde;o de los trabajos que se puedan enviar a imprimir; por
		  otro lado, si no se especifica la caracter&iacute;stica 
		  <literal>mx</literal>, el l&iacute;mite por default ser&aacute; de 
		  1000 bloques.</para>

        <note>
          <para>El l&iacute;mite es v&aacute;lido para los 
		    <emphasis>ficheros</emphasis> del trabajo, y <emphasis>no</emphasis>
			para el tama&ntilde;o total del trabajo.</para>
        </note>

        <para>El sistema de <application>LPD</application> no rehusar&aacute; 
		  imprimir los trabajos que exceden el l&iacute;mite, en su lugar
		  proceder&aacute; con la impresi&oacute;n hasta el l&iacute;mite
		  indicado.  El resto del trabajo quedar&aacute; descartado.  El hecho
		  de que este comportamiento sea correcto o no, aun es tema de
		  debate.</para>
            
        <para>Ahora permitamonos incluir l&iacute;mites a nuestras impresoras
          de ejemplo <literal>rattan</literal> y <literal>bamboo</literal>.  En
          virtud de que esos <quote>artistas</quote> tienden a imprimir grandes
          trabajos en PostScript, los vamos a limitar a cinco megabytes.  En la
          impresora de l&iacute;nea no vamos a especificar l&iacute;mite:</para>

        <programlisting>#
#  Fichero /etc/printcap del host rose
#

#
#  Sin limite de tamano en el trabajo:
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
        :sh:mx#0:sd=/var/spool/lpd/rattan:\
        :lp=/dev/lpt0:\
        :if=/usr/local/libexec/if-simple:

#
#  Con limite de cinco megabytes:
#
bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
        :sh:sd=/var/spool/lpd/bamboo:sc:rg=artists:mx#5000:\
        :lp=/dev/ttyd5:fs#0x82000e1:xs#0x820:rw:\
        :if=/usr/local/libexec/psif:\
        :df=/usr/local/libexec/psdf:</programlisting>

        <para>Nuevamente, los l&iacute;mites aplican s&oacute;lo para los 
          usuarios locales.  Si se han configurado las impresoras para su
          acceso de forma remota, los usuarios que accesen remotamente no
          tendr&aacute;n esta limitante.  Para efecto de que esto sea 
          v&aacute;lido en los usuarios remotos, deber&aacute; agregar la
          caracter&iacute;stica <literal>mx</literal> en el fichero
          <filename>/etc/printcap</filename> de los hosts remotos.  Vea la
          secci&oacute;n <link
            linkend="printing-advanced-network-rm">Impresoras Instaladas en 
            Hosts Remotos</link> para mayor informaci&oacute;n sobre la 
          instalaci&oacute;n de impresoras en red.</para>

        <para>Existe otra forma especializada para limitar el tama&ntilde;o
          de los trabajos, desde impresoras remotas, vea la secci&oacute;n <link 
            linkend="printing-advanced-restricting-remote">Restricci&oacute;n de
            Trabajos de Impresoras Remotas</link>.</para>
      </sect3>
      
      <sect3 id="printing-advanced-restricting-remote">
        <title>Restricci&oacute;n de Trabajos de Impresoras Remotas</title>

        <para>El sistema de cola de  <application>LPD</application> cuenta con 
          varios metodos para restringir la impresi&oacute;n de trabajos enviados
          por hosts remotos:</para>
            
        <variablelist>
          <varlistentry>
            <term>Restricciones del Host</term>

            <listitem>
              <para>Haciendo uso de los ficheros 
                <filename>/etc/hosts.equiv</filename> y 
                <filename>/etc/hosts.lpd</filename>, usted puede controlar
                el <application>LPD</application> local, para determinar
                de que hosts remotos se acepten conexiones.  En este
                caso, <application>LPD</application> verifica, en caso de una
                petici&oacute;n, que el host remoto se encuentre listado en
                agluno de estos dos ficheros.  Si no es as&iacute;,
		        <application>LPD</application> rechazar&aacute; la
		        petici&oacute;n.</para>
                    
              <para>El formato de estos ficheros es simple: el nombre de un host
                por l&iacute;nea.  Note que el fichero 
                <filename>/etc/hosts.equiv</filename> tambi&eacute;n es usado por
                el protocolo &man.ruserok.3;, y afecta programas como &man.rsh.1;
                y &man.rcp.1;, as&iacute; que tenga cuidado al editarlo.</para>
              
              <para>Por ejemplo, este es el fichero 
                <filename>/etc/hosts.lpd</filename> del host
                <hostid>rose</hostid>:</para>

              <programlisting>orchid
violet
madrigal.fishbaum.de</programlisting>

              <para>Esto significa que <hostid>rose</hostid> aceptar&aacute; 
                peticiones de los hosts <hostid>orchid</hostid>, 
                <hostid>violet</hostid> y 
                <hostid role="fqdn">madrigal.fishbaum.de</hostid>.  Si cualquier
                otro host intenta accesar el <application>LPD</application> de
                <hostid>rose</hostid>, el acceso ser&aacute; denegado.</para>
            </listitem>
          </varlistentry>
          
          <varlistentry>
            <term>Restricciones de Tama&ntilde;o</term>
            
            <listitem>
              <para>Usted puede controlar cuanto espacio libre se requiere, en el
                sistema de fichero donde se localiza el directorio del sistema
                de impresi&oacute;n.  Cree un fichero llamado 
                <filename>minfree</filename>, en el directorio local de la cola 
                de impresi&oacute;n.  En ese fichero a&ntilde;ada un numero que
                representa el numero de bloques libres que deben haber en el 
                disco (512 bytes), para efecto de aceptar un trabajo de forma
                remota.</para>
                    
              <para>Esto permite asegurarle que los usuarios remotos no llenaran
                su disco duro.  Esto tambi&eacute;n puede usarse para dar cierta
                prioridad a los usuarios locales: ya que podr&aacute; colocar sus
                trabajos en espera en la cola de impresi&oacute;n, hasta que la
                cantidad de espacio libre sea inferior a la indicada en el
                fichero <filename>minfree</filename>.</para>
                    
              <para>Por ejemplo, incluyamos  a <filename>minfree</filename> en
                la impresora <literal>bamboo</literal>.  Para esto, primero 
                examinamos el fichero <filename>/etc/printcap</filename>, para 
                encontrar los datos de la impresora; aqui tenemos la entrada de
                <literal>bamboo</literal>:</para>
                  
              <programlisting>bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
        :sh:sd=/var/spool/lpd/bamboo:sc:rg=artists:mx#5000:\
        :lp=/dev/ttyd5:fs#0x82000e1:xs#0x820:rw:mx#5000:\
        :if=/usr/local/libexec/psif:\
        :df=/usr/local/libexec/psdf:</programlisting>

              <para>El directorio de la cola de impresi&oacute;n es indicado por 
                la caracter&iacute;stica <literal>sd</literal>.  Vamos a dejar 
                tres megabytes (que son 6144 bloques de disco) como espacio libre
                que debe existir en el sistema de ficheros, para que 
                <application>LPD</application> acepte trabajos remotos:</para>
                  
              <screen>&prompt.root; <userinput>echo 6144 &gt; /var/spool/lpd/bamboo/minfree
              </userinput></screen>
            </listitem>
          </varlistentry>
          
          <varlistentry>
            <term>Restricciones por Usuario</term>
            
            <listitem>
              <para>Usted puede controlar que usuarios remotos pueden imprimir en
                impresoras locales, al incluir la caracter&iacute;stica 
                <literal>rs</literal> en <filename>/etc/printcap</filename>.  
                Cuando <literal>rs</literal> aparece en la entrada de una 
                impresora que esta conectada localmente, 
                <application>LPD</application> aceptar&aacute; trabajos de 
                usuarios remotos, <emphasis>siempre y cuando</emphasis> el 
                usuario que ha enviado el trabajo, tenga alguna cuenta, con el
                mismo nombre de usuario en el host local.  De otra forma
                <application>LPD</application> no har&aacute; el trabajo.</para>
                    
              <para>Esta caracter&iacute;stica es particularmente &uacute;til en
                medios donde (por ejemplo) existen varias areas que comparten 
                una red, y algunos usuarios traspasan las fronteras
                departamentales.  Al otorgarles una cuenta en su sistema, pueden
                hacer uso de sus impresoras, desde su propio departamento de
                sistemas.  Si solo desea permitirles hacer uso de sus impresoras
                y <emphasis>no</emphasis> de los recursos de su sistema, puede
                asignarles cuentas <quote>tontas</quote> (token accounts), que 
                no cuentan con un directorio home y con un un shell inservible
                como <filename>/usr/bin/false</filename>.</para>
            </listitem>
          </varlistentry>
        </variablelist>
      </sect3>
    </sect2>
    
    <sect2 id="printing-advanced-acct">
      <title>Contabilidad del Uso de la Impresora</title>
          
      <indexterm>
        <primary>contabilidad</primary>
        <secondary>impresora</secondary>
      </indexterm>
      <para>As&iacute; que usted requiere de cobrar por las impresiones. 
        &iquest;Y por qu&eacute; no?, el papel y la tinta cuestan dinero.  Y
        tambi&eacute;n est&aacute;n los costos de mantenimiento&mdash;las 
        impresoras estan llenas de partes m&oacute;viles que tienden a
        descomponerse.  Usted ha analizado sus impresoras, los patrones de
        uso, y costos de mantenimiento y ha llegado a un costo 
        por-p&aacute;gina (o por-pie, por-metro, o por-loquesea).  Ahora bien,
        &iquest;C&oacute;mo empezar a llevar una contabilidad de las
        impresiones?.</para>
          
      <para>Bueno, la mala noticia es que <application>LPD</application> no
        provee de mucha ayuda en esta area.  El conteo depende en gran parte
        en el tipo de impresora con que usted cuenta, el formato en que se
        imprime y de <emphasis>sus</emphasis> requerimientos para cobrar por
        el uso de la impresora.</para>
      
      <para>Para implementar un contador, deber&aacute; modificar el filtro de
        texto (para cobrar por impresiones en texto plano) y los filtros de
        conversi&oacute;n (para cobrar por impresiones en otro formato), para
        efecto de llevar un conteo de p&aacute;ginas o peticiones a la impresora
        para imprimir.  Esto no podr&aacute; llevarse a cabo con un simple filtro
        de salida, dado que no puede llevar un conteo.  Vea la secci&oacute;n 
        <link linkend="printing-advanced-filter-intro">Filtros</link>.</para>
          
      <para>En t&eacute;rminos generales existen dos formas de hacer esto:</para>
      
      <itemizedlist>
        <listitem>
          <para>El <emphasis>contador periodico</emphasis> es la forma m&aacute;s
            comun, quiz&aacute;s por que es la m&aacute;s sencilla.  Cuando 
            alguien envia una impresi&oacute;n, el filtro registra el usuario, 
            host y numero de p&aacute;ginas en un fichero contador.  Cada mes, 
            semestre, a&ntilde;o o cualquier periodo de tiempo que prefiera, 
            puede revisar estos ficheros, de tal forma que sepa cuantas 
            impresiones ha realizado cada usuario y poder cobrar por las mismas. 
            Despu&eacute;s de limpiar estos ficheros puede empezar un nuevo 
            periodo de cero.</para>
        </listitem>
              
        <listitem>
          <para>El <emphasis>contador por tiempo</emphasis> es menos conocido,
            quiz&aacute;s por su dificultad de uso.  Este metodo hace que sus
            filtros cobren al usuario por sus impresiones, en cuanto hacen uso 
            de las impresoras.  Como las cuotas de disco, el conteo es inmediato.
            Con esto, usted puede prevenir que usuarios impriman cuando sus 
            cuentas est&aacute;n en numeros rojos, y quiz&aacute;s en cierto modo
            proveer a sus usuarios de una forma de verificar sus <quote>cuotas de
            impresi&oacute;n</quote>.  Pero este metodo requiere de uso de bases
            de datos, para dar seguimiento a los usuarios y sus cuotas.</para>
        </listitem>
      </itemizedlist>
      
      <para>El sistema de cola de <application>LPD</application> cuenta con 
        soporte para ambos metodos: en virtud de que usted debe proveer los 
        filtros (bueno, casi todo el tiempo), tambi&eacute;n debe proveer del
        c&oacute;digo para el contador.  Pero hay un lado positivo: usted cuenta
        con una enorme flexibilidad en cuanto a metodos de contabilidad se
        refiere.  Por ejemplo, puede utilizar un contador periodico o por
        tiempo.  Usted selecciona que informaci&oacute;n debe quedar registrada:
        nombre de usuario, nombre del host, tipo de trabajo, p&aacute;ginas
        impresas, medidas del papel usado, tiempo que duro en imprimir el 
        trabajo, y as&iacute; sucesivamente.  Y para hacer esto, s&oacute;lo debe
        modificar sus filtros.</para>
          
      <sect3>
        <title>Contabilidad de Impresiones R&aacute;pida y Sucia</title>

        <para>FreeBSD cuenta con dos programas que pueden auxiliarlo para 
          instalar un simple contador periodico.  Ellos son; el filtro de
          texto <command>lpf</command>, descrito en la secci&oacute;n <link  
          linkend="printing-advanced-lpf">lpf: un Filtro de Texto</link>, y
          &man.pac.8;, un programa para reunir y totalizar la informaci&oacute;n
          de los ficheros de contador de impresiones.</para>

        <para>Como se menciono en la secci&oacute;n de filtros (<link
            linkend="printing-advanced-filters">Como Trabajan los Filtros</link>), 
	      <application>LPD</application> inicia los filtros de texto y 
	      conversi&oacute;n con el nombre del fichero contador a usar en la
	      l&iacute;nea de comando del filtro.  Los filtros pueden usar este 
	      argumento para saber en donde registrar la informaci&oacute;n.  El
	      nombre de este fichero se indica en la caracter&iacute;stica
	      <literal>af</literal> del fichero <filename>/etc/printcap</filename>,
	      y si no se indica su ruta completa, se har&aacute; referencia al
	      directorio de la cola de impresi&oacute;n.</para>

        <para><application>LPD</application> inicia <command>lpf</command> con 
          los argumentos de alto y ancho del papel (tomados de 
          <literal>pw</literal> y <literal>pl</literal>).  <command>lpf</command>
          usa estos argumentos para determinar cuanto papel ser&aacute;
          necesario.  Una vez enviado el fichero a impresi&oacute;n, se escribe
          en el fichero contador un registro.  Este registro es as&iacute;:</para>

        <programlisting>2.00 rose:andy
3.00 rose:kelly
3.00 orchid:mary
5.00 orchid:mary
2.00 orchid:zhang</programlisting>
            
        <para>Deber&aacute; usar un fichero contador para cada impresora, dado 
          que <command>lpf</command> no cuenta con una l&oacute;gica de 
          bloqueo de ficheros incluida, y dos <command>lpf</command> escribiendo
          al mismo tiempo en un fichero podrian corromperlo.  Una forma segura
          para garantizar el uso de ficheros distintos por impresora, es usar
          <literal>af=acct</literal> en el fichero 
          <filename>/etc/printcap</filename>.  De esta forma contaremos con el 
          fichero contador de cada impresora por separado, en el directorio de la
          cola de impresi&oacute;n, en un fichero llamado 
          <filename>acct</filename>.</para>
            
        <para>Cuando sea el momento de cobrar a los usuraios, ejecute el programa
          &man.pac.8;.  S&oacute;lo dirijase al directorio de cola, del cual 
          desea recabar la informaci&oacute;n y teclee <literal>pac</literal>.  
          Usted obtendr&aacute; un resumen similar al siguiente:</para>
            
        <screen>  Login               pages/feet   runs    price
orchid:kelly                5.00    1   $  0.10
orchid:mary                31.00    3   $  0.62
orchid:zhang                9.00    1   $  0.18
rose:andy                   2.00    1   $  0.04
rose:kelly                177.00  104   $  3.54
rose:mary                  87.00   32   $  1.74
rose:root                  26.00   12   $  0.52

total                     337.00  154   $  6.74</screen>
              
        <para>Estos son los argumentos que puede pasar a &man.pac.8;:</para>

        <variablelist>
          <varlistentry>
            <term><option>-P<replaceable>impresora</replaceable></option></term>

            <listitem>
              <para>De que <replaceable>impresora</replaceable> hacer el resumen.
                Esta opci&oacute;n funciona, solo si existe una ruta absoluta, en la
                caracter&iacute;stcia <literal>af</literal> del fichero 
                <filename>/etc/printcap</filename>.</para>
            </listitem>
          </varlistentry>
          
          <varlistentry>
            <term><option>-c</option></term>
            
            <listitem>
              <para>Ordenar la salida por costo en lugar de por usuario 
                alfabeticamente.</para>
            </listitem>
          </varlistentry>
          
          <varlistentry>
            <term><option>-m</option></term>
            
            <listitem>
              <para>Ignorar el nombre de host.  Con esta opci&oacute;n, 
                el usuario <username>smith</username> del host 
                <hostid>alpha</hostid>, es el mismo usuario 
                <username>smith</username> del host <hostid>gamma</hostid>.  Sin
                esta opci&oacute;n, se consideran usuarios diferentes.</para>
            </listitem>
          </varlistentry>
          
          <varlistentry>
            <term><option>-p<replaceable>precio</replaceable></option></term>
            
            <listitem>
              <para>Computar cargos con tal <replaceable>precio</replaceable>
                en d&oacute;lares por p&aacute;gina o por pie, en lugar del
                precio tomado de la caracter&iacute;stica <literal>pc</literal>
                del fichero <filename>/etc/printcap</filename>, o dos centavos 
                (precio por default).  Puede indicar el 
                <replaceable>precio</replaceable> como un numero de punto 
                flotante.</para>
            </listitem>
          </varlistentry>
          
          <varlistentry>
            <term><option>-r</option></term>
            
            <listitem>
              <para>Invertir el orden de acomodo.</para>
            </listitem>
          </varlistentry>
          
          <varlistentry>
            <term><option>-s</option></term>
            
            <listitem>
              <para>Crear un fichero de resumen y reiniciar el fichero contador.
                </para>
            </listitem>
          </varlistentry>
          
          <varlistentry>
            <term><replaceable>nombre</replaceable>
              <replaceable>&hellip;</replaceable></term>
            
            <listitem>
              <para>Imprimir la informaci&oacute;n del usuario
                <replaceable>nombre</replaceable> unicamente.</para>
            </listitem>
          </varlistentry>
        </variablelist>

        <para>En el resumen que genera &man.pac.8; por default, podr&aacute;
          observar el numero de p&aacute;ginas impresas por cada usuario desde
          diferentes hosts.  Si en su sitio, el host no es importante (por que
          los usuarios pueden usar cualquier host), ejecute 
          <command>pac -m</command>, para producir el siguiente resumen:</para>
              
        <screen>  Login               pages/feet   runs    price
andy                        2.00    1   $  0.04
kelly                     182.00  105   $  3.64
mary                      118.00   35   $  2.36
root                       26.00   12   $  0.52
zhang                       9.00    1   $  0.18

total                     337.00  154   $  6.74</screen>
              

        <para>Para calcular el monto adeudado, &man.pac.8; utiliza la
          caracter&iacute;stica <literal>pc</literal> del fichero
          <filename>/etc/printcap</filename> (que por default utiliza 200, o
          2 centavos por p&aacute;gina).  Especifique en cientos de centavos
          el precio a cobrar por p&aacute;gina o por pie, que desea cobrar, en 
          esta caracter&iacute;stica.  Puede reemplazar este valor cuando ejecuta
          &man.pac.8; con la opci&oacute;n <option>-p</option>.  Las unidades de
          esta opci&oacute;n estan expresadas en d&oacute;lares, y no en cientos
          de centavos.  Por ejemplo,
              
          <screen>&prompt.root; <userinput>pac -p1.50</userinput></screen>
              
          hace que cada p&aacute;gina tenga un costo de un dolar con cincuenta 
          centavos.  Realmente se puede exceder en las utilidades usando esta
          opci&oacute;n.</para>

        <para>Finalmente, ejecutando <command>pac -s</command> puede guardar la
          el resumen, en un fichero, que es nombrado al igual que el fichero
          contador de la impresora, pero con <literal>_sum</literal> al 
          inicio del fichero.  Posteriormente reinicia el fichero contador.  
          Cuando ejecuta &man.pac.8; nuevamente, lee el fichero resumen, para 
          obtener los totales y posteriormente a&ntilde;ade la informaci&oacute;n
          del fichero contador normal.</para>
      </sect3>
      
      <sect3>
        <title>&iquest;C&oacute;mo Contabilizar las P&aacute;ginas
          Impresas?</title>

        <para>Para efecto de que pueda obtener un conteo m&aacute;s cercano a la
          realidad, necesita poder determinar cuanto papel utiliza cada trabajo. 
          Este es el problema esencial del conteo de impresiones.</para>
            
        <para>Para impresiones en texto, este problema no es tan dif&iacute;cil 
          de resolver: puede contabilizar el numero de l&iacute;neas que tiene un
          trabajo y dividirlas entre el numero de l&iacute;neas totales por
          p&aacute;gina que maneja la impresora.  No olvide contabilizar los
          retrocesos del fichero que sobreimprimen l&iacute;neas, o de las largas
          l&iacute;neas l&oacute;gicas que se justifican en en una o m&aacute;s
          l&iacute;neas f&iacute;sicas.</para>
            
        <para>El filtro de texto <command>lpf</command> (introducido en <link  
            linkend="printing-advanced-lpf">lpf: un Filtro de Texto</link>) toma
          en cuenta todas estas cosas cuando hace el conteo.  Si usted esta
          escribiendo un filtro de texto que requiere contabilizar, quiz&aacute;s
          desee examinar el c&oacute;digo fuente del <command>lpf</command>.
          </para>
            
        <para>Pero, &iquest;C&oacute;mo manejar otros formatos?</para>

        <para>Bueno, para conversiones DVI-a-LaserJet o DVI-a-PostScript, puede
          hacer que su filtro pase la informaci&oacute;n de salida a 
          <command>dvilj</command> o <command>dvips</command> y ver cuantas
          p&aacute;ginas fueron convertidas.  Puede hacer cosas similares con
          otros formatos y filtros de conversi&oacute;n.</para>

        <para>Pero estos metodos sufren del hecho de que la impresora puede no
          imprimir estas p&aacute;ginas.  Po ejemplo, se pueden atorar, acabarse 
          la tinta, o explotar&mdash;y el usuario de todas formas se le 
          cobrar&aacute;.</para>
            
        <para>Entonces, &iquest;qu&eacute; puede hacer?</para>

        <para>S&oacute;lo existe una forma <emphasis>segura</emphasis> de llevar
          un conteo <emphasis>confiable</emphasis>.  Adquiera una impresora que
          pueda indicarle cuanto papel utiliza, y conectela por medio de un
          puerto serial o en red.  Casi todas las impresoras PostScript cuentan
          con soporte para esto.  Existen otras marcas u modelos que 
          tambi&eacute;n cuentan con el soporte (por ejemplo, las impresoras en 
          red Imagen laser).  Modifique los filtros de estas impresoras para que
          lleven un conteo de las o&aacute;ginas impresas y que almacenen los
          registros basados en el valor <emphasis>only</emphasis>.  No se 
          requiere de un conteo de l&iacute;neas o de examinar el fichero de
          errores.</para>
            
        <para>Claro esta que usted puede ser muy generoso y no cobrar por las
          impresiones.</para>
      </sect3>
    </sect2>
  </sect1>

  <sect1 id="printing-using">
    <title>Uso de las Impresoras</title>
    
    <indexterm>
      <primary>impresora</primary>
      <secondary>uso</secondary>
   </indexterm>
    <para>Esta secci&oacute;n le indica como usar las impresoras que ha instalado
      con FreeBSD.  Aqui tenemos los comandos de usuario mas comunes:</para>

    <variablelist>
      <varlistentry>
	<term>&man.lpr.1;</term>

	<listitem>
	  <para>Imprime trabajos</para>
	</listitem>
      </varlistentry>
      
      <varlistentry>
	<term>&man.lpq.1;</term>

	<listitem>
	  <para>Verifica los trabajos pendientes</para>
	</listitem>
      </varlistentry>
      
      <varlistentry>
	<term>&man.lprm.1;</term>

	<listitem>
	  <para>Elimina un trabajo de la cola de impresi&oacute;n</para>
	</listitem>
      </varlistentry>
    </variablelist>
    
    <para>Tambi&eacute;n se cuenta con un comando de administraci&oacute;n, 
      &man.lpc.8;, descrito en la secci&oacute;n <link linkend="printing-lpc">
      Administraci&oacute;n de la Cola de Impresi&oacute;n de
      <application>LPD</application></link>, usado para controlar las
      impresoras y sus peticiones.</para>

    <para>Las tres opciones &man.lpr.1;, &man.lprm.1;, y &man.lpq.1;, aceptan el
      argumento <option>-P<replaceable>impresora</replaceable></option> para 
      especificar en que impresora realizar la impresi&oacute;n/petici&oacute;n,
      de acuerdo a lo indicado en <filename>/etc/printcap</filename>.  Esto le
      permite imprimir, remover o consultar los trabajos en varias impresoras.  
      Si no usa el argumento <option>-P</option>, estos comandos haran uso de la
      impresora especificada en la variable de entorno <envar>PRINTER</envar>.  
      Finalmente, si no cuenta con la variable de entorno <envar>PRINTER</envar>
      definida, estos comandos utilizar&aacute;n la impresora por default, que 
      es <literal>lp</literal>.</para>

    <para>Por lo tanto, el termino <emphasis>impresora por default</emphasis>, 
      hace referencia a la impresora definida en la variable de entorno 
      <envar>PRINTER</envar>, o en su defecto a la impresora nombrada
      <literal>lp</literal>, cuando no este definida la variable de entorno
      <envar>PRINTER</envar>.</para>
    
    <sect2 id="printing-lpr">
      <title>Trabajos de Impresi&oacute;n</title>
      
      <para>Para imprimir un fichero, teclee:</para>
      
      <screen>&prompt.user; <userinput>lpr <replaceable>fichero</replaceable> <replaceable>...</replaceable></userinput></screen>
	    
      <indexterm><primary>imprimir</primary></indexterm>
      <para>Lo anterior imprimir&aacute; los ficheros nombrados, en la impresora
        por default.  Si no indica el nombre del fichero, &man.lpr.1; 
        leer&aacute; los datos a imprimir de la entrada estandar.  Por ejemplo, 
        este comando imprime algunos ficheros importantes del sistema:</para>

      <screen>&prompt.user; <userinput>lpr /etc/host.conf /etc/hosts.equiv</userinput></screen>
	    
      <para>Para seleccionar una impresora, teclee:</para>
		    
      <screen>&prompt.user; <userinput>lpr -P <replaceable>nombre-de-la-impresora</replaceable> <replaceable>fichero</replaceable> <replaceable>...</replaceable></userinput></screen>

      <para>Este ejemplo imprime una larga lista del directorio actual, en la
        impresora nombrada <literal>rattan</literal>:</para>
	    
      <screen>&prompt.user; <userinput>ls -l | lpr -P rattan</userinput></screen>
	    
      <para>En virtud de que no se le paso fichero alguno para imprimir a
        &man.lpr.1;, <command>lpr</command> toma los datos de la entrada
        estandar, que en este caso es la salida del comando <command>ls 
        -l</command>.</para>
      
      <para>EL comando &man.lpr.1; tambi&eacute;n puede aceptar gran variedad de
        opciones para controlar el formato, aplicar conversiones a los ficheros, 
        generar copias multiples, etc..  Para mayor informaci&oacute;n, vea la
        secci&oacute;n <link linkend="printing-lpr-options">Opciones de
        Impresi&oacute;n</link>.</para>
    </sect2>
    
    <sect2 id="printing-lpq">
      <title>Verificando los Trabajos</title>
      
      <indexterm><primary>trabajos de impresi&oacute;n</primary></indexterm>
      <para>Cuando usted utiliza &man.lpr.1; para imprimir, los datos que desea
        imprimir se colocan juntos en un paquete llamado <quote>trabajo de
        impresi&oacute;n</quote>, el cual es enviado al sistema de cola de
        <application>LPD</application>.  Cada impresora cuenta con un orden de
        impresi&oacute;n de trabajos, y su trabajo espera su turno en este orden,
        junto con otros trabajos suyos y de otros usuarios.  El criterio del 
        orden ser&aacute; los primeros-en-llegar son los primeros-en-salir.
        </para>

      <para>Para ver los trabajos pendientes de la impresora por default, teclee
        &man.lpq.1;.  Para una impresora en especial, use la opci&oacute;n
        <option>-P</option>.  Por ejemplo, el comando

	<screen>&prompt.user; <userinput>lpq -P bamboo</userinput></screen>

	   le muestra los trabajos pendientes de la impresora 
	   <literal>bamboo</literal>.  Aqui tenemos un ejemplo de la salida del
	   comando <command>lpq</command>:</para>
	    
      <screen>bamboo is ready and printing
Rank   Owner    Job  Files                              Total Size
active kelly    9    /etc/host.conf, /etc/hosts.equiv   88 bytes
2nd    kelly    10   (standard input)                   1635 bytes
3rd    mary     11   ...                                78519 bytes</screen>
	    
      <para>Esto muestra que hay tres trabajos en espera, para 
        <literal>bamboo</literal>.  El primer trabajo enviado por el usuario
        kelly, tiene asignado en <quote>numero de trabajo</quote> 9.  Cada
        trabajo en una impresora, se le asigna un numero &uacute;nico.  La
        mayor parte del tiempo puede ignorar el numero de trabajo, pero este
        ser&aacute; necesario en caso de que desee cancelar el trabajo; vea
        la secci&oacute;n <link linkend="printing-lprm">Eliminando 
        Trabajos</link> para mas detalles al respecto.</para>
	  
      <para>El trabajo numero nueve consiste en dos ficheros; al pasar varios 
        trabajos a &man.lpr.1;, estos son tratados como parte de un solo
        trabajo.  Este es el trabajo actual, activo (note la palabra 
        <literal>active</literal> bajo la columna <quote>Rank</quote>), que
        quiere decir, que la impresora debe estar imprimiendo este trabajo.  El
        segundo trabajo consiste en datos pasados al comando &man.lpr.1; por la 
        entrada estandar.  El tercer trabajo proviene del usuario 
        <username>mary</username>; que es un trabajo mucho mas grande.  La ruta 
        que esta tratando de ser descrita es muy larga, de tal forma que 
        &man.lpq.1; solo lo representa con tres puntos.</para>

      <para>La primer l&iacute;nea  de la salida de &man.lpq.1; tambi&eacute;n es
        de utilidad: esta le indica que esta haciendo la impresora en este 
        momento (o cuando menos, que es lo que <application>LPD</application> 
        piensa que la impresora esta haciendo).</para>

      <para>El comando &man.lpq.1; tambien cuenta con la opci&oacute;n 
        <option>-l</option>, para generar una salida mas detallada.  Aqui tenemos
        un ejemplo de <command>lpq -l</command>:</para>
	    
      <screen>waiting for bamboo to become ready (offline ?)
kelly: 1st				 [job 009rose]
       /etc/host.conf                    73 bytes
       /etc/hosts.equiv                  15 bytes

kelly: 2nd				 [job 010rose]
       (standard input)                  1635 bytes

mary: 3rd                                [job 011rose]
      /home/orchid/mary/research/venus/alpha-regio/mapping 78519 bytes</screen>
    </sect2>

    <sect2 id="printing-lprm">
      <title>Eliminando Trabajos</title>
      
      <para>Si cambia de parecer con respecto a imprimir un trabajo, puede 
        eliminarlo de los trabajos pendientes, con el comando &man.lprm.1;.  
        Incluso puede usar el comando &man.lprm.1; para elminar un trabajo
        activo, pero algunos o todos los demas trabajos aun seran impresos.
        </para>
	  
      <para>Para eliminar un trabajo de la impresoras por default, primero use
	    &man.lpq.1; para saber el numero de trabajo.  Despu&eacute; teclee:</para>
	  
      <screen>&prompt.user; <userinput>lprm <replaceable>numero-trabajo</replaceable></userinput></screen>
	    
      <para>Para eliminar un trabajo de un a impresora especifica, utilice la
        opci&oacute;n <option>-P</option>.  El siguiente comando elimina el
        trabajo numero 10 de los trabajos pendientes de la impresora
        <literal>bamboo</literal>:</para>
	    
      <screen>&prompt.user; <userinput>lprm -P bamboo 10</userinput></screen>
      
      <para>El comando &man.lprm.1; cuenta con algunas opciones:</para>
      
      <variablelist>
	<varlistentry>
	  <term>lprm -</term>

	  <listitem>
	    <para>Elimina todos los trabajos (de la impresora por default) y que le
	      pertenezcan a usted.</para>
	  </listitem>
	</varlistentry>

	<varlistentry>
	  <term>lprm <replaceable>usuario</replaceable></term>
	  
	  <listitem>
	    <para>Elimina todos los trabajos (de la impresora por default) que 
	      pertenecen a <replaceable>usuario</replaceable>.  El superusuario puede
	      eliminar trabajos de otros: usted solo puede eliminar sus trabajos.</para>
	  </listitem>
	</varlistentry>

	<varlistentry>
	  <term>lprm</term>
	  
	  <listitem>
	    <para>Cuando no se pasa ningun nombre de usuario, o <option>-</option>, 
	      en la l&iacute;nea de comando, &man.lprm.1; elimina el trabajo
	      activo de la impresora por default, si este le pertenece.  El 
	      superusuario puede eliminar cualquier trabajo activo.</para>
	  </listitem>
	</varlistentry>
      </variablelist>
      
      <para>Simplemente use la opci&oacute;n <option>-P</option> con las opciones
        comentadas, para que apliquen en una impresora especifica.  Por ejemplo,
        el siguiente comando elimina todos los trabajos pendientes del usuario 
        actual en la impresora <literal>rattan</literal>:</para>
	  
      <screen>&prompt.user; <userinput>lprm -P rattan -</userinput></screen>
	  
      <note>
	<para>SI usted esta trabajando en una red, el comando &man.lprm.1;, solo le
	  permitira eliminar trabajos del host del cual se enviaron dichos trabajos,
	  incluso si la impresora esta habilitada desde otros hosts.  La siguiente
	  secuencia de comandos demuestra esto:</para>
	      
	<screen>&prompt.user; <userinput>lpr -P rattan mifichero</userinput>
&prompt.user; <userinput>rlogin orchid</userinput>
&prompt.user; <userinput>lpq -P rattan</userinput>
Rank   Owner	  Job  Files                          Total Size
active seeyan	  12	...                           49123 bytes
2nd    kelly      13   mifichero                      12 bytes
&prompt.user; <userinput>lprm -P rattan 13</userinput>
rose: Permission denied
&prompt.user; <userinput>logout</userinput>
&prompt.user; <userinput>lprm -P rattan 13</userinput>
dfA013rose dequeued
cfA013rose dequeued
	</screen>
      </note>
    </sect2>
    
    <sect2 id="printing-lpr-options">
      <title>M&aacute;s alla del Texto Plano: Opciones de Impresi&oacute;n</title>
      
      <para>El comando &man.lpr.1; cuenta con soporte para multiples opciones que
        controlan el formato del texto, conversi&oacute;n de gr&aacute;ficos y 
        otros formatos, producci&oacute;n de copias multiples, manejo de los
        trabajos, y m&aacute;s.  Esta secci&oacute;n describe estas opciones.
        </para>
	  
      <sect3 id="printing-lpr-options-format">
	<title>Opciones de Formato y Conversi&oacute;n</title>

	<para>Las siguientes opciones de &man.lpr.1; controlan el formato de los
	  ficheros en el trabajo.  Utilice estas opciones si el trabajo no es de
	  texto plano o si desea dar formato al texto plano por medio de la 
	  utilidad &man.pr.1;.</para>
	    
        <indexterm><primary>TeX</primary></indexterm>
	<para>Por ejemplo, el siguiente comando imprime un fichero DVI (desde un 
	  sistema de escritura TeX) llamado <filename>fish-report.dvi</filename>
	  a la impresora <literal>bamboo</literal>:</para>
	      
	<screen>&prompt.user; <userinput>lpr -P bamboo -d fish-report.dvi</userinput></screen>
	      
	<para>Estas opciones aplican para todos los ficheros dentro del trabajo, por
	  lo que no debe mezclar (por decir) ficheros DVI y ditroff en el mismo
	  trabajo.  Para hacer esto, envie los trabajos a imprimir por separado, 
	  usando la opci&oacute;n que corresponda a cada trabajo.</para>

	<note>
	  <para>Todas estas opciones, excepto <option>-p</option> y <option>-T
	    </option> requieren de filtros de conversi&oacute;n instalados para la
	    impresora destino.  Por ejemplo, la opci&oacute;n <option>-d</option>
	    requiere de un filtro para DVI.  La secci&oacute;n <link
	      linkend="printing-advanced-convfilters">Filtros de Conversi&oacute;n
	    </link> le da m&aacute;s detalles al respecto.</para>
	</note>

	<variablelist>
	  <varlistentry>
	    <term><option>-c</option></term>

	    <listitem>
	      <para>Imprimir ficheros cifplot.</para>
	    </listitem>
	  </varlistentry>
	  
	  <varlistentry>
	    <term><option>-d</option></term>
	    
	    <listitem>
	      <para>Imprimir ficheros DVI.</para>
	    </listitem>
	  </varlistentry>
	  
	  <varlistentry>
	    <term><option>-f</option></term>
	    
	    <listitem>
	      <para>Imprimir ficheros de texto FORTRAN.</para>
	    </listitem>
	  </varlistentry>
	  
	  <varlistentry>
	    <term><option>-g</option></term>
	    
	    <listitem>
	      <para>Imprimir datos plot.</para>
	    </listitem>
	  </varlistentry>
	  
	  <varlistentry>
	    <term><option>-i<replaceable>numero</replaceable></option></term>
		  
	    <listitem>
	      <para>Sangrar la salida con el <replaceable>numero</replaceable> de
	        columnas indicado; si omite <replaceable>numero</replaceable>, el
	        numero ser&aacute; de 8 columnas.  Esta opci&oacute;n trabaja bien
	        solo con algunos filtros de conversi&oacute;n.</para>

	      <note>
		<para>No debe dejar espacios entre la opci&oacute;n <option>-i</option>
		  y el numero.</para>
	      </note>
	    </listitem>
	  </varlistentry>
	  
	  <varlistentry>
	    <term><option>-l</option></term>
	    
	    <listitem>
	      <para>Imprimir datos de texto literal, incluyendo caracteres de 
	        control.</para>
	    </listitem>
	  </varlistentry>
	  
	  <varlistentry>
	    <term><option>-n</option></term>
	    
	    <listitem>
	      <para>Imprimir datos ditroff (troff independiente del dispositivo).</para>
	    </listitem>
	  </varlistentry>
	  
	  <varlistentry>
	    <term>-p</term>
	    
	    <listitem>
	      <para>Formatear el texto plano con &man.pr.1; antes de imprimir.  Vea
		  &man.pr.1; para m&aacute;s informaci&oacute;n.</para>
	    </listitem>
	  </varlistentry>
	  
	  <varlistentry>
	    <term><option>-T <replaceable>titulo</replaceable></option></term>
	    
	    <listitem>
	      <para>Use <replaceable>titulo</replaceable> en la cabecera de
		  &man.pr.1;, en lugar del nombre del fichero.  Esta opci&oacute;n solo
		  tiene efecto cuando se usa con <option>-p</option>.</para>
	    </listitem>
	  </varlistentry>
	  
	  <varlistentry>
	    <term><option>-t</option></term>
	    
	    <listitem>
	      <para>Imprimir datos troff.</para>
	    </listitem>
	  </varlistentry>
	  
	  <varlistentry>
	    <term><option>-v</option></term>
	    
	    <listitem>
	      <para>Imprimir datos raster.</para>
	    </listitem>
	  </varlistentry>
	</variablelist>
		    
	<para>Aqui tenemos un ejemplo: este comando imprime una bonita y formateada
	  versi&oacute;n de la p&aacute;gina de ayuda de &man.ls.1;, en la impresora
	  por default:</para>
	    
	<screen>&prompt.user; <userinput>zcat /usr/share/man/man1/ls.1.gz | troff -t -man | lpr -t</userinput></screen>
	      
	<para>El comando &man.zcat.1; descomprime la fuente de la p&aacute;gina de
	  ayuda &man.ls.1; y lo pasa al comando &man.troff.1;, que le da formato y
	  crea la salida GNU troff, la cual es pasada a &man.lpr.1;, que envia el
	  trabajo a la cola de <application>LPD</application>.  Como usamos la
	  opci&oacute;n <option>-t</option> con &man.lpr.1;, el sistema de cola va
	  a convertir la salida GNU troff a datos entendibles para la impresora, 
	  cuando se imprime.</para>
      </sect3>
      
      <sect3 id="printing-lpr-options-job-handling">
	<title>Opciones para Manejar los Trabajos</title>

	<para>Las siguientes opciones de &man.lpr.1;, le indican a  
	  <application>LPD</application> que debe manejar el trabajo de 
	  una forma especial:</para>
      
	<variablelist>
	  <varlistentry>
	    <term>-# <replaceable>copias</replaceable></term>

	    <listitem>
	      <para>Producir un numero de <replaceable>copias</replaceable> de cada 
	      fichero en el trabajo, en vez de una sola copia.  Un administrador 
	      puede inhabilitar esta oprci&oacute;n para reducir el desgaste de la
	      impresora y alentar el uso de la fotocopiadora.  Vea la secci&oacute;n
		  <link
		  linkend="printing-advanced-restricting-copies">Restricc&oacute;n
		  de Copias Multiples</link>.</para>

	      <para>Este ejemplo imprime tres copias de 
		<filename>parser.c</filename> seguido de tres copias de 
		<filename>parser.h</filename> en la impresora por default:</para>
		      
	      <screen>&prompt.user; <userinput>lpr -#3 parser.c parser.h</userinput></screen>
	    </listitem>
	  </varlistentry>
	  
	  <varlistentry>
	    <term>-m</term>
	    
	    <listitem>
	      <para>Enviar correo despu&eacute;s de completar el trabajo.  Con esta 
	        opci&oacute;n, el sistema <application>LPD</application> enviara un
	        correo a su cuenta cuando termina de imprimir. En su mensaje, le
	        informar&aacute; si el trabajo termino con exito o si hubo algun
	        error, y (normalmente) que tipo de error fu&eacute;.</para>
	    </listitem>
	  </varlistentry>
	  
	  <varlistentry>
	    <term>-s</term>
	    
	    <listitem>
	      <para>No copie el fichero al directorio de la cola, en su lugar crear 
	        un enlace simbolico.</para>
		    
	      <para>Si usted esta imprimiendo un trabajo de gran tama&ntilde;o, 
	        quiz&aacute;s esta es una buena opci&oacute;n.  Esta opci&oacute;n le
	        ahorra espacio en el directorio de cola (donde su trabajo puede 
	        terminar con el espacio libre donde reside su directorio). Esta
	        opci&oacute;n tambi&eacute;n le ahorra tiempo, en virtud de que
	        <application>LPD</application> no tendr&aacute; que copiar todos y 
	        cada uno de los bytes del trabajo al directorio.</para>
		    
	      <para>Aunque esto tiene su inconveniente: dado que 
		    <application>LPD</application> estar&aacute; haciendo uso del fichero
		    original, no lo podr&aacute; modificar o eliminar hasta que termine
		    la impresi&oacute;n.</para>
	      
	      <note>
		<para>Si usted esta en un entorno de red, <application>LPD</application>
		  eventualmente copiar&aacute; ficheros del host local al host remoto,
		  as&iacute; que la opci&oacute;n <option>-s</option> le puede ahorrar
		  espacio solo en el directorio del host local, no en los remotos.  
		  Aun con esto, la opcion es de gran utilidad.</para>
	      </note>
	    </listitem>
	  </varlistentry>
	  
	  <varlistentry>
	    <term>-r</term>
	    
	    <listitem>
	      <para>Eliminar los ficheros del trabajo, una vez que hayan sido 
	        copiados al directorio de la cola, o despu&eacute;s de que hayan sido
	        impresos, cuando se use la opci&oacute;n <option>-s</option>.  Tenga
	        cuidado con esta opci&oacute;n!</para>
	    </listitem>
	  </varlistentry>
	</variablelist>
      </sect3>
	  
      <sect3 id="printing-lpr-options-misc">
	<title>Opciones de P&aacute;ginas de Encabezado</title>

	<para>Cuando alguna de las siguientes opciones son pasadas a &man.lpr.1;, 
	  ajustan el texto que normalmente aparece en la p&aacute;gina encabezado
	  del trabajo.  Si las p&aacute;ginas de encabezado son suprimidas, estas
	  opciones no tendr&aacute;n efecto alguno.  Vea la secci&oacute;n <link 
	   linkend="printing-advanced-header-pages">P&aacute;ginas de 
	   Encabezado</link> para m&aacute;s informaci&oacute;n sobre la
	 configuraci&oacute;n de las P&aacute;ginas de Encabezado.</para>
	    
	<variablelist>
	  <varlistentry>
	    <term>-C <replaceable>texto</replaceable></term>

	    <listitem>
	      <para>Reemplazar el nombre del host del encabezado con este 
		<replaceable>texto</replaceable>.  Normalmente el nombre del host es el
		nombre del host del cual se esta imprimiendo.</para>
	    </listitem>
	  </varlistentry>
	  
	  <varlistentry>
	    <term>-J <replaceable>texto</replaceable></term>
	    
	    <listitem>
	      <para>Reemplazar el nombre del trabajo en el encabezado con este 
		<replaceable>texto</replaceable>.  Normalmente el nombre del trabajo es 
		el nombre del primer fichero del trabajo, o <filename>stdin</filename> si
		esta imprimendo de la entrada estandar.</para>
	    </listitem>
	  </varlistentry>
	  
	  <varlistentry>
	    <term>-h</term>
	    
	    <listitem>
	      <para>No imprimir p&aacute;gina de encabezado.</para>
	      
	      <note>
		<para>En algunos sitios esta opci&oacute;n puede no tenere efecto alguno,
		  debido al metodo usado para generar las p&aacute;ginas de encabezado.
		  Vea la secci&oacute;n <link
		    linkend="printing-advanced-header-pages">P&aacute;ginas de
		    Encabezado</link> para m&aacute;s detalles.</para>
	      </note>
	    </listitem>
	  </varlistentry>
	</variablelist>
      </sect3>
    </sect2>
    
    <sect2 id="printing-lpc">
      <title>Administraci&oacute;n de la Cola de Impresi&oacute;n de
      <application>LPD</application></title>
      
      <para>Como administrador de sus impresoras, usted deber&aacute; 
        instalarlas, configurarlas, y probarlas.  Con el comando &man.lpc.8;
        usted podr&aacute; interactuar con las impresoras de una forma m&aacute;s
        completa.  Con &man.lpc.8; usted podr&aacute;</para>
      
      <itemizedlist>
	<listitem>
	  <para>Iniciar y detener las impresoras</para>
	</listitem>

	<listitem>
	  <para>Habilitar y deshabilitar sus trabajos pendientes</para>
	</listitem>

	<listitem>
	  <para>Modificar el orden de los trabajos pendientes.</para>
	</listitem>
      </itemizedlist>
      
      <para>Primero, una nota de terminolog&iacute;a: si una impresora es 
        <emphasis>detenida</emphasis>, no podr&aacute; contar con una cola de
        trabajos pendientes.  Los usuarios podr&aacute;n enviar sus trabajos,
        que quedar&aacute;n en espera hasta que la impresora se 
        <emphasis>iniciada</emphasis> o su cola de trabajos pendientes sea
        purgada.</para>
	  
      <para>Si la cola de trabajos pendientes es 
        <emphasis>deshabilitada</emphasis>, ningun usuario (excepto 
        <username>root</username>) podr&aacute; enviar trabajos a la impresora.  
        Una cola de trabajos pendientes <emphasis>habilitada</emphasis>, 
        permitir&aacute; el envio de trabajos.  Una impresora puede ser
        <emphasis>iniciada</emphasis> para una cola de trabajos que esta
        deshabilitada, en cuyo caso continuar&aacute; imprimiendo los trabajos de
        la cola de trabajos pendientes, hasta que ya no exista ninguno.</para>
	  
      <para>En general, usted debe de contar con privilegios de 
        <username>root</username> para hacer uso del comando &man.lpc.8;.  Los
        usuarios comunes solo pueden usar &man.lpc.8; para verificar el 
        estatus de una impresora y para reiniciar una impresora detenida.</para>

      <para>Aqui tenemos un resumen de los comandos de &man.lpc.8;.  La mayor 
        parte de estos comandos usan el argumento 
        <replaceable>nombre-impresora</replaceable> para indicarle en cual debe
        operar.  Como este argumento puede usar <literal>all</literal>, para
        indicarle que opere en todas las impresoras listadas en el fichero
	    <filename>/etc/printcap</filename>.</para>
      
      <variablelist>
	<varlistentry>
	  <term><command>abort
	      <replaceable>nombre-impresora</replaceable></command></term>

	  <listitem>
	    <para>Cancelar el trabajo actual y detener la impresora.  Los usuarios 
	      podr&aacute;n aun enviar sus trabajos si la cola de pendientes esta
	      habilitada.</para>
	  </listitem>
	</varlistentry>

	<varlistentry>
	  <term><command>clean
	      <replaceable>nombre-impresora</replaceable></command></term>
	  
	  <listitem>
	    <para>Eliminar ficheros viejos del directorio de cola de 
	      impresi&oacute;n.  Ocasionalmente, los ficheros que ya han sido
	      impresos no son eliminados correctamente por 
	      <application>LPD</application>, particularmente si hubo errores durante
	      la impresi&oacute;n o si se realizaron otros trabajos administrativos
	      durante la misma.  Este comando localiza ficheros que no pertenecen al
	      directorio y los elimina.</para>
	  </listitem>
	</varlistentry>

	<varlistentry>
	  <term><command>disable
	      <replaceable>nombre-impresora</replaceable></command></term>
	  
	  <listitem>
	    <para>Deshabilita la cola de pendientes para nuevos trabajos.  Si la 
	      impresora esta activa, se continuan imprimiendo los trabajos en la
	      cola de pendientes.  El superusuario (<username>root</username>)
	      siempre podr&aacute; enviar trabajos, incluso cuando se use esta
	      opci&oacute;n.</para>
		  
	    <para>Este es un comando &uacute;til cuando se esta probando una nueva 
	      impresora o instalando un filtro: deshabilitar la cola de pendientes y
	      enviar los trabajos como <username>root</username>.  Otros usuarios no
	      podr&aacute;n enviar trabajos, hasta que la impresora haya sido 
	      configurada correctamente y se re-habilite la cola de pendientes, con
	      el comando <command>enable</command>.</para>
	  </listitem>
	</varlistentry>

	<varlistentry>
	  <term><command>down <replaceable>nombre-impresora</replaceable>
	      <replaceable>mensaje</replaceable></command></term>
		
	  <listitem>
	    <para>Usar el comando down para una impresora, equivale a usar el comando
	      <command>disable</command> seguido del comando <command>stop</command>.
	      El <replaceable>mensaje</replaceable> que se ingrese, aparecer&aacute;
	      como el estatus de la impresora, cada vez que un usuario verifique su
	      estatus con &man.lpq.1; o con <command>lpc status</command>.</para>
	  </listitem>
	</varlistentry>

	<varlistentry>
	  <term><command>enable
	      <replaceable>nombre-impresora</replaceable></command></term>
		
	  <listitem>
	    <para>Habilitar la cola de pendientes.  Los usuarios pueden enviar sus 
	      trabajos pero la impresora no imprimira nada hasta que se
	      inicializada.</para>
	  </listitem>
	</varlistentry>

	<varlistentry>
	  <term><command>help
	      <replaceable>nombre-del-comando</replaceable></command></term>
		
	  <listitem>
	    <para>Mostrar la ayuda del comando 
	      <replaceable>nombre-del-comando</replaceable>.  Si no se indica el
          <replaceable>nombre-del-comando</replaceable>, se muestra un resumen
          de los comandos disponibles.</para>
	  </listitem>
	</varlistentry>

	<varlistentry>
	  <term><command>restart
	      <replaceable>nombre-impresora</replaceable></command></term>

	  <listitem>
	    <para>ReIniciar la impresora.  Los usuarios comunes pueden usar esta 
	      opci&oacute;n en caso de que por alguna raz&oacute;n 
	      <application>LPD</application> se paralice, pero no pueden iniciar una
	      impresora detenida con algunos de los comandos <command>stop</command>
	      o <command>down</command>.  El comando <command>restart</command> es
	      equivalente a ejecutar <command>abort</command> seguido del comando
	      <command>start</command>.</para>
	  </listitem>
	</varlistentry>

	<varlistentry>
	  <term><command>start
	      <replaceable>nombre-impresora</replaceable></command></term>
		
	  <listitem>
	    <para>Iniciar la impresora.  La impresora comenzar&aacute; a imprimir 
	      los trabajos en la cola de pendientes.</para>
	  </listitem>
	</varlistentry>

	<varlistentry>
	  <term><command>stop
	      <replaceable>nombre-impresora</replaceable></command></term>
	  
	  <listitem>
	    <para>Detiene la impresora.  La impresora terminar&aacute; el trabajo 
	      actual y dejar&aacute; de imprimir.  Aun cuando la impresora esta
	      detenida, los usuarios pueden enviar sus trabajos a la cola de 
	      pendientes de la impresora.</para>
	  </listitem>
	</varlistentry>

	<varlistentry>
	  <term><command>topq <replaceable>nombre-impresora</replaceable>
	      <replaceable>trabajo-o-usuario</replaceable></command></term>

	  <listitem>
	    <para>Modificar el orden de la cola de pendientes de la impresora
	      <replaceable>nombre-impresora</replaceable>, colocando los trabajos con
	      el identificador <replaceable>trabajo</replaceable> o que pertenecen al
	      usuario <replaceable>usuario</replaceable>, en primer lugar de la cola.
	      Para este comando no puede hacer uso de la opci&oacute;n 
	      <literal>all</literal> en lugar de 
	      <replaceable>nombre-impresora</replaceable>.</para>
	  </listitem>
	</varlistentry>

	<varlistentry>
	  <term><command>up
	      <replaceable>nombre-impresora</replaceable></command></term>
		
	  <listitem>
	    <para>Usar el comando up en una impresora; es lo opuesto al comando
	      <command>down</command>.  Equivalente a <command>start</command>
	      seguido del comando <command>enable</command>.</para>
	  </listitem>
	</varlistentry>
      </variablelist>
      
      <para>&man.lpc.8; acepta estos comandos desde la l&iacute;nea de comandos.
        Si no ingresa aglun comando, &man.lpc.8; entra en modo interactivo, donde
        puede ingresar los comandos hasta que teclee <command>exit</command>,
        <command>quit</command> o fin-del-archivo (EOF).</para>
    </sect2>
  </sect1>
  
  <sect1 id="printing-lpd-alternatives">
    <title>Alternativas al Sistema de Impresi&oacute;n Est&aacute;ndar</title>
    
    <para>Si ha estado leyendo este manual desde el principio, para este momento
      usted ha aprendido practicamente todo lo que debe saber del sistema
      <application>LPD</application> que viene con FreeBSD.  Y ha podido observar
      algunas de sus debilidades, lo que naturalmente nos lleva a la pregunta:
      <quote>&iquest;Qu&eacute; otros sistema de impresi&oacute;n existen (y que
      trabajen bajo FreeBSD)?</quote>.</para>

    <variablelist>
      <varlistentry>
	<term>LPRng</term>

 	<indexterm><primary>LPRng</primary></indexterm>	  
	<listitem>
	  <para><application>LPRng</application>, que presumiblemente significa
	    <quote>LPR: the Next Generation</quote> (<quote>LPR: la Siguiente
	    Generaci&oacute;n</quote>), es PLP completamente hecho de nuevo.  Patrick Powell
	    y Justin Mason (el encargado principal de PLP) colaboraron en crear
	    <application>LPRng</application>.  El principal sitio de 
	    <application>LPRng</application> es <ulink
	      url="http://www.astart.com/lprng/LPRng.html">http://www.astart.com/lprng/LPRng.html</ulink>.</para>
	</listitem>
      </varlistentry>
    </variablelist>
  </sect1>

  <sect1 id="printing-troubleshooting">
    <title>Resoluci&oacute;n de Problemas</title>

    <para>Una vez que hizo la simple prueba con &man.lptest.1;, puede ser que 
      haya obtenido uno de los siguientes resultados, en vez de la correcta
      impresi&oacute;n:</para>

    <variablelist>
      <varlistentry>
	<term>Trabajo, despu&eacute;s de un tiempo; o no expulso completamente
	  la hoja.</term>

	<listitem>
	  <para>La impresora llevo a cabo la impresi&oacute;n, pero espero bastante
	    o bien finalmente no hizo nada.  De hecho, es posible que haya sido
	    necesario presionar en su impresora el bot&oacute;n para poner a la
	    impresora EN LINEA o bien de ALIMENTACION DE PAGINA.</para>

	  <para>Si este es el caso, su impresora esperaba a ver si exisitian 
	    m&aacute;s datos para imprimir, antes de comenzar con la 
	    impresi&oacute;n.  Para arreglar este problema puede hacer que su
	    filtro de texto envie al final un caracter de ALIMENTACION DE PAGINA o
	    cualquiera que sea necesario para la impresora. Esto normalmente es 
	    suficiente para que la impresora imprima todos los datos restantes
	    en su buffer interno.  Tambi&eacute;n es recomendable verificar que cada
	    trabajo enviado se haya impreso en una p&aacute;gina completa, de tal
	    forma que el siguiente trabajo no comience en la mitad de la 
	    &uacute;ltima p&aacute;gina del trabajo previo.</para>

	  <para>El siguiente ShellScript se puede utilizar como reemplazo de 
	    <filename>/usr/local/libexec/if-simple</filename>, para imprimir un 
	    caracter de alimentaci&oacute;n de p&aacute;gina:</para>

	  <programlisting>#!/bin/sh
#
# if-simple - Filtro de texto simple para lpd
# Instalado en /usr/local/libexec/if-simple
#
# Simplemente manda la entrada a la salida estandar. 
# Ignora los argumentos del filtro.
# Escribe un caracter de alimentacion de pagina (\f) despues de imprimir.

/bin/cat &amp;&amp; printf "\f" &amp;&amp; exit 0
exit 2</programlisting>
	</listitem>
      </varlistentry>

      <varlistentry>
	<term>Se produce un <quote>efecto de escalera.</quote></term>

	<listitem>
	  <para>Usted obtiene la siguiente impresi&oacute;n:</para>

	  <programlisting>!"#$%&amp;'()*+,-./01234
                "#$%&amp;'()*+,-./012345
                                 #$%&amp;'()*+,-./0123456</programlisting>

	  <indexterm><primary>MS-DOS</primary></indexterm>
 	  <indexterm><primary>OS/2</primary></indexterm>
 	  <indexterm><primary>ASCII</primary></indexterm>
	  <para>Usted es otra v&iacute;ctima del <emphasis>efecto de 
	    escalera</emphasis>, causada por el conflicto de interpretaci&oacute;n, 
	    sobre cual caracter indica la nueva l&iacute;nea.  Los sistemas
	    operativos estilo-Unix, usan un caracter sencillo: c&oacute;digo 
	    ASCII 10, alimentaci&oacute;n de l&iacute;nea (LF).  MS-DOS, OS/2 y
	    otros utilizan un par de caracteres, c&oacute;digo ASCII 10 
	    <emphasis>y</emphasis> c&oacute;digo ASCII 13 (retorno de carrete o
	    CR).  Muchas impresoras usan la forma de MS-DOS, para representar los
	    saltos de l&iacute;neas.</para>

	  <para>Cuando usted imprime con FreeBSD, su texto hace uso del caracter de
	    nueva l&iacute;nea.  La impresora, una vez que detecta el caracter de
	    nueva l&iacute;nea, avanza el papel una l&iacute;nea, pero manteniendo 
	    la misma posici&oacute;n horizontal, para la impresi&oacute;n del 
	    siguiente caracter.  Para eso es el caracter de retorno de carrete: para
	    mover la posici&oacute;n horizontal al borde izquierdo del papel.</para>

	  <para>Aqui tenemos lo que FreeBSD desea que haga su impresora:</para>

	  <informaltable frame="none">
	    <tgroup cols="2">
	      <tbody>
		<row>
		  <entry>Impresora recibe CR</entry>
		  <entry>Impresora imprime CR</entry>
		</row>

		<row>
		  <entry>Impresora recibe LF</entry>
		  <entry>Impresora imprime CR + LF</entry>
		</row>
	      </tbody>
	    </tgroup>
	  </informaltable>

	  <para>Aqui tenemos algunas formas de llevar esto a cabo:</para>

	  <itemizedlist>
	    <listitem>
	      <para>Usar los botones de configuraci&oacute;n de la impresora o el
	        panel de control, para modificar su interpretaci&oacute;n de estos
	        caracteres.  Verifique el manual de su impresora para ver como
	        hacer esto.</para>

	      <note>
	        <para>Si cuenta con otro sistema operativo en su maquina, ademas de 
	          FreeBSD, quiz&aacute;s sea necesario 
	          <emphasis>reconfigurar</emphasis> la impresora, para usar la 
	          interpretaci&oacute;n de los caracteres de CR y LF del otro sistema
	          operativo.  Puede escoger una de las otras soluciones que se 
	          comentan m&aacute;s adelante.</para>
	      </note>
	    </listitem>

	    <listitem>
	      <para>Puede hacer que el controlador serial de FreeBSD, 
	        autom&aacute;ticamente convierta LF en CR+LF.  Claro esta, que esta
	        alternativa funciona <emphasis>solo</emphasis> en impresoras 
	        seriales.  Para habilitar esta habilidad, establezca el bit 
	        <literal>CRMOD</literal>, en la caracter&iacute;stica 
	        <literal>fs</literal> del fichero <filename>/etc/printcap</filename>
	        para la impresora.</para>
	    </listitem>

	    <listitem>
	      <para>Envie un <emphasis>c&oacute;digo de escape</emphasis> a la 
	        impresora para que temporalmente de un tratamiento diferente a
	        los caracteres LF.  Consulte el manual de su impresora para ver
	        los c&oacute;digos de escape soportados por su impresora.  Una vez
	        que localice el c&oacute;digo correcto, modifique su filtro de 
	        texto, para que se envie este c&oacute;digo primero y despu&eacute;s
	        el trabajo a imprimir.</para>

	      <indexterm><primary>PCL</primary></indexterm>
	      <para>Aqui tenemos un ejemplo de un filtro de texto, para impresoras
	        compatibles con PCL de Hewlett-Packard.  Este filtro hace que la
	        impresora trate a LF como LF + CR; posteriormente envia el trabajo
	        de impresi&oacute;n; y por &uacute;ltimo envia un caracter de 
	        alimentaci&oacute;n de p&aacute;gina, para expulsar la &uacute;ltima
	        p&aacute;gina del trabajo.  Este filtro debiese funcionar con casi
	        todas las impresoras Hewlett Packard.</para>

	      <programlisting>#!/bin/sh
#
# hpif - Filtro de texto simple para lpd e impresoras compatibles con HP-PCL
# Instalado en /usr/local/libexec/hpif
#
# Pasa la entrada estandar a la salida estandar. 
# Ignora todos los argumentos del filtro.
# Le indica a la impresora que debe tratar a LF como si fuera CR+LF.
# Expulsa la ultima pagina cuando ha terminado.

printf "\033&amp;k2G" &amp;&amp; cat &amp;&amp; printf "\033&amp;l0H" &amp;&amp; exit 0
exit 2</programlisting>

	      <para>Aqui tenemos un ejemplo de <filename>/etc/printcap</filename> 
	        para un host llamado <hostid>orchid</hostid>.  Solo cuenta con una
	        impresora conectada al puerto paralelo, una Hewlett Packard LaserJet
	        3Si, llamada <literal>teak</literal>.  Se esta usando el script 
	        anterior como filtro de texto:</para>

	      <programlisting>#
#  Fichero /etc/printcap del host orchid
#
teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\
        :lp=/dev/lpt0:sh:sd=/var/spool/lpd/teak:mx#0:\
        :if=/usr/local/libexec/hpif:</programlisting>
	    </listitem>
          </itemizedlist>
	</listitem>
      </varlistentry>

      <varlistentry>
	<term>Cada l&iacute;nea se sobreescribe.</term>

	<listitem>
	  <para>La impresora no avanza ninguna l&iacute;nea.  Todas las l&iacute;neas
	    son impresas una sobre otra en un solo rengl&oacute;n.</para>

	  <para>Este problema es lo <quote>opuesto</quote> al efecto de escalera, 
	    descrito anteriormente, y es poco com&uacute;n.  En algun lugar, los
	    caracteres de LF, que usa FreeBSD para indicar un salto de l&iacute;nea,
	    la impresora los identifica como CR, de tal forma que regresa el punto
	    de impresi&oacute;n al borde del papel, pero sin saltar al siguiente
	    rengl&oacute;n.</para>

	  <para>Utilice los botones de la impresora o el panel de control, para 
	    forzar a que la impresora interprete de la siguiente manera los
	    caracteres LF y CR:</para>

	  <informaltable frame="none">
	    <tgroup cols="2">
	      <thead>
		<row>
		  <entry>Impresora recibe</entry>
		  <entry>Impresora imprime</entry>
		</row>
	      </thead>

	      <tbody>
		<row>
		  <entry>CR</entry>
		  <entry>CR</entry>
		</row>

		<row>
		  <entry>LF</entry>
		  <entry>CR + LF</entry>
		</row>
	      </tbody>
	    </tgroup>
	  </informaltable>
	</listitem>
      </varlistentry>

      <varlistentry>
	<term>Al imprimir se pierden caracteres.</term>

	<listitem>
	  <para>Mientras imprime, algunos caracteres no son impresos en cada 
	    l&iacute;nea.  El problema puede agravarse conforme se usa la
	    impresora, perdiendo m&aacute;s y m&aacute;s caracteres.</para>

	  <para>El problema es que la impresora no puede mantener el ritmo al cual
	    la computadora envia los datos por medio de la l&iacute;nea serial
	    (este problema no se debiese presentarse en impresoras conectadas al 
	    puerto paralelo).  Existen dos formas de solucionar este problema:</para>

	  <itemizedlist>
	    <listitem>
	      <para>Si la impresora cuenta con soporte para el control de flujo 
	        XON/XOFF, haga que FreeBSD lo utilice, al especificar el bit TANDEM
	        en la caracter&iacute;stica <literal>fs</literal>.</para>
	    </listitem>

	    <listitem>
	      <para>Si la impresora cuenta con soporte para el control de flujo 
	        externo (carrier), especifique el bit <literal>MDMBUF</literal> en
	        la caracter&iacute;stica <literal>fs</literal>.  Asegurese de que 
	        el cable utilizado para conectar la impresora a la computadora cuenta
	        con soporte para este tipo de control de flujo.</para>
	    </listitem>

	    <listitem>
	      <para>Si la impresora no cuenta con soporte para el control de flujo,
	        use una combinaci&oacute;n de los bits <literal>NLDELAY</literal>,
		    <literal>TBDELAY</literal>, <literal>CRDELAY</literal>,
		    <literal>VTDELAY</literal> y <literal>BSDELAY</literal> en la
            caracter&iacute;stica <literal>fs</literal>, para a&ntilde;adir el
            retraso apropiado en la cadena de informaci&oacute;n enviada a la
            impresora.</para>
	    </listitem>
	  </itemizedlist>
	</listitem>
      </varlistentry>

      <varlistentry>
	<term>Solo imprime basura.</term>

	<listitem>
	  <para>La impresora imprime lo que parece ser basura al azar, pero no el 
	    texto deseado.</para>

	  <para>Esto normalmente es otro s&iacute;ntoma de una configuraci&oacute;n
	    incorrecta en los par&aacute;metros de comunicaci&oacute;n de una 
	    impresora serial.  Verifique el rango de bps en la caracter&iacute;stica
	    <literal>br</literal> y la paridad de bits en <literal>fs</literal> y
        <literal>fc</literal>; asegurese de que la impresora use los mismos datos
        especificados en el fichero <filename>/etc/printcap</filename>.</para>
	</listitem>
      </varlistentry>

      <varlistentry>
	<term>No sucede nada.</term>

	<listitem>
	  <para>Si no sucede nada, probablemente el problema es con FreeBSD y no con
	    su hardware.  Incluya un fichero de registros (log), con la 
	    caracter&iacute;stica <literal>lf</literal>, en la entrada de su 
	    impresora en el fichero <filename>/etc/printcap</filename>.  Por ejemplo,
	    aqui esta la entrada de <literal>rattan</literal>, con la 
	    caracter&iacute;stica <literal>lf</literal> :</para>

	  <programlisting>rattan|line|diablo|lp|Diablo 630 Line Printer:\
        :sh:sd=/var/spool/lpd/rattan:\
        :lp=/dev/lpt0:\
        :if=/usr/local/libexec/if-simple:\
        :lf=/var/log/rattan.log</programlisting>

	  <para>Posteriormente, intente imprimir de nuevo.  Verifique el fichero de
	    registros (en nuestro ejemplo, <filename>/var/log/rattan.log</filename>)
	    para buscar cualquier mensaje de error que aparezca.  Basado en ese 
	    mensaje trate de resolver el problema.</para>

	  <para>Si no especifica la caracter&iacute;stica <literal>lf</literal>,
	    entonces <application>LPD</application> utilizar&aacute; 
	    <filename>/dev/console</filename> como la salida por default.</para>
	</listitem>
      </varlistentry>
    </variablelist>
  </sect1>
</chapter>

<!-- 
     Local Variables:
     mode: sgml
     sgml-declaration: "../chapter.decl"
     sgml-indent-data: t
     sgml-omittag: nil
     sgml-always-quote-attributes: t
     sgml-parent-document: ("../book.sgml" "part" "chapter")
     End:
-->


