Aprovechando Samba para enviar Faxes



Introducción

Hace algún tiempo que estoy mirando de substituir el PDC (primary
domain controller) bajo NT Server de la red de donde trabajo por un
servidor en Linux. Por ello busqué los servicios que se ofrecen actualmente
bajo NT para sustituirlos por sus correspondientes en Linux y como
resultado he instalado:

  • Controlador Primario del “Dominio” (netbios): Samba 2.2.7a.
  • Servidor de correo Externo/Interno: Qmail 1.03 + patch Qmailqueue.
  • Antivirus para el correo: F-Prot, sophos, karpersky utilizados vía
    Qmail-Scanner.
  • Servidor de Fax: Hylafax.
  • Servidor FTP: Proftpd 1.2.7.
  • DHCP.

Aunque en este documento me centraré más en el tema del como hacer
que los usuarios de la red (windows) puedan enviar faxes fácilmente
a través del servidor Hylafax.


Posibilidades

Antes de nada, en el howto de la página web de hylafax ya se comentan varias posibilidades de como hacer que clientes bajo windows/*nix/mac/etc puedan utilizar el servidor para enviar faxes. La mayoría consisten en programas que se conectan al servidor y realizan las tareas de enviado. Para windows encontré uno muy pero que muy bonito llamado Cypheus.

Cypheus te da una interfície gráfica con los faxes enviados, recibidos, te crea una impresora virtual en windows que te pasa tu documento a una imagen .tiff, y ésta es la que el programa utiliza para enviar el fax.

Cypheus no le gustó a los usuarios de mi red puesto que para enviar
un fax tenían que realizar 3 tareas:

  • Escribir el documento.
  • Imprimir el documento con la impresora virtual de cypheus.
  • Abrir cypheus y enviar el fax.
  • Por este motivo seguí buscando hasta que encontré Sambafax. La idea es muy sencilla:

    • Mediante Samba se crea un recurso compartido, en mi caso le llamo
      faxlp (de fax-l-printer xD).
    • A este recurso se le dice que es una impresora, de manera que recibirá el documento a enviar por fax cuando se le diga de imprimir con faxlp.
    • Una vez tenemos el documento en el servidor lo único que hay que hacer es pasarlo por un script (en bash por ejemplo) que lo trate (para sacar el numero de fax) y enviarlo por fax con el binario que proporciona hylafax, sendfax.

    Esta solución me gustó porque es tremendamente versátil, pues en un script puedes hacer casi cualquier cosa que se te ocurra. En mi caso lo que hago es enviar el fax, imprimir una copia por una impresora y enviar un mail al usuario que generó el fax para confirmarle la correcta recepción del fax. Como? seguid leyendo…


    Instalando….

    Al lío… toca leer, instalar i probar :).


    Samba

    Primero de todo necesitamos montar una red heterogénea. En mí caso aproveche para pasar el PDC bajo NT a un linuxín cosa que con samba no es tarea muy complicada:

  • Bajarse las fuentes de Samba. Yo soy partidario de 1ero intentar bajarse las fuentes, compilar e instalar aunque a veces aparecen líos y complicaciones externas. En esos casos siempre va bien tener apunto el .rpm o .deb para instalar. De todas formas una visita a www.samba.org y uno se baja lo que prefiera.
  • Como yo soy un poco cortito también me baje un manual o howto para instalar lo Samba y lo seguí. De hecho es la mejor forma de saber que caray poner en el fichero de configuración smb.conf y saber para que sirve cada cosa.
  • Se compila y se instala. También es aconsejable probar su correcto funcionamiento mediante una configuración trivial.
  • A continuación os pongo la parte del smb.conf que pueda resultar mas o menos interesante.
  • [global]

    ;Añadir la maquina del usuario para crear una cuenta

    ;en el PDC (Machine trust Account)

    add user script=/usr/bin/adduser -g maquinas -c “una maquina” -d /dev/null -s /bin/false 

    ;Información netbios 

    netbios name=Ofimatica
    workgroup=HCG
    wins support=yes
    os level=64 

    ; PDC 

    preferred master=yes
    local master=yes
    domain master=yes
    security=user
    encrypt passwords=yes 

    ; Usuarios 

    domain logons=yes
    logon script=%U.bat
    guest ok=no
    logon path=\\Ofimatica\profile\%U 

    ; Impresoras 

    load printers=yes 

    ; Especificación de donde se encuentran los perfiles 
    ; de usuario. Así no importa desde que maquina se
    ; loguee un usuario pues encontrará siempre su 
    ; escritorio 

    [profile]

    path=/home/profiles
    create mode=0600
    directory mode=0700
    writable=yes
    browsable=no 

    ; Recurso donde se guardan los scripts de inicio de
    ; sesion 

    [netlogon]

    path=/home/netlogon
    read only=yes
    browseable=no 

    ; Conjunto de recursos compartidos los que se quieran
    ; En mi caso son los directorios Home de cada usuario
    ; y directorios compartidos por grupos de usuarios
    ; (departamentos) 

    […] 

    ; Impresoras 

    [printers]

    path=/tmp
    printable=yes
    print command=/usr/bin/lpr -P %p -r %s 

    ; El Fax 

    [faxlp]

    printable=yes
    printer=faxlp
    print command=cat %s | /var/spool/hylafax/bin/sambafax -n %U; rm %s 

    ; en esta última linea es cuando se le dice al samba que debe pasarle el documento
    ; impreso al script que se encarga de tratarlo i enviarlo por fax.

    Con esta configuración estoy pidiendo al Samba que haga lo siguiente:

    • Gestionar de manera centralizada las contraseñas de los usuarios
    • Guardar perfiles de los usuarios (fondos escritorio, iconos, etc)
      para que no importe desde que ordenador inicia la sesión el usuario
      (en teoría, la práctica falta comprobarla).
    • Definir que recursos compartidos hay i quien puede usarlos.
    • Definir las impresoras que aparecen en /etc/printcap como impresoras
      compartidas. Entre ellas habrá una “impresora virtual” que será
      el fax.

    Las peculiaridades que me he encontrado según la versión de windows
    que se loguea en el servidor de samba son:

    Win95/98:
    Lo del PDC les viene grande, aunque para mí estos clientes
    son los mas fáciles de usar pues no requieren una Machine Trust Account
    (en los windows posteriores las máquinas se “añaden al dominio”
    por lo que se les crea una cuenta para la máquina, de ahí la linea
    add user script). Por mi experiencia simplemente comprueban
    que la contraseña introducida es válida con la contraseña que guarda
    el servidor. También dudo que guarden perfiles en el servidor, aunque
    no lo puedo asegurar pues ahora que pienso… no me he fijado ;P.
    Me gustaron porque son simples y no me dieron ningún problema. Si
    introduces la contraseña correcta, te logueas y se ejecuta tu script
    de inicio y puedes acceder a tus recursos compartidos, justo lo que
    se quiere.

    WindowsNT/2000:
    Funcionan mediante cuentas de usuarios y sus respectivas
    cuentas de máquinas. Guardan su perfil y no tuve muchos problemas
    con ellos

    WindowsXP:
    Este funciona bien si y solo si se varía el valor /HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet
    /Services/Netlogon/ Parameters/”RequireSignorSeal” a 0. Entonces
    se puede logear contra el servidor samba. Si se desea que se vuelva
    a loguear contra el servidor NT se tiene que volver a canviar este
    valor a 1.


    Hylafax

    Como servidor de Faxes escogí Hylafax puesto que fue el primero que
    encontré y me funcionó bien :). Además en su página web dispone de
    un howto suficientemente cortito para tener el servidor funcionando
    en poco rato y también enseña varias posibilidades de como hacer que
    un windows envié faxes a través de él.

  • Me bajé el .rpm y lo instalé. Cuando intente compilar sus fuentes
    me empezó a dar errores de versión del gcc y cosas así. Como soy muy
    perro me bajé el .rpm y listos.
  • Una vez instalado se ejecuta el faxconfig (o faxsetup), se responden
    las preguntas que te hace y ya funciona el servidor.
  • Se ejecuta faxadduser para añadir los usuarios que pueden enviar faxes.
    De esta manera se puede seleccionar los usuarios que dejamos acceder
    al fax o que dispongan de un password diferente. Aunque para el método
    que yo os explico no hace falta, pues se ataca al servidor Hylafax
    mediante Samba. Si se desease que solo ciertos usuarios del sistema
    puedan acceder al fax se podría hacer simplemente un grupo llamado
    “fax”. Incluir los usuarios que puedan usar el fax en este grupo
    y añadir la linea valid users=@fax en el fichero smb.conf en
    la sección [faxlp].
  • El único problema que me da es que si reinicio el ordenador no envía
    faxes hasta que ejecute faxmodem ttyS0 (com1). Es como si se
    olvidará de que módem utilizar para enviar faxes. También soy un chapuzas
    y no me he parado a configurarlo bien puesto que no es un mal difícil
    de solucionar.

  • Juntándolo todo

    Bueno, ahora tenemos por una parte usuarios logueados en el sistema
    mediante samba y un espléndido servidor de Hylafax. Si nos fijamos
    en el fichero SMB.CONF decimos que cuando se imprime por
    faxlp lo que se hace es enviar este documento a un script llamado
    sambafax. Simplemente se necesita hacer lo siguiente


    /etc/printcap (o /etc/printcap.local)

    Incluir las siguientes líneas para crear la impresora “virtual”
    del fax. Necesario puesto que la sección [printers] de samba coge
    las impresoras de este fichero:

    faxlp:\
    :lp=/dev/null:\
    :sd=/usr/spool/lpd/fax:\
    :if=/var/spool/hylafax/bin/sambafax:\
    :sh:sf:mx#0:

    Por supuesto hay que crear el directorio /usr/spool/lpd/fax con permisos 700 y hacerlo del usuario lp (en caso de redhat 8.0).


    /var/spool/hylafax/bin/sambafax

    Este es el script sobre el que se apoya esta especie de artículo.
    Es el que se encarga de recibir el documento a enviar en PostScript
    y enviarlo.

    #!/bin/bash
    SENDMAIL=”/usr/sbin/sendmail”
    PS2ASCII=”/usr/bin/ps2ascii”
    AWK=”/bin/awk”
    SENDFAX=”usr/bin/sendfax”
    FAXFILE=/tmp/sambafax.$$

    while :
    do
      case “$1” in
         -n) Username=”$2”
             shift;shift
             ;;
         -h) Hostname=”$2”
             shift;shift
             ;;
         -*) shift
             ;;
         *)  break
      esac
    done

    # a Quien le enviamos el mail de confirmación de fax

    if [ “$Username” = “nobody” ]
    then 
       Mailto=”postmaster”
    else
       Mailto=${Username}
    fi

    # pasar el documento a un fichero
    cat >${FAXFILE}

    # Pillar el numero de fax a donde enviar
    FAXNUM=`${PS2ASCII} ${FAXFILE} | ${AWK} ‘{ IGNORECASE=1 } /FAX-Nr ?: ?[0-9]*/ \

            {  $0=$0 “xxx”; \
               gsub(/-/,””); \
               angfang=match($0,/ ?: ?/); \
               angfang=angfang+match(substr($0,angfang),/[0-9]/)-1; \
               ende=match(substr($0,anffang),/[^0-9]/)-1; \
               printf(“%s”,substr($0,angfang,ende))\
            }’ `
    # Si no hi ha FAXNUM pos no podem enviar el fax
    if [ -z ${FAXNUM} ] ; then

       { echo “To: ${Mailto}”
         echo “From: Hylafax”
         echo “Subject: Falta Numero Fax”
         echo “”
         echo “Pon el numero fax asin :”
         echo “    Fax-Nr : xxxxxxx”
         echo “”
         echo “Ale reintenta”
       } | 2>&1 ${SENDMAIL} -ffax -oi ${Mailto}
    else
       /usr/bin/sendfax -n -D -f ${Mailto} -d ${FAXNUM} $FAXFILE
    fi

    # Borrar el temporal
    rm -f ${FAXFILE}

    #Fin

    Adicionalmente es necesario que el documento este en PostScript. Esto
    se puede hacer (de manera rudimentaria ) cuando añades la impresora
    en el windows le especificas un driver postscript, como por ejemplo
    la Apple Laserwriter. Una manera mas bonita de hacerlo es que los
    clientes automáticamente se descarguen los drivers del servidor samba.
    Como aún no lo he hecho no os puedo decir como, pero esta lleno de
    howtos que lo explican paso por paso.


    Resultado

    Quiero enviar un fax, que hago?

  • Escribe el documento

    Fax-Nr : 931623400

    blablabla

  • Archivo->imprimir->faxlp
  • Aceptar
  • Espera a recibir el mail para comprobar que todo ha ido bien.

  • Cosas Feas

    Este esquema tiene un par de problemas:

  • El destinatario recibe el fax con la línea Fax-Nr : <num>
  • Si deseamos enviar el mismo fax a 40 personas distintas la cosa falla
    un poquito pues tienes que modificar 40 veces el numero i imprimir.
    Claro, se podría buscar una manera de poner los 40 números en el documento,
    el script que los detecte y un bucle de ir enviando… pero claro,
    entonces también nos interesaría que los receptores no vean los 40
    números (problema 1), puesto que el receptor (y emisor) no quiere
    enviar 10 hojas por fax solo con números de teléfono…

    Este problemilla se puede solventar gracias a las herramientas Ofimáticas
    (OpenOffice para citar una) donde puedes crear plantillas de documentos
    y insertar campos (numero teléfono). Dichos campos se “llenan”
    accediendo a una Base de Datos u otro origen de datos. De esta manera
    la misma herramienta ofimática te genera los 40 documentos con los
    40 números distintos.

    Hoy lo he probado y ha funcionado bien. Lo que? Pues esto de enviar
    40 faxes a destinatarios distintos. Ha sido tarea fácil:

    • Primero he creado una mini base de datos con 1 tabla: Persona(Nombre,
      fax) y he rellenado la tablita.
    • Después he creado un documento de “Word” (para entenderse) con
      las opciones de combinar campos estableciendo el origen de datos la
      mini-base de datos que he creado anteriormente. És decir, simplemente
      he “combinado” la base de datos con el documento. Dicho documento
      contiene la parrafada a enviar pero con un par de “campos”:

      Fax-Nr : <<fax>>

      A la atención de <<Nombre>>

      blablabla

    • Al combinar el mismo editor del documento genera 40 versiones del
      fax cambiando los valores del n^o de fax y el nombre del destinatario
      automáticamente.
    • Solo falta imprimirlo por la impresora “virtual” del servidor
      samba.

  • Enlaces

    • www.samba.org
    • www.hylafax.org (otras soluciones: http://www.hylafax.org/howto/faxing.html#ss5.2)
    • Proyecto Lucas: Usando-Samba.pdf

    Este post ha sido traido de forma automatica desde https://web.archive.org/web/20140625063149/http:/bulma.net/body.phtml?nIdNoticia=1662 por un robot nigromante, si crees que puede mejorarse, por favor, contactanos.


    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

    Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.