jueves, 4 de agosto de 2011

Cambiar Wallpaper en Gnome con Ruby

Bueno he aquí un pequeño script de ruby para cambiar el fondo de pantalla de un escritorio de Gnome, para ejecutarlo solo es necesario escribir en una terminal el siguiente comando:

ruby wallpaperDaemon.rb parametro1 parametro2 parametro3..N&

donde
parametro1     = Ruta en la cual se encuentran las imágenes para el fondo de pantalla
parametro2     = Tiempo en segundos para realizar el cambio de pantalla
parametro3..N = Extensión de archivos a ser tomadas en cuenta para cambiar el fondo de pantalla
&                   = Escribir al final para que se ejecute en segundo plano

Por ejemplo el comando completo para ejecutar el script seria:

ruby wallpaperDaemon.rb /home/alfredo/Imágenes/Wallpaper/ 10 png jpg bmp jpeg&




#!/usr/bin/env ruby

require 'rubygems'
require 'gconf2'

class WallpaperChanger
   def initialize(w_ruta)
      @w_directorio = w_ruta
      @w_tipos = []
      @w_imagenes = []
   end

   def buscarWallpaper
      buscarDirTipo(@w_directorio)
   end

   def wallpaperAleatorio()
      w_cliente = GConf::Client.default
      w_min = 0
      w_max = @w_imagenes.size-1
      w_cliente['/desktop/gnome/background/picture_filename'] = @w_imagenes[rand(w_min+rand(w_max))]
   end

   def agregarTipo(w_tipo)
      if @w_tipos.include?(w_tipo)
         puts "#{w_tipo} ya se ha ingresado"
      else
         @w_tipos.push(w_tipo)
      end
   end

   private
   def buscarDirTipo(w_directorio)
      Dir.new(w_directorio).each do |w_archivo|
         w_ruta = w_directorio + '/' + w_archivo
         unless (w_archivo =~ /^\.+/)
            File.directory?(w_ruta) ? buscarDirTipo(w_ruta) : verificarTipo(w_ruta)
         end
      end
   end

   def verificarTipo(w_archivo)
      @w_tipos.each do |extension|
         if w_archivo.end_with?(extension)
            agregarImagen(w_archivo)
         end    
      end
   end

   def agregarImagen(w_archivo)
      @w_imagenes.push(w_archivo)
   end
end

#REVISO LA EXISTENCIA DEL DIRECTORIO
if File.directory? ARGV[0]
   w_directorio = ARGV[0]
else
   raise 'Directorio no valido'
end

#VALIDO EL TIEMPO PARA CAMBIAR EL FONDO DE PANTALLA
if /[1-9][0-9]*/ =~ ARGV[1]
   w_tiempo = ARGV[1].to_i
else
   raise 'Tiempo no valido'
end

#CREANDO EL CAMBIADOR DE WALLPAPER
w_wallpaper = WallpaperChanger.new(w_directorio)

#AGREGANDO LOS TIPO DE EXTENSIONES DISPONIBLES
2.upto(ARGV.size-1) {|parametro| w_wallpaper.agregarTipo(ARGV[parametro])}

#BUSCO ARCHIVOS QUE COINCIDAN CON LOS TIPOS INGRESADOS
w_wallpaper.buscarWallpaper

loop do
   w_wallpaper.wallpaperAleatorio
   sleep(w_tiempo)
end


Megaupload: http://www.megaupload.com/?d=BB3700PD

2 comentarios:

  1. Muy bueno aunque si funcionara en Unity seria mejor. De todos modos gracias por compartir

    ResponderEliminar
  2. Hola, soy David de España y quería decirte que me gusta este blog, yo también estoy aprendiendo Ruby, y que he puesto un enlace hacia este blog en mi página sobre este lenguaje de programación en: http://ruby.obdnet.com

    Un saludo. David.

    ResponderEliminar