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:



viernes, 21 de enero de 2011

MRTG OWA Exchange


Monitorizar usuarios OWA Exchange desde Linux


Desde hace tiempo utilizo para monitorizar mis Servidores Exchange 2007 lo siguiente:

MRTG + Perl + Nsclient + check_nt, desde un entorno Linux Gentoo.

La idea es tener en unas gráficas MRTG las estadísticas de usuarios OWA conectados, Mensajes de Entrada y Salida desde y hacia Internet y mensajes entregados locales a un dominio.

En este artículo voy a configurar los pasos necesarios para saber los usuarios conectados mediante OWA, los pasos serían:

Instalamos MRTG

emerge mrtg

Instalamos o nos bajamos la utilidad check_nt, sirve para interrogar o preguntar por contadores de máquinas Windows y poder sacar la información necesaria. Es un ejecutable que viene dentro de software como nagios o cacti, quizás se pueda localizar individualmente y copiarlo al directorio donde van a estar los scripts.

Configuramos los equipos Windows para que acepten nuestras peticiones, para ello es necesario tener arrancado el servicio:

SNMP Service

En SNMP Service, tenemos que configurar dentro de propiedades de servicio la pestaña “Security” ponemos en “Accept SNMP packets from these host” y poner la dirección IP de la máquina que va a solicitar los datos:

Ahora tenemos que hacer un scripts en perl que nos permita realizar la interrogación al Servidor de los contadores necesarios para obtener los datos. Al realizarse desde un equipo Linux, perl ya viene instalado y no es necesario instalarlo.

Hay que tener claros los contadores necesarios para proceso en este caso yo voy a poner un ejemplo de los usuarios conectados por OWA a Exchange.

El script sería el siguiente:

#!/usr/bin/perl
# Replace '/var/www/localhost/htdocs/cacti/scripts/check_nt' with the localtion where your check_nt binary is located
$OWAUsers = `/var/www/localhost/htdocs/cacti/scripts/check_nt -H 192.168.1.17 -p 1248 -v COUNTER -l "\\MSExchange OWA\\Current Unique Users"`;
chomp $OWAUsers; # 192.168.1.17 es el servidor OWA
print $OWAUsers . "\n" ; # Usurios OWA concurrentes

Tenemos que dar al fichero derechos de ejecución: chmod +x usuarios_2007.pl
Recordar que MRTG necesita o procesa para sus gráficas solo 2 valores, el primero lo interpreta como Entrada y el segundo como Salida, en este caso al ser usuarios conectados solo necesitamos un valor.

Este script se ejecuta desde un fichero cfg de MRTG, el cual recoge los datos y genera en el directorio de trabajo las gráficas.

El script sería el siguiente:
WorkDir: /var/www/localhost/htdocs/mrtg
Language: spanish
Target[owa.ex04]: `/var/www/localhost/htdocs/scripts/usuarios_2007.pl`
PageTop[owa.ex04]: <h1>Conexiones OWA</h1>
Options[owa.ex04]: growright, nopercent, gauge
MaxBytes[owa.ex04]: 200
Colours[owa.ex04]: GREEN#00eb0c,BLUE#0000ff,GRAY#AAAAAA,VIOLET#ff00ff
#Colours[owa.ex04]: 8d00ba,BLUE#0000ff,GRAY#AAAAAA,VIOLET#ff00ff
Title[owa.ex04]: Conexiones OWA
YLegend[owa.ex04]: Usuarios
LegendO[owa.ex04]: Usuarios
Legend2[owa.ex04]: Usuarios

ShortLegend[owa.ex04]: Usuarios 


El cfg lanza el script de perl que se encuentra en /var/www/localhost/htdocs/scripts/ y genera el fichero owa.ex04.html con la gráfica correspondiente

El resultado es el siguiente:

Ya solo falta añadir la ejecución al cron para que se ejecute en el tiempo estimado, en mi caso cada 5 minutos.
*/5    *    *    *    *    /etc/mrtg/cron/cron


Donde el fichero  /etc/mrtg/cron/cron tiene una entrada que ejecuta el proceso env LANG=C /usr/bin/mrtg /etc/mrtg/owa.cfg
Bueno espero que se entienda el procedimiento, es mi primer artículo publicado.
Más adelante explicare otros ejemplos para interrogar otros contadores.