Posts Tagged “impresora”

Ya expliqué qué era el Job Accounting aplicado a una multifunción Samsung, y comento otro caso de posible interés para alguna oficina (la gente no suele tener en casa una máquina así), o didáctico en general: una Ricoh Aficio 2228c que no tiene cartucho de postscript y por tanto hay que usar el PCL5c emulado que sí soporta.

A pesar de que Ricoh ha entrado a la Linux Foundation hace poco, algunas de sus impresoras multifunción sin postscript se han distinguido por la ausencia de soporte para GNU/Linux.

En esta máquina, el driver CUPS a emplear para color es el Generic PCL5c foomatic/hpijs-pcl5c (la impresora tiene 1200 dpi y puede usar el cljet5c pero la resolución que da éste es sólo de 300 dpi). Problema: el fichero PPD asociado no ofrece opciones PJL para especificar usuario, y si se mira en las FAQs de openprinting para este modelo, nada se dice de cómo proceder con dicho PPD para insertar PJL.

Además, tampoco hay otras líneas con PJL en las que poder añadir sentencias (como ocurría con la Samsung). He probado distintas opciones para añadir un pipe en el mismo PPD (añadiendo un pipe en la línea FoomaticRIPCommandLine) pero no acaba de funcionar.

¿Solución? Montar un daemon que haga de proxy entre el CUPS y la impresora de red. Este nuevo servicio instalado en cada PC que vaya a imprimir hace lo siguiente:

  1. Escucha por un puerto local, ej. el localhost:9100. Esto implica que hay que configurar que la impresión no vaya directamente a la impresora de red sino al PC local.
  2. Recibe la información e inserta las líneas necesarias (si no, al estar la impresora configurada con Control de usuarios, ésta se queda bloqueada). Mirando un fichero generado por un Windows, concretamente son:
    @PJL JOB NAME="Linux"^M
    @PJL SET JOBNAME="Linux"^M
    @PJL SET USERCODE="1234"^M
  3. Envía el fichero resultado al puerto 9100 de la impresora.

Hay que asegurar que el daemon es daemon, esto es, no finaliza tras esta petición sino que se vuelve a ejecutar o se queda residente y sigue escuchando, y que esté en el arranque.

Dejo toda la info y el script en bash del daemon en mi wiki, donde incluyo otro hack que preparé hace tiempo para usar desde GNU/Linux el scanner de la multifunción Ricoh FX200, la cual ni siquiera aparece listada en openprinting.

Happy hack.

Comments No Hay Comentarios »

Hasta ahora no he hablado de impresión desde GNU/Linux. La arquitectura incluye bastantes conceptos (lenguajes de impresora, rasterizadores, ficheros ppd, spoolers, CUPS, interfaces,…), y a lo largo del tiempo he ido tomando notas que comparto para quien pueda venirle bien.

Al tema: muchas impresoras multifunción (impresora+fotocopiadora+scanner+fax) en red, cuentan con las funcionalidades de Copias controladas y Auditoría de trabajos. La primera permite establecer quiénes pueden imprimir, fotocopiar, escanear,… pidiendo para ello una identificación de usuario (en base a un código, o a identificador y contraseña), de modo que cuando se usa la máquina para fotocopiar se introduce a través del panel físico de la máquina, y cuando se emplea como impresora en red se configura en las opciones del driver de impresión, sea Windows o GNU/Linux. La auditoría de trabajos o job accounting registra, a partir de lo dicho, el uso que hace cada usuario o departamento: nº de fotocopias, impresiones, escaneos, etc.

¿Cómo funciona internamente la impresión en red con identificación? cuando el PC  genera el fichero a enviar por red a la impresora mediante algún protocolo de impresión (puertos tcp 514, 515, 631,  9100), algunas líneas del fichero hacen referencia a sentencias de PCL. Si el lenguaje es PJL un ejemplo puede ser:

@PJL JOB NAME="Sin nombre1"
@PJL SET COLORMODE=MONO
...
@PJL SET USERNAME="1234"
...

En la actualidad, la forma más típica de imprimir desde GNU/Linux está basada en ficheros PPD, los cuales sirven entre otras cosas para:

  • Definir las características de la impresora.
  • A partir de lo anterior, generar automáticamente el GUI para la selección de opciones.
  • Enviar determinadas cadenas (ej. PJL) y opciones a la hora de generar el fichero para la impresora.

Yendo al caso, tengo la multifunción Samsung C8385ND de la foto y hay un problema: si se configura para que funcione con identificación y auditoría, el PPD oficial no sirve porque el fichero generado para enviar a la impresora no es correcto.

Vamos con el “hack” para conocer cómo ha de ser ese fichero y que se genere automáticamente:

  1. En un Windows (en máquina virtual o nativo), se abre el OpenOffice con un fichero cualquiera y se imprime a fichero.
  2. En un PC con GNU/Linux se imprime por red capturándose lo que envía a la impresora:
    tcpdump -i eth0 dst ip_impresora -s0 -w fich
    (no vale sólo con imprimir a fichero, pues éste es un postscript sin las sentencias PJL)
  3. Comparándose ambos ficheros, se encuentran estas líneas que no aparecen en el fichero generado desde de GNU/Linux:
    @PJL SET ACCOUNTING_INFORMATION_USERID="1234"
    @PJL SET ACCOUNTING_INFORMATION_PASSWORD="1234"
  4. Se edita el fichero PPD, y puede modificarse ej. la línea que hace referencia a JLCUser User1:
    *JCLUser User1/MiUsuario: "@PJL SET USERNAME = <22>1234<220D0A>@PJL SET ACCOUNTING_INFORMATION_USERID=<22>1234<220D0A>@PJL SET ACCOUNTING_INFORMATION_PASSWORD=<22>1234<220D0A>"
    (22 es el código ASCII del carácter “)
  5. Se reinicia CUPS.

Dejo aquí una breve info de ésta y otras multifunción Samsung que vaya encontrando.

Comments 1 Comentario »