domingo, 8 de junio de 2008

Gnome: Coloca un "wallpaper" desde la línea de comandos

Para cambiar el fondo de escritorio de Gnome desde la línea de comandos, puedes usar gconftool-2, la sintaxis para cambiar el fondo es:
gconftool-2 -s /desktop/gnome/background/picture_filename -t string nuevo_fondo
Ahora bien, mi objetivo es crear un script en bash que ofrezca las siguientes funcionalidades:
  1. Establecer un fondo de pantalla aleatoro.
    1. Sólo usar imágenes jpg o png.
    2. Verificar que el directorio fuente exista.
  2. Cambiar automáticamente el fondo cada cierto tiempo (me aburre ver siempre lo mismo).
    1. Usando el archivo .bash_profile, para cambiar el fondo en cada inicio se sesión.
    2. Usando cron, para establecer un intervalo de tiempo más personalizado.
  3. Establecer un color de fondo.
  4. Ajustar el tamaño de la imagen, de acuerdo a la resolución de la pantalla.
  5. Escribir un manual de usuario.
  6. Crear wallpaper clock (gracias por la idea Alan).
La primera vesión de mi script (asquerosamente ducumentado), implementa mi objetivo 1.1

Código fuente:
#!/bin/bash
# Autor: Saúl Martínez Vidals.
# Fecha: domingo, 08 de junio de 2008.
# Descripción: Cambia el fondo de pantalla cada
# cierto tiempo.

declare directorio="$1"
declare imagen
declare -a imagenes
declare -i indice

declare archivos=$(mktemp -t)
ls -1 "$directorio" > "$archivos"

while read imagen; do
if [[ "$imagen" = *.jpg ]] || \
[[ "$imagen" = *.png ]]; then
imagenes[$indice]="$imagen"
((indice++))
fi
done < "$archivos"

# coloca el fondo de pantalla
imagen="$directorio"/
imagen+="${imagenes[$(($RANDOM%$indice))]}"

gconftool-2 -s \
/desktop/gnome/background/picture_filename -t \
string "$imagen"

# elimina el archivo temporal
rm "$archivos"

exit 0
En el siguiente avance espero cumplir los puntos 2.1 y 2.2 :)

6 comentarios:

Anónimo dijo...

Incluso - digamos para la versión 2.0 - podrías crear un wallpaper clock. Ya sabes, uno de esos fondos que te incluyen la hora mediante un reloj digital o analógico. Creo que usando comandos del ImageMagick eso se puede lograr sin mucho esfuerzo. Por lo pronto, considerame usuario de tu script, y a la espera de las nuevas versiones.

Saúl dijo...

uuuuuuu, buen consejo Alan, me late mucho; ya lo agregue como último objetivo para mi "chafascript"

Memo dijo...

Está pasado de su almuerzo tu script. Recuerdo que alguna vez en KDE vi la opción de que cambiara el fondo aleatorio cada determinado tiempo, me imagino que hacen algo respecto a lo que me mostraste la vez pasada

Anónimo dijo...

No lo sé. Para mi son muchas lineas para un script en bash.

Tan simple:

for i in\
'ls dir |grep png;|ls dir grep jpg';\
do\
gconftool-2 -s /desktop/gnome/background/picture_filename -t string $i;\
done

el punto 1.2 aún más fácil.

if [ -f directorio ] ; then dir=directorio; done

Para el punto 2.2 yo usaría un simple bucle en conjunto con el comando sleep

sleep -20m

esperará 20 minutos para volver a ejecutarse...

que bonito es el bash, no? :P

Anónimo dijo...

if [ -d directorio ] ; then dir=directorio; done

Saúl dijo...

@Anónimo: No me late lo de usar grep, por lo menos no como lo sugieres, pude que una archivo se llame "imjpg.doc" y la tomaría en cuenta, siendo un archivo de texto.

Pero lo que menos me late es que te volaste lo aleatorio del "script", ya que sugieres colocar las imágenes secuencialmente. Lo del sleep tampoco me late mucho porque se están desperdiciando ciclos de reloj, en lugar de eso pienso usar un planificador que me mencionó un amigo hace poco, se llama at.

Sigue visitando el blog, espero te agrade la versión final.