La Tierra no es una herencia de nuestros padres sino un préstamo de nuestros hijos

martes, 25 de enero de 2011

Xplanet Escritorio Dinámico

El presente artículo pretende explicar como configurar Xplanet y ponerlo como escritorio dinámico.

Xpanet es una aplicación que funciona tanto en Windows como en Linux, yo me voy a centrar en su instalación en un equipo Linux y concretamente bajo la distribución Gentoo.

Xplanet consiste en una especie de planetario, se pueden ver los planetas desde distintas perspectivas, las estrellas, los satélites, ..... e integrarlo dentro de tu escritorio de trabajo.

Voy a explicar como configurar el escritorio Gnome para ver los Planetas, fusionar las Imágenes de las nubes actuales (EUMETSAT) combinándolas con una imagen de la Tierra. Xplanet genera o combina ambas imágenes en una sola, al estilo de cualquier web del tiempo y que el escritorio cambie en un intervalo definido para que unas veces muestre esta imagen, y otras distintas vistas tanto de la Tierra como del resto de planetas, también se pueden añadir las coordenadas de distintos puntos de interés para hacerlo más atractivo o vistoso.




Los pasos son los siguientes:

Instalación de Xplanet

Es necesario para que se vean bien los textos instalar con las USEs truetype truetype-fonts
USE=" truetype truetype-fonts " emerge xplanet

Configuración

Los ficheros de configuración son los siguientes:


En /home/USUARIO/xplanet  está el fichero default, en este  fichero se indican, entre otras cosas, el fichero de las nubes (clouds_2048.jpg), el de la Tierra cuando es de día (earth_2400.jpg) cuando es de noche (night-dark.jpg), el fichero que contiene los lugares que se quieren poner (lugares.loc), los nombres de los Planetas si se quieren traducir, .... y otros valores que están mejor explicados en su web

[default]
color=gray

[earth]
"La Tierra"
cloud_gamma=2
cloud_map=clouds_2048.jpg
bump_map=bump.png
bump_scale=2
specular_map=earthspec.png
map=earth_2400.jpg
cloud_threshold=90
magnify=60
marker_file=lugares.loc
night_map=night-dark.jpg

[moon]
"La Luna"
draw_orbit=false
magnify=15
color={100, 100, 100}
orbit={-.51,.5,2}

[mars]
"Marte"
[Sun]
"Sol"
saturn]
"Saturno"
[mercury]
"Mercurio"
[jupiter]
"Jupiter"
[io]
"Io"
[neptune]
"Neptuno"
[pluto]
"Pluton"
[Uranus]
"Urano"
[titan]
"Titan"



En /home/USUARIO/xplanet  está el fichero xplanet.conf, adjunto pongo los valores que yo tengo configurados, lo más importante son las variables  donde se indican los directorios de trabajo: XPLANET_DIR, searchdir, TMPDIR para luego poder buscar o copiar ficheros guardados.

.
.
XPLANET_DIR            = /home/USUARIO/xplanet/images
searchdir                      =/home/jUSUARIO/xplanet
# 0 fuera de USA
US                                = 0
TMPDIR                       = /home/USUARIO/xplanet
FORECAST_WEATHERCOM_CODE       = 80401
# 0 Actualizaciones automaticas desactivado
AUTO_UPDATE                    = 0

.
.


Muchas de las opciones que aparecen en estos dos ficheros se pueden pasar como parámetros en el script que ejecuto dentro de "Aplicaciones al Inicio" y que se encarga de poner la imagen en el escritorio, por eso ahora no los comento.

En /home/USUARIO/xplanet  está el fichero lugares.loc, en él es donde se indican lugares de interés en coordenadas y que xplanet se encarga de poner cuando genera el gráfico. A parte de poner las coordenadas se pueden poder distintos colores, la alineación, la hora local y otras opciones.

.
.
# Mis Lugares
40.4167 -3.7167 "Madrid %H:%M"  timezone=Europe/Madrid  align=below
#41.4167  2.1667 "Barcelona"
55.56 -3.11 "Edinburgo"     align=above
59.56  30.20  "San Petersburgo"
#35.28 -6.2  "Asilah"
64.08 -21.56 "Reikiavik" align=left
46.36 -120.29  "Washington"
-34.81  20.01 "Cabo Agulhas"  color=coral3
-2.9833  38.4667 "Tsavo" color=0xffc050
-2.3333  34.8333 "Serengeti"  color=0xffc050
-3.0660  37.3720  "Kilimanjaro" color=0x00ff00

# Polos geográficos
  90.00    0.00 "Polo Norte"             color=0x9ff1ff          # Polo norte
 -90.00    0.00 "Polo Sur"                color=0x9ff1ff          # Polo sur

# Récords naturales
  53.61  108.29 "Baikal"                  color=0xffc050          # Lago más profundo, 1,637 m (Rusia)
  27.98   86.93 "Everest %H:%M"     color=0xffc050     timezone=Asia/Katmandu  
  15.12  147.50 "Fosa Mariana"        color=0xffc050   
 -25.69  -54.42 "Iguazu"                 color=0xffc050          # Cataratas más grandes (Argentina, Brasil)
  19.41 -155.28 "Kilauea"                color=0xffc050          # Volcán más activo (Hawaii, USA)
  30.45    6.68 "Sahara"                  color=0xffc050               
.
.

En /home/USUARIO/xplanet  está el fichero cambiarfondo

Este es el script que se encarga de poner el fondo de pantalla en el escritorio, el script puede mejorarse es muy básico, la idea es que modifique cada x tiempo el fondo de pantalla y de la sensación de dinamismo


#!/bin/bash
# Add this script to System->Preferences->Sessions->Startup Programs
# Tiempo definido y que genera un nuevo fono de pantalla
sleep=10m
# La resolucion de la pantalla
geometry=1680x1050

Longitud y Latitud de inicio
LONGITUDE=10
LATITUDE=30

# where to keep the desktop image
prefix=${HOME}/.gnome2_private/
logFile=${prefix}/xplanet.log

# Nombre de la imagen del escritorio
base=xplanet
extension=png

# check to see if we're still logged in
loggedIn=$(ps U $USER | grep gnome-session|grep -v grep)
if [ -z "$loggedIn" ]; then
    echo "exiting at $(date)" >> $logFile
    exit
fi

# Alternate between two filenames
append=2
first=${base}.${extension}
second=${base}${append}.${extension}


# Variable que tiene el nombre de la imagen
currentBackground=$(basename $(gconftool-2 -g /desktop/gnome/background/picture_filename))

# Set the name of the output file to be different than the current background
if [ $currentBackground != $first ]; then
   outputFile=${prefix}/${first}
else
    outputFile=${prefix}/${second}
fi

# Se borra la imagen antigua
rmFile=${prefix}/${currentBackground}

### Definición variables para cambiar de planeta en escritorio #

# Asignamos a un array los nombre de algunos planetas
planetas[0]="earth"
planetas[1]="saturn"
planetas[2]="mars"
planetas[3]="jupiter"
planetas[4]="mercury"
planetas[5]="venus"
planetas[6]="pluto"
planetas[7]="titan"
planetas[8]="neptune"
planetas[9]="uranus"

# Función que genera un número aleatorio, se trata de tener un numero diferente cada x tiempo para
#que el escritorio cambie con cada intervalo y se vea dinámico, al final se hace una división para usar #el resto como valor que buscará el el array de planetas la entrada correspondiente
un_numero=`expr $RANDOM % 1000`
su_resto=`expr $un_numero % 7`

sum=$((su_resto+15))

un_numero=`expr $sum % 7`

FECHA=$(date)  
echo $FECHA >> $logFile

if [ $un_numero = 6 ]; then
   sum2=`expr $RANDOM % 9`
   nombre=${planetas[${sum2}]}
fi
 

# generamos un fichero con los datos por si se quiere revisar
echo $un_numero >> $logFile
echo $sum2 >> $logFile
echo $nombre >> $logFile


#En funcion del valor se genera una imagen u otra
case $un_numero in
  0)
      xplanet -num_times 1 -output $outputFile -geometry $geometry -radius 30  -range 125 -longitude 190 -latitude 20 -north orbit -label -labelpos -5+30  >> $logFile ;;
  1)
        xplanet -num_times 1 -output $outputFile -geometry $geometry -longitude $LONGITUDE -latitude $LATITUDE -radius 30 -range 225 -label -labelpos -5+30 >> $logFile ;;
  2)
      xplanet -num_times 1 -output $outputFile -geometry $geometry -radius 30 -longitude $LONGITUDE -latitude $LATITUDE -north orbit -label -labelpos -5+30  >> $logFile ;;
  3)
      xplanet -num_times 1 -output $outputFile -geometry $geometry -radius 30 -longitude 160 -latitude 20 -north orbit -label -labelpos -5+30  >> $logFile ;;
  4)
      xplanet -num_times 1 -output $outputFile -geometry $geometry -origin saturn -body moon -north orbit -radius 3 -range 325  -label -labelpos -5+30 >> $logFile ;;
  5)
     xplanet -num_times 1 -output $outputFile -geometry $geometry -origin neptune -body sun -north orbit -radius 1 -range 30  -label -labelpos -5+30 >> $logFile ;;
  6)
      xplanet -num_times 1 -output $outputFile -geometry $geometry -origin sun -body $nombre -north orbit -radius 15 -range 100 -fontsize 11 -label -labelpos -5+30 >> $logFile ;;
  7)
      xplanet -num_times 1 -output $outputFile -geometry $geometry -origin saturn -body moon -north orbit -radius 3 -range 525  -label -labelpos -5+30 >> $logFile ;;
  8)
    xplanet -num_times 1 -output $outputFile -geometry $geometry -longitude $LONGITUDE -latitude $LATITUDE -radius 39 -label -labelpos -5+30 >> $logFile ;;
  9)
      xplanet -light_time -tt -output $outputFile -geometry $geometry -origin saturn -body moon  -north orbit  -radius 3 -range 525 -label -labelpos -5+30  >> $logFile ;;
  *)   
        xplanet -num_times 1 -output $outputFile -geometry $geometry -origin sun -body $nombre -north orbit -radius 3 -range 325  -label -labelpos -5+30 >> $logFile ;;
esac

# se actualiza el escritorio con la imagen generada
gconftool-2 -t str -s /desktop/gnome/background/picture_filename $outputFile


# Now get rid of the previous background
if [ -e $rmFile ]; then
    sleep 1
    /bin/rm $rmFile
fi

sleep ${sleep}

# Run this script again
exec $0


Damos derechos de ejecución al fichero cambiarfondo para que se ejecute: chmod +x cambiarfondo

Desde el menú de Gnome, nos vamos a "Sistema -> Preferencias -> Aplicaciones al Inicio y pulsamos en Añadir, ponemos un nombre de Aplicación y ponemos la línea del comando a ejecutar en cada inicio /home/jrabadan/xplanet/cambiarfondo &

Ya solo nos queda que se actualice el fichero de las nubes con la foto del satélite y listo, tendremos un escritorio que cambiará según nos guste y donde podamos saber en todo momento el mapa de nubes actualizado.

Creamos un fichero para la descarga de imágenes en /home/USUARIO/xplanet llamado imagenes

#!/usr/bin/python
# -*- coding: iso-8859-1 -*-

# Download coulds map for xplanet from a random mirror, optionally
# save the one to archive directory.
#
# Usage:
#   python download_clouds.py - to save the output as clouds_2048.jpg
#   python download_coulds.py output.jpg - to save the output as output.jpg
#
# (C) 2004 Michal Pasternak <michal@pasternak.w.lub.pl>
#
# This file is in public domain.
# Basado en: http://xplanet.sourceforge.net/Extras/download_clouds.py v1.1
# Modificado por:
# (C) 2006 David Villa Alises <David.Villa@uclm.es>
# Mejoras:
# - comprueba que la imagen descargada tiene al menos un tamaño #razonable.
# - no cambia la imagen si no puede descargar otra más reciente.
# - intenta con todos los mirrors si es necesario *sin repetir*
#
# TODO:
# - comprobar que la imagen está bien con imagemagick o similar.
# - comprobar los mirrors y apuntar en un fichero de log cuales fallan.


#### user-tunable parameters:

# how often to download the image?
maxDownloadPeriod = 3 * 3600

# how many times to retry if download fails (each time tries using a
# different mirror)
maxRetries = 3

# default filename of the output file (in current directory). You can
# specify it on the command line
#outputFile = "/usr/local/xplanet/clouds_2048.jpg"
outputFile = "/home/jrabadan/xplanet/images/clouds_2048.jpg"

# archive dir - where to save old files or None for not archive
#archiveDir = "/usr/local/xplanet/cloudsArchive"
archiveDir = "/home/jrabadan/xplanet/images"

# The list of mirrors. Add new ones here.
mirrors = [
    "http://xplanet.sourceforge.net/clouds/clouds_2048.jpg",
     "http://enekyn.com/xplanet/clouds_2048.php",
    "http://giga.forfun.net/clouds_2048.jpg",
    "http://home.megapass.co.kr/~gitto88/cloud_data/clouds_2048.jpg",
    "http://myhome.hanafos.com/~hyoungkee/cloud_data/clouds_2048.jpg",
    "http://myhome.hanafos.com/~ykim59/cloud_data/clouds_2048.jpg",
    "http://rcswww.urz.tu-dresden.de/~es179238/clouds_2048.jpg",
    "http://user.chol.com/~winxplanet/cloud_data/clouds_2048.jpg",
    "http://userpage.fu-berlin.de/~jml/clouds_2048.jpg",
    "http://www.nmt.edu/~houdini/clouds_2048.jpg",
    "http://www.ruwenzori.net/earth/clouds_2048.jpg",
    "http://www.wizabit.eclipse.co.uk/xplanet/files/mirror/clouds_2048.jpg",
    "http://xplanet.arculeo.com/clouds_2048.jpg",
    "http://xplanet.dyndns.org/clouds/clouds_2048.jpg",
    "http://xplanet.nerp.net/clouds_2048.php"]


import random, urllib, sys, stat, time, os
import shutil

def archiveImage(fname):
    timestamp =  time.strftime("%Y%m%d-%H:%M")
    archName = os.path.join(archiveDir, timestamp + ".jpg")
    log = open(os.path.join(archiveDir, "log"), "a+")
    log.write("%s:%s\n" % (timestamp, url))
    log.close()
    sys.stderr.write("Archivizing to %s...\n" % archName)
    shutil.copy(fname, archName)


# set output file name
if len(sys.argv) == 2:
    outputFile = sys.argv[1]

# check if the file exists and is old enough to overwrite
mtime = 0
found = False
try:
    mtime = os.stat(outputFile)[stat.ST_MTIME]
    found = True
    print "Last file found. date:'%s'" % (time.ctime(mtime))
except OSError:
    print "Last file not found"

print 'File age: %d minutes' % ((time.time() - mtime) / 60)
   
if time.time() - mtime < maxDownloadPeriod and len(sys.argv) == 1:
    sys.stderr.write("File is already up to date!\n")
    sys.exit(0)

tempFile = "/tmp/clouds.jpg"
random.shuffle(mirrors)
for url in mirrors:
    try:
        sys.stderr.write("Downloading '%s'... " % url)
        urllib.urlretrieve(url, tempFile)
    except IOError:
        sys.stderr.write('FAIL\n')
    continue

    sys.stderr.write('OK!\n')
   
    filesize = os.stat(tempFile)[stat.ST_SIZE]
    if  filesize < 300000:
        sys.stderr.write("Error: suspicious file size:'%dB', trying other source\n" % filesize)
    continue
   
    shutil.move(tempFile, outputFile)
    if archiveDir: archiveImage(outputFile)
    break
  

Añadimos al cron una entrada donde pongamos la planificación horaria, en mi caso cada 50'
*/50    *    *    *    *    /home/USUARIO/xplanet/imagenes

Y nada tenemos un escritorio que cambia cada cierto tiempo.

Espero que os guste y si encontráis cualquier cosa mejorable se agradecen  los comentarios.

El resultado sería:



No hay comentarios:

Publicar un comentario