jueves, 28 de junio de 2012

Wallpapers dinámicos en Ubuntu 12.04

Tenía ganas de hacer una pequeña aplicación que descargue imágenes de algún sitio y las pongo como wallpaper cada x cantidad de tiempo. Específicamente tenía ganas de actualizar el fondo del escritorio con imágenes de las webcams de San Martin de los Andes o el cerro Chapelco.

Ya que no puedo ir a Chapelco, al menos lo veo desde la compu.
Antes de programar ni siquiera una línea me encontré con algo que me resolvió el problema automáticamente: el escritorio detecta cuando el archivo que elegiste como wallpaper cambia, y en ese caso refresca la pantalla (y el esquema de colores de Unity). No tengo idea cuanto hace que esta funcionalidad esta disponible, pero funciona, y no tuve que hacer nada.

Entonces, el 'secreto' de un wallpaper que se actualice automáticamente en base a una webcam (en este caso) o cualquier otra fuente de imagenes:

Primero, guarda una imagen cualquiera en algun directorio y seteala como wallpaper. En mi caso (y en los futuros ejemplos) use Pictures/wallpaper.jpg dentro de mi home.

Lo siguiente es bajar la imagen que queres y pisar la imágen que seteaste como fondo de pantalla:

$ IMG="http://www.chapelco.com/camara1600/camara1600/cam1600i.jpg"
$ wget -q -O /tmp/temp.jpg $IMG
$ cp /tmp/temp.jpg /home/gabriel/Pictures/wallpaper.jpg
$ rm /tmp/temp.jpg

El escritorio con el fondo automatizado.
Después de hacer una prueba y ver que funcionó, lo ponés en tu crontab y listo:

$ crontab -e
...
IMG="http://www.chapelco.com/camara1600/camara1600/cam1600i.jpg"
*/5 * * * * wget -q -O /tmp/temp.jpg $IMG; cp /tmp/temp.jpg /home/gabriel/Pictures/wallpaper.jpg; rm /tmp/temp.jpg

Lo bueno es que si buscas una webcam de una zona cercana a la tuya, tenes un fondo de pantalla que no solo te muestra el clima sino que se hace oscuro de noche, lo cual es bastante cómodo cuando trabajas con la luz apagada.

De noche todo se vuelve blanco y negro.

Dos temas a tener en cuenta:
  • Bajo la imagen en el directorio /tmp porque a veces tarda en bajarla y si gnome (o quien sea) trata de pintar el fondo con una imagen a medio bajar, te va a quedar medio feo.
  • Después de bajar la imagen, probé moviéndola a la ubicación definitiva y no siempre funcionó, pero copiéndola si. No me interesó saber por que, si lo sabes comentalo.

Actualización:

Si no tenés conexión a internet en el momento que tratás de bajar el archivo, te va a pisar el fondo de pantalla con un archivo vacío. Para evitar esto, hay que hacer que el copiado del archivo temporal sea condicional:

$ [ `stat -c %s /tmp/temp.jpg` -gt 0 ] && cp /tmp/temp.jpg /home/gabriel/Pictures/wallpaper.jpg

El comanto stat -c %s devuelve el tamaño en bytes del archivo bajado, entonces solo copiamos el archivo si su tamaño es mayor a cero.