cómo configurar un servidor de CUPS (y conectarse remotamente a él)

Démosle un aplauso a nuestro tímido y bienamado pingüino mientras vemos como él, una vez más, hace un esforzado intento por despegarse del fango del olvido y salir, valeroso, a la conquista de los tubos.
Este es el primer posteo de una serie que tengo pensada (así es, con ambición este intento!) mostrando cosas entretenidas que se pueden hacer en Linux, o simplemente cosas entretenidas que he hecho yo con mi instalación y que me gustaría tener registradas para futuras referencias, ya sean mías o del resto.
Hoy le toca el turno a instalar una impresora en un servidor de CUPS al que se pueda acceder remotamente a través de una WAN desde computadores que corran prácticamente el sistema operativo que quieran. Califica como suficientemente interesante? Ya lo creo que sí. Aquí va.
Lo primero es instalar el servidor de la impresora. Y nos vamos a ahorrar toda la discusión de si es mejor usar la línea de comando o la interfaz gráfica. En esta guía se hará uso de ambas, porque lo que a mi me importa, más que una adhesión ideológica1 a un método por sobre el otro, es que las cosas sean fáciles, rápidas y eficientes. Dicho eso, vamos allá.
Para instalar el servidor de impresora deben correr
sudo apt-get install cupsys cupsys-client cupsys-driver-gutenprint openssh-server
openssh-server no es parte del servidor de la impresora, sino de ssh, que permite conectarse al computador de modo remoto. Es posible que esto sirva sin instalar el servidor de ssh, pero yo ya lo tenía instalado y la guía que yo seguí decía que había que hacerlo, así que váyanse a la segura. Además, ssh vale la pena tenerlo. Instálenlo. CUPS es el sistema de impresoras que funciona en Linux y significa Common Unix Printing System, y la verdad es que funciona a toda raja2.
Pero sigamos. Una vez que esté instalado debemos configurarlo para que reciba conexiones externas. Para eso debemos modificar /etc/cups/cupsd.conf (o /etc/cups/cups.d/browse.conf en versiones anteriores), del siguiente modo:
- Cambiar
BrowseAllow @LOCALporBrowseAllow all; - En las secciones
<Location />,<Location /admin>y<Location /admin/conf>3, cambiarAllow localhostporAllow all; - Cambiar donde dice
Listen localhost:631porListen 631; y - Añadir la línea
DefaultEncryption Neveral final del documento para que podamos conectarnos a CUPS y configurarlo a través de su interfaz web.
Una vez modificado ese archivo, debemos reiniciar el servidor de CUPS para que los cambios surjan efecto:
sudo /etc/init.d/cupsys restart
Ahora sí podemos (o deberíamos poder, comenten si hay problemas) configurar CUPS desde la web accediendo a
http://1.2.3.4:631/
en donde 1.2.3.4 es la dirección IP del servidor al que nos estamos conectando (que probablemente será parecido a 192.168.1.XXX, en donde XXX es un valor entre 0 y 255). Una vez ahí, en el tab de Impresoras (o Printers, quizá en qué idioma sale, porque mientras lo probaba me conecté desde otro computador y estaba en castellano, mientras que en mi computador estaba en inglés), instalamos la impresora seleccionando el puerto en el que está conectada.
Aquí es donde sirve que hayamos instalado el paquete cupsys-driver-gutenprint, que es un paquete de drivers de impresora que incluye una buena cantidad de las impresoras más comunes y nos dejarán hacer un mucho mejor uso de nuestra impresora. Así que si no lo instalaron en su momento, instálenlo ahora. Con un poco de suerte, ahora si van al tab de Impresoras del servidor se va a poder elegir el driver de la impresora. Recuerden el nombre que le ponen a la impresora al instalarla, porque puede ser que lo necesitan más adelante4.
Ahora, si queremos ser capaces de meternos a esa página desde fuera de la LAN y, como en mi caso, estamos usando un router como firewall, entonces tenemos que configurar el router para que acepte las conexiones entrantes del puerto 631 y las redirija al computador en el que está CUPS corriendo. Eso es, por supuesto, casi de perogrullo, pero a mi se me olvidó en su momento y me pasé unos breves segundos de desesperación que espero que ustedes puedan ahorrarse.
Considérense advertidos, eso sí, de que una vez hecho eso, cualquier persona que tenga acceso a la red va a poder imprimir cuantas páginas de prueba quiera a través de la interfaz de esa página. No he revisado bien los modos disponibles para hacer que estos ea un poco más seguro, pero es probable que hayan opciones para seleccionar una lista de usuarios con permiso para conectarse y otros que no lo tengan. Pero eso dejémoslo para una edición posterior de este posteo, debidamente anunciada.
Ahora viene, entonces, la parte fácil: instalar la impresora en los computadores clientes.
Desde Linux, por supuesto, esto es pan comido.
Si están usando Hardy Heron, o alguna versión posterior de Ubuntu, entonces el wizard de creación de nueva impresora debería darles la opción de instalar una impresora remota en CUPS ya sea usando IPP o HTTP.

De ahí, la cosa es realmente fácil y basta con seguir los pasos que vaya indicando el wizard teniendo en mente lo siguiente:
- El hostname es el nombre del dominio asociado al servidor (de la forma algo.dominio.algomas) o la direcció IP del mismo (192.168.1.XXX, ver más arriba).
- El puerto es 631, que es el que CUPS usa por defecto. Me imagino que debe haber modos de cambiarlo para aumentar la seguridad del asunto, pero no sé cómo todavía. Cuando lo sepa, lo pondré aquí.


Si están usando una versión anterior a Hardy es posible que el wizard no les dé las opciones que salen en la foto. Si esto es así seleccionen instalar una impresora de tipo Otro, y consideren que el URI de la impresora será
http://[dominio]:631/printers/[nombre_de_la_impresora]
o
http://[dirección_IP]:631/printers/[nombre_de_la_impresora]
en donde [dominio] es el nombre de dominio asociado al servidor y [dirección_IP] es la dirección IP del mismo, mientras que [nombre_de_la_impresora] es el nombre con el que la instalaron más arriba.
Eso sería.5
Desde Windows XP la cosa es, también, pan comido: basta que elijan instalar una impresora en red conectada a otro computador y, una vez que les pidan el URL/URI, escriben la misma dirección que usarían si estuvieran usando Gutsy, esa que acabamos de ver.


Y listo! Con una configuración así, pueden instalar su impresora desde donde sea que estén y usarla desde cualquier computador que tenga acceso a internet. Pueden también compartir impresoras entre sistemas operativos diferentes y en lugares diferentes del mundo, y hasta controlar los trabajos de sus impresoras desde un navegador cualquiera. ¿Qué más se podría desear?
Espero que les haya funcionado y que hayan disfrutado esta guía. No duden en comentar si es que encuentran problemas o si lo prueban en otros contextos y funciona (cosa que debería pasar, por lo demás). Este sistema lo probé exitosamente en un servidor corriendo Ubuntu 7.10 y pude instalar y usar esa impresora en una instalación remota de Kubuntu 8.04 Hardy Heron, Kubuntu 7.10 Gutsy Gibbon, Windows XP, e incluso en una instalación de Windows XP corriendo sobre Qemu (de ahí salieron los screens). Más adelante vendrá algo sobre lo que fue hacer correr qemu satisfactoriamente.
Hasta entonces!6
Fuente: http://ubuntuforums.org/showthread.php?p=1831119
- No digamos que me faltan de estas en lo relativo a la computación en general y Linux en particular, pero por lo menos aquí no nos topamos con ninguna. [volver]
- EDIT: Desde que escribí esto me han indicado a un rant escrito por Eric Raymond (ESR) acerca de los problemas que tenía CUPS. De hecho, en su posteo (él lo llama ensayo, pero creo que eso es como musho) el pone a CUPS como un ejemplo de mal diseño de interfaces gráficas (refiriéndose a las pantallas que yo muestro y que en este posteo ya se han convertido en casi un ejemplo de facilidad). La verdad es que ahora que lo recuerdo ese posteo yo ya lo había leído, y era el responsable de que yo nunca hubiera querido meterme con las impresoras en Linux. Afortunadamente el tiempo me hizo perder los recuerdos de ese texto, y con ellos los miedos, y logré atreverme a hacerlo yo. En el camino descubrí no sólo que ahora hacerlo es mucho más fácil que entonces, sino también que los gritos de Eric Raymond, con todo lo despreciable que es ese sujeto, no cayeron en saco roto (eso por supuesto sin contar todo lo que aprendí acerca de protocolos de impresión, que es precisamente lo que ESR no quería tener que hacer). [volver]
Estos deberían estar rodeados de < y >, pero el pedazo de software del tercer reich este, que además no sabe HTML, hace lo que quiere con el formato que le doy a mis posteos…[volver]- Aunque claro, va a estar en esta página de todos modos, así que no es necesario que lo anoten ni nada por el estilo. [volver]
- En caso de que tengan que borrar una impresora en Linux, cosa que puede probar ser más difícil de lo que uno pensaría razonable, basta con ejecutar
sudo lpadmin -x nombredelaimpresora, y san se acabó. [volver] WordPress es una mierda.EDIT: Desde entonces, además, he logrado desactivar el maldito editor WYSIWYG de Wordpress que era la fuente de todo mal. Este mismo posteo, por ejemplo, ahora está tal y como yo lo quería, sin nada fuera de lugar ni soluciones parches de nada. Por eso, me corrijo: Wordpress no es una mierda. Era una mierda. [volver]
May 24th, 2008 at 1:37 pm
MUCHÍSIMAS gracias.
Andaba buscando esto, de manera de poder imprimir en mi impresora paralela en el laptop que no tiene puerto paralelo (lo intenté hace un tiempo, pero me rendí después rápido (después de todo todo esa vez no era para mí si no para mi madre)).
Bueno.
Mi madre y Alberto te lo agradecerán.
PD: Cambié el blog.
May 26th, 2008 at 2:05 am
El placer es mío. Debe haber pocas cosas más reconfortantes que lograr hacer lo que se quiere después de intentarlo incesantemente sin éxito.
¿Ya lo trataste de hacer? ¿Te funcionó?
June 5th, 2008 at 12:32 am
[…] Para seguir con los consejos computacionales (como el del posteo sobre CUPS), hoy instalaremos y configuraremos QEMU para que corra con KQEMU, y lo dejaremos listo para instalar básicamente lo que quieran. […]