Crear PDFs con Samba

De enunpimpam
Saltar a: navegación, buscar

Instalación de una impresora PDF Distiller en Samba

  1. Crear el directorio /etc/samba/printerdrivers (puede ser distinto)
  2. Crear el share print$ (no se utiliza más printer$ en samba 3.0)

[print$]

 path = /etc/samba/printerdrivers
 browseable = no
 guest ok = Yes
 read only = yes
 write list = @ntadmin, root, esteban
  1. Crear el siguiente árbol de directorios dentro de /etc/samba/printerdrivers:

[print$]--+--W32X86 (este se utilizará en Win NT/2k/XP)


        |
        +--WIN40
        |
        +--W32ALPHA
        |
        +--W32MIPS
        |
        +--W32PPC

Nota Importante: Se entiende que estos directorios pertenecen a root, o que al menos, root tiene permiso de escritura en estos archivos. Esto puede parecer obvio, pero al utilizar mas adelante el comando rpcclient, notaremos que si root no puede escribir estos directorios a traves de samba, estaremos con problemas.

4. Identificar los drivers, y archivos dependientes

Esto se puede lograr imprimiendo la página de prueba de la impresora Si estamos instalando una impresora postscript, para imprimir PDF, y no tenemos la impresora físicamente, (esto puede ser obvio en este caso) entonces instalamos la impresora, la mandamos a imprimir al puerto FILE, e imprimimos la página de prueba en el archivo test.ps. Luego con la utilidad ps2pdf, lo convertimos, y voilá, tenemos la página de prueba.

5. Copiar todos estos archivos en [print$]\W32X86

6. Con el comando rpcclient, instalaremos el driver de la siguiente manera:

root@linux]# rpcclient -Uroot%password -c 'adddriver "Windows NT x86" "impresora:\ controlador.dll:datafile.ppd:configuracion.dll:helpfile.hlp: \ NULL:RAW:archadicional.1,archadicional.2,archadicional.n' LINUX donde «LINUX» es el netbios name del print server.

Notar, que los archivos de controlador, hay que colocarlos en el orden específico, de lo contrario nos dara un error. Los archivos adicionales o dependientes, están separados por comas (,) en lugar de dos puntos (:).

Ejemplo: en la configuración que hice, utilize el driver de la impresora HP Color Laser Jet 8500 PostScript?. Este no viene con Win2k, asi que lo bajé del sitio de HP y listo.

/usr/local/samba/bin/rpcclient -Uroot%smbpasswd -c 'adddriver "Windows NT x86" "CLJ8500:HPCLJ85D.DLL:HP_CLJ85.PPD:HPCLJ85U.DLL:HPPSHELP.HLP:NULL:RAW:HPCLJ8 5N.DLL,HDIHELP.HLP,TRBLHELP.HLP' SAPLINUX Printer Driver CLJ8500 successfully installed. Nota: El nombre de la impresora no necesariamente tiene que coincidir con el nombre de la impresora en Windows. Una vez que hemos ejecutado este comando, podremos notar que la utilidad rpcclient de samba, ha movido los archivos pertinentes al subdirectorio 2 dentro de [print$]\W32X86

7. En este momento, samba debería reconocer la nueva impresora instalada, aunque no esté particularmente asociada a ninguna impresora. Para esto, desde Windows 2k, nos vamos al explorador de red, dentro de la carpeta «impresoras» del servidor samba, hacemos click derecho sobre la parte blanca, y vemos al final la opción «Propiedades del servidor» Hacemos click, y vamos al tab «Controladores», y voilá! ahi aparece nuestra impresora...

8. Relacionar la impresora con el share printable de linux Esto lo hacemos ejecutando nuevamente el comando rpcclient de la siguiente manera: rpcclient -Uroot%smbpassword -c 'setdriver impresora driver_impresora' LINUX donde «impresora» es el nombre del share en el archivo smb.conf, y «driver_impresora» es el driver que hemos seteado anteriormente (en el ejemplo: CLJ8500). Notemos, que el share debe existir previamente a este comando, sino tendremos el error: result was NT_STATUS_UNSUCCESSFUL Una vez que hemos logrado esto, vamos a la carpeta Impresoras dentro del samba print server en Windows, y vemos que ahora aparece «CLJ8500» en la columna «modelo» correspondiente al share que hemos configurado. Hacemos click derecho sobre esta impresora, y Voila!!!!!!!! podemos por fin, ver las propiedades correctamente. Ahora vamos a la carpeta impresoras de nuestra máquina, y agregamos una impresora de red: Funciona correctamente, ahora podemos ver el Status correctamente, y ademas, debe bajar los drivers del servidor, automáticamente. BIEN, por fin estamos listos para hacer el intento de sacar un archivo PDF... Para esto, necesitaremos tener instalado en nuestro querido y amado Linux, el Ghostscript.

Nota: Este ejemplo, esta hecho para windows 2000, y es lo mas probable que no funcione en Windows XP. Windows XP ya viene con los drivers de esta impresora, por lo que podemos repetir el proceso. Imprimimos una pagina de prueba en un archivo, y copiamos los controladores en el servidor samba. Luego, repetimos todo el proceso, y creamos otro share en samba, igual al anterior, llamado por ejemplo [PDFColorXP]. Cuando agreguemos el driver con el comando rpcclient, veremos que dentro del directorio W32X86, estos archivos se han copiado en el directorio 3, por lo tanto, podremos tener tantas versiones de drivers como querramos.

9. Linux Super PDF Distiller Printer NOTA SOBRE CUPS: Configurando la impresora con CUPS, anduvo, desde el entorno web de CUPS, podia imprimir perfectamente un archivo .ps, pero siempre con el mismo nombre (configurando la salida de la impresora como file:/) el problema, es que no se como hacer para ejecutar un script post-impresión que me realice la conversión. Tampoco pude hacer que samba imprima el mismo archivo, usando CUPS, pero tampoco me preocupé mucho por seguir los pasos de la documentación...

Las opciones de samba para la impresión, deberan ser «bsd» o cualquiera menos CUPS, ya que no pude hacer andar esto con CUPS. Si alguien hace andar esto con CUPS, avise por favor. La desventaja de CUPS, es que no me toma el parametro «print command» en el print share, si no fuera por esto, andaría perfectamente. [global] printing = bsd printcap name = cups [printers]

 comment = All Printers
 printable = yes
 path = /var/spool/samba
 browseable = no
 guest ok = yes
 public = yes
 read only = yes
 writable = no

[PDFColor]

 path = /var/spool/samba/PDFWriter
 guest ok = Yes
 printable = Yes
 print command = /local/scripts/printscript %s %u %H "%J"
 lpq command =
 lprm command =

[print$]

 path = /etc/samba/printdrivers
 browseable = no
 guest ok = Yes
 read only = yes
 write list = @ntadmin, root, esteban
  * %s: nombre del trabajo en la cola
  * %u: Usuario de samba
  * %H: Home del usuario
  * "%J": nombre del trabajo en windows (debe ir entre comillas, porque sino, los espacios entre las palabras, van a dar problemas)

Por más variables, ver en la documentación de smb.conf Archivo printscript: !/bin/bash DATE=`date +%b%d-%k-%M-%S` USERNAME=$2 USRPATH=$3 SPOOL=/var/spool/samba/PDFWriter echo Imprimiendo Trabajo Titulo: $4 por: $2 $DATE $EDITED >> /tmp/Print.log mv $1 $SPOOL/$1.ps

gs -q -dCompatibilityLevel=1.4 -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -r600x600 -sO utputFile="$USRPATH/PDFs/$DATE.pdf" -c save pop -f "$SPOOL/$1.ps" rm -rf $SPOOL/$1.ps Modifique el script de impresion, ya que la variable que contiene el titulo del trabajo es bastante complicada para depurar, en vez de eso, este script genera un archivo con el formato "ene28-16-54-00.pdf" Claro, hay que acordarse de cambiarle el nombre para saber de que se trata. La calidad del texto, y sobre todo, los gráficos es realmente muy buena, para que joraca necesito el acrobat ahora ????? Este sencillo script envía el archivo PDF a un directorio dentro del Home del usuario que envía el trabajo. el share para el homedir del usuario esta configurado asi: [%U]

 Comment = Directorio Personal de %U
 Path = %H
 Browsable = Yes
 Writable = Yes
 Guest Ok = No
 Valid Users = %U

De manera que NADIE puede entrar y ver documentos de otro, salvo que se los comparta en una carpeta pública... Nota: usando la utilidad ps2pdf14 dentro del script, que es parte del ghostscript, no anda. Es otro script, que a su vez llama a otro script (ps2pdfwr) que a su vez ejecuta el comando gs, así que para que tantas complicaciones, ejecutamos el comando gs directamente y listo. Notemos, por último, que esto de mandar a sacar un PDF no es lo más complicado. En samba 3.0, lo más complicado es crear adecuadamente los print share, con los drivers y todo, y más aún, si estamos usando estaciones de trabajo windows 2000 o XP (todavía no probé esto con 98).