Como montar un terminal Kiosk con debian y firefox

No suelo escribir sobre mi trabajo…pero esta semana como caso excepcional, he estado haciendo tareas de administrador de sistemas, en lugar de programar…y he tenido que enfrentarme a un problema bastante complejo, que pensaba que estaría mas documentado, pero no….

El problema es como modificar un debian, para que nada mas encenderlo autoconfigure la wifi (esto es fácil), muestre una pantalla visual con el logo de la empresa o organización mientras carga el sistema, y cuando acabe, ejecutar un firefox a pantalla completa, del que no se pueda salir para nada, y tampoco de cerrar las X, es decir, el terminal se convierte en un firefox en pantalla completa. A esto se le llama terminal kiosk.

Este artículo no cubre la parte de configurar las X o la red en debian, ya que se supone que si intentas montar un kiosk con debian, entiendes mas o menos como configurar el sistema básico usando esta distro linux.

Existen varios documentos acerca de como conseguir esto en debian, sin embargo se complican demasiado, están desactualizados o son erróneos en mayor o menor medida, así que he decidido documentar como lo he hecho yo, ya que me ha quedado bastante bien, y no requiere mucho trabajo.

El primer paso es instalar debian, etch o lenny, con el cd normal de instalación que podemos descargar de la web, al escoger los conjuntos de paquetes a instalar, solo dejamos marcado sistema base y equipo portátil si es un ordenador portátil.

Al terminar la instalación, tendremos un sistema que inicia y muestra un login en consola, y al hacer login obtenemos una consola, nada mas.

Configuramos la red según las necesidades, antes de continuar, y despues de configurar la red…

El primer paso es modificar el fichero /etc/apt/sources.list que contiene los repositorios de paquetes que utilizará aptitude para instalar software, lo dejamos así:

deb http://http.us.debian.org/debian etch main contrib non-free

Si estamos usando etch, o bien:

deb http://http.us.debian.org/debian lenny main contrib non-free

Si estamos utilizando lenny.

Ahora actualizamos la lista de paquetes:

apt-get update

Ahora ya tenemos la lista de paquetes actualizados, instalamos:

apt-get install xserver-xorg mingetty iceweasel

Esto instala las X y firefox, además de mingetty que ahora veremos que hace, y firefox, que en debian se llama iceweasel, por problemas de licencias.

Una vez instalados, creamos un nuevo usuario, lo llamamos kiosk por ejemplo, hacemos:

su kiosk

Para pasarnos a su cuenta, y creamos dos archivos en su home, uno llamado .bash_profile, que contenga:

while true
do
startx
done

Eso es un bucle en bash que ejecuta las X infinitamente, por lo que si por algún las X se cerrasen, volverían a lanzarse automaticamente.

El archivo .bash_profile contiene comandos a ejecutar cuando el usuario kisok inicia sesión (solo si su consola es bash, como es el caso en debian)

Ahora que ya hemos configurado que cuando “kiosk” haga login se ejecuten las X, vamos a configurar que es es lo que se ejecutará encima de las X, es decir, ni gnome, ni kde, sino que editamos el archivo /home/kiosk/.xinitrc e introducimos:

iceweasel

Esto hará que el usuario obtenga un iceweasel inmediatamente encima de las X.

Navegamos con ese firefox e instalamos la extensión r-kiosk, la cual pone el modo pantalla por defecto, del cual no se podrá salir, no permite descargar archivos y no permite salir del firefox de ninguna manera.

Ahora ya tenemos que cada vez que kiosk haga login, se ejecutarán las X, se ejecutará un firefox encima, y se pondrá a pantalla completa, sin que se pueda salir de el, solo nos falta hacer que kiosk haga login automáticamente nada mas arrancar el sistema, para ello editamos el fichero /etc/inittab y modificamos:

1:23:respawn:/sbin/getty 38400 tty1
2:23:respawn:/sbin/getty 38400 tty2
3:23:respawn:/sbin/getty 38400 tty3
4:23:respawn:/sbin/getty 38400 tty4
5:23:respawn:/sbin/getty 38400 tty5
6:23:respawn:/sbin/getty 38400 tty6

Cambiandolo por:

1:23:respawn:/sbin/mingetty –autologin kiosk tty1
#2:23:respawn:/sbin/getty 38400 tty2
#3:23:respawn:/sbin/getty 38400 tty3
#4:23:respawn:/sbin/getty 38400 tty4
#5:23:respawn:/sbin/getty 38400 tty5
#6:23:respawn:/sbin/getty 38400 tty6

Esto hará que nada mas iniciar debian, sea el usuario kiosk quien inicie sesión, sin que lleguemos a ver la pantalla de login.

Ahora solo nos falta instalar splashy, lo cual solo es posible si hemos hecho todo lo anterior con lenny, por que en etch no hay paquete de splashy en aptitude:

apt-get install splashy

Splashy lo que hace es situar una pantalla gráfica que se muestra con una barra de progreso, mientras inicia debian, en luga de mostrar texto en el arranque.

Si queremos modificar la imagen que mostrará splashy al iniciar el sistema, solo hay que sustituir:

/etc/splashy/themes/default/background.png

Por un png nuestro, que debe ser de 1024×768, una vez sustituido debemos regenerar initram, con:

update-initramfs -u -t

Para que splashy funcione, hay que modificar nuestro /boot/grub/menu.lst y agregar: vga=791 splash al final de los parametros pasados al kernel en el arranque, es decir, cambiar algo similar a esto:

kernel        /boot/vmlinuz-2.6.24-19-generic […]

Por:

kernel        /boot/vmlinuz-2.6.24-19-generic […] vga=791 splash

Ahora ya tenemos nuestro splashy listo.

Si queremos deshabilitar el ctrl+alt+backspace que detiene las X, solo hemos de agregar:

SectionServerFlags
Option “DontZap
EndSection

A nuestro /etc/X11/xorg.conf, pero en realidad no hace falta, por que ejecutamos startx dentro de un bucle :)

También podría ser interesante que configuréis grub para pedir password antes de editar ningún parámetro de inicialización, pero eso ya entra dentro de temas específicos de las necesidades de cada uno.

Como vemos, montar un kiosk con debian es muy fácil, son las bondades del software libre.

13 thoughts on “Como montar un terminal Kiosk con debian y firefox

  1. Vaya muy interesante y muy facil, ademas del detalle de lanzar solamente iceweasel (no sabia que se pudiera hacer).

    Me lo apunto porque seria una opcion perfecta para un equipo publico que pudieran usar los clientes de la tienda donde trabajo.

    Gracias por compartirlo.

    Saludos.

  2. ja, no pense que alguien queria hacer exactamente lo mismo que yo. buenisima la info lo estoy haciendo con slax desde minicomputer con solo un usb, son terminales bobas para ver solo un sitio. gracias d nuevo

  3. Una pregunta: ¿se sigue pudiendo cambiar el terminal? Por que si es un equipo público y aparece algun listillo podría dejar el equipo mostrando una tty esperando un login.. haciendo que el equipo sea inservible para los no iniciados.. ¿Como se haría para evitar eso? (Solo se me ocurre iniciar manualmente el firefox en todas las tty.. pero si el equipo se reinicia por un corte de tensión.. después de eso ya no estaría cargado en las otras ttys..

    Segunda pregunt, viene por esto (Nota del complemento R-Kiosk):

    Notice that the user can still close Firefox with for example Alt-F4 and get access to your computer. You might want to prevent this with a suitable utility program for your operating system.

    ¿Qué pasa cuando se cierra Firefox? ¿Se cierran las X con él y entonces el bucle que has creado hace su magia?

    Weno, que soy un pesado, jeje, lo probaré yo mismo. Muy interesante el artículo! :D

  4. Hola castarco, gracias por el comentario.

    Es importante elimianr el archivo keys de ~/.fluxbox/keys para que no exista alt+f4 ni nada de eso, además, en caso de que firefox pete por lo que sea, se finalizarían las X, y el bucle haría su magia, comprobado :)

    El tema del tty es mas complejo, se sigue pudiendo cambiar de tty, lo que dejaría el terminal inservible, hasta que alguien vaya y lo vuelva a poner en el tty1, la única solución es crear un programa que salte al terminal uno al ser ejecutado, y ponerlo en el resto de terminales, pero esto ya es mas complejo.

    Suerte!

  5. Suponiendo que inittab este tal y como tu decías no existen mas tty’s que la 1, no? el resto están todas comentadas, no deberían arrancar, no?

    1:23:respawn:/sbin/mingetty –autologin kiosk tty1
    #2:23:respawn:/sbin/getty 38400 tty2
    #3:23:respawn:/sbin/getty 38400 tty3
    #4:23:respawn:/sbin/getty 38400 tty4
    #5:23:respawn:/sbin/getty 38400 tty5
    #6:23:respawn:/sbin/getty 38400 tty6

    saludOS
    ugaitzg

  6. hola ugaitzg, gracias por el comentario.

    En realidad, pese a que están quitadas, si intentas acceder a ellas, en algunos sistemas se ve la pantalla en negro sin nada, al saltar a ellas, en la mayoría, no puedes ni saltar a ellas :)

  7. Perfecto!

    Pero ahora, sale el navegador, y debajo la pantalla fea de las X. Esto se puede personalizar, es decir que las X tengan un fondo por defecto un poco más vistoso??

    saludos y gracias!

  8. Hola:
    Magnifico artículo. Sencillo.

    ¿Podria, en vez de firefox, ejecutar una aplicación Java?

    ¿como?. Sin cargar gnome.

    Gracias

  9. Hola, buen artículo.

    Lo he seguido paso a paso, y va todo OK, salvo que firefox no cubre toda la pantalla, aunque esté a pantalla completa, en la parte de la derecha queda una franja y se ve la pantalla de las X. ¿Como podría extender firefox a toda la pantalla?

Deja un comentario

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