sane + cups: otra taza de impresión

Habiendo ya instalado correctamente la impresora tanto en Windows como en Linux con el servidor de CUPS y los drivers de hplip y foomatic (pssst, en la página anterior), es la hora del scanner (que es algo que jamás debería ser usado como título para un programa de televisión, ni radio, ni nada, sin importar su tema ni nada). Vamos desde el principio.

Para controlar los scanners en Linux existe SANE, que en efecto es bastante fácil de instalar y usar. De hecho, Kooka, el programa de escaneo que viene con KDE 3.5.x, es un frontend de sane, y hay una enorme cantidad de otros frontends que funcionan haciendo cada uno cosas ligeramente diferentes y teniendo más o menos las mismas opciones pero con diferentes sabores (como todo en Linux, no?). Si se va a tener el scanner enchufado al computador en que se usa, la verdad es que no hay nada que hacer más que enchufarlo. Así que vamos entonces a la próxima página par… qué? Ah, claro. En mi caso, el scanner no iba a estar enchufado al computaor en donde se iba a usar.

Afortunadamente, para eso existe un programa especial, saned, que permite disponer del scanner a través de la red prácticamente con cualquier scanner hijo de vecino.

El funcionamiento de saned es de lo más interesante, la verdad. Cuando un cliente pide usar algún servicio del scanner, sane, corriendo en ese computador, se conecta a través de la red con un super server (en mi caso, xinetd) que detecta la conexión y lanza saned en el servidor. Trivial, tal como se manifiesta en el cuadro explicativo:

Y la verdad es que la configuración de saned no es ni siquiera tan complicada. Para dejarlo corriendo basta seguir los siguientes pasos, tomados en gran parte de aquí (aunque con algunas modificaciones, ojo! No cometan mis mismos errores!):

  • Por supuesto:

    sudo apt-get update
    sudo apt-get dist-upgrade

    antes de hacer cualquier cosa. Ahora sí.

  • saned está incluido en un paquete llamado sane-utils, por lo que

    sudo apt-get install sane-utils

    Si no han instalado sane, por supuesto, es hora de hacerlo también.

  • Podemos probar que esté todo ok corriendo, en el servidor, por supuesto, el siguiente comando como root después de haber enchufado y prendido el scanner:

    scanimage -L

    Si todo está bien, ese comando debería imprimir el nombre de su impresora. Si no funciona, y están seguros de estar corriéndolo como root entonces hay algo mal con la manera en la que tienen enchufado el scanner. En mi caso, no fue ni siquiera necesario correrlo como root para que funcionara, así que YMMV.

  • Una vez hecho eso y funcionando, hay cuatro cosas que hay que arreglar para que esto funcione, tal como sale mencionado en el man page de saned. Tres fáciles y una que es un poco más jodida.
  • La primera es configurar saned, cosa de decirle que tipo de conexiones entrantes debe aceptar. Para hacerlo, hay dos archivos que hay que modificar: uno en el servidor y uno en el cliente. En el servidor basta con modificar el archivo /etc/sane.d/saned.conf cosa de que contenga las direcciones de los computadores cliente que se van a conectar a él. En el cliente, por el contrario, hay que modificar /etc/sane.d/net.conf agregándole la dirección ip del servidor. Listo!
  • La segunda es modificar /etc/services añadiéndole la siguiente línea:

    sane-port 6566/tcp # SANE network scanner daemon

  • La tercera, la marginalmente difícil, es ajustar los permisos. Básicamente, saned espera que exista un usuario y un grupo saned que sean los que hagan correr el programa saned (confuso, lo sé). Asegúrense de que después de haber instalado saned este haya creado correctamente el usuario y el grupo. Si es así, el output de
    groups saned

    debería ser algo como

    saned : saned

    Sin embargo, es necesario también que el usuario saned sea parte del grupo scanner, para tener acceso al dispositivo. Para incluirlo en el grupo, basta con correr (como root) el siguiente comando:

    usermod -a -G scanner saned

    Si todo salió bien, entonces groups saned debería reflejar este cambio.1.

  • Finalmente, hay que asegurarse de que el super server sepa que tiene que hacer correr a saned, y esa configuración depende de cuál sea el super server que usen.
    • si están usando inetd tienen que poner la siguiente línea en su /etc/inetd.conf:

      sane-port stream tcp nowait saned.saned /usr/sbin/saned saned

    • si, por el contrario, están usando xinetd, como yo, deben poner lo siguiente en su /etc/xinet.conf:


      # default: off
      # description: The sane server accepts requests
      # for network access to a local scanner via the
      # network.
      service sane-port
      {
      port = 6566
      socket_type = stream
      wait = no
      user = saned
      group = saned
      server = /usr/sbin/saned
      groups = yes
      }

    Si se fijan bien, esta versión tiene una línea que no está en la versión sugerida por el man page de saned: la que dice groups = yes. Eso es porque, tal como sale aquí, por alguna razón xinetd sólo se queda con un grupo por usuario, a menos que se le diga explícitamente2. Este detallito fue la fuente de todos mis dolores de cabeza tratando de hacer funcionar este dichoso daemon, y si a los encargados de escribirle el man page se les ocurriera explicar que su maldita recomendación lleva a un callejón sin salida, todo esto habría sido completamente indoloro. Pero bueno…

  • Una vez hecho todo eso, y asegurándose de reiniciar el super server para que la configuración nueva empiece a correr, ejecutar

    scanimage -L

    en el cliente debería tener como output lo mismo que en el servidor. Si es así, felicitaciones. Sólo falta empezar a usar alguno de los muchos frontends que hay para sane, tanto para Linux como para Windows, y ponerse a escanear!

    Nos vemos!


    1. Es posible que tengan que reiniciar su equipo para que estos cambios surjan efecto. No entiendo bien cómo funciona el asunto, pero parece que es la manera más fácil de asegurarse de que UDEV cargue bien la información recién modificada. Esto, por supuesto, si su distro usa UDEV. [volver]
    2. La alternativa a esto sería cambiar la línea en la que se especifica el grupo como “saned” por otra en la que se diga desde un comienzo que será “scanner”, pero cuando lo hice no lo hice así, así que no sé si eso funcione. [volver]

    Pages: 1 2

    2 Responses to “sane + cups: otra taza de impresión”

    1. Alberto Says:

      Bueno:

      Encuentro interesante el How-To, pero debo reconocer que yo estoy intentando depender cada vez menos del papel y puede ser por eso que mi impresora tiene como 11 años de edad y aun funciona y la sigo ocupando. Cuesta un poc encontrarle las tintas, pero funciona re bien.

      Eso.

      Saludos.

      Alberto.

    2. baboso Says:

      una cosa es preferir no usar papel, otra muy diferente es no tener la posibilidad de usarlo.
      y la gracia en mi caso por lo menos es que ahora puedo empezar a depender menos del papel porque tengo un scanner!
      hasta puedo dejar de depender de los cables!

    Deja tu comentario