Cambiar automáticamente el fondo de pantalla con Nitrogen

¿Cuantos de ustedes usan algún «Tiling window manager» y seguramente después de cierto tiempo nos aburre nuestro fondo de pantalla? Es muy molesto tener que re-compilar para poder cambiar un simple fondo de pantalla, o incluso también el volver a correr “nitrogen” y pasarle otro parámetro.

Pues hoy les traigo un script en bash, este obtiene una imagen aleatoria de nuestra colección y la pone como fondo de pantalla Cambiar Fondo pantalla nitrogen, si descargan el script de aquí no olviden quitarle la extensión .txt al archivo y darle permisos de ejecución

directorio=~/Imágenes
function mi_resolucion(){
res=`xrandr | grep '*' | grep -o -E '[0-9]+x[0-9]+'`
mi_alto=`echo "$res" | cut -d "x" -f 2`
mi_ancho=`echo "$res" | cut -d "x" -f 1`
}
function rand_imagen(){
imagen=`ls -1 -b -R "$directorio" | grep -i -e ".png" -e ".jpg" -e ".jpeg" | sort --random-sort | head -1`
dir_imagen=`find "$directorio" -iname "$imagen"`
}
function resolucion_imagen(){
rand_imagen
imagen_alto=`identify -format "%h" "$dir_imagen"`
imagen_ancho=`identify -format "%w" "$dir_imagen"`
}
function proporcion(){
mi_resolucion
resolucion_imagen
proporcion_alto=`echo $imagen_alto/$mi_alto|bc -l`
proporcion_ancho=`echo $imagen_ancho/$mi_ancho|bc -l`
}
function escalar(){
proporcion
if [ `echo "$proporcion_alto > 1"|bc` -eq 1 -o `echo "$proporcion_ancho > 1"|bc` -eq 1 ]; then
nitrogen --set-zoom "$dir_imagen"
else
nitrogen --set-centered "$dir_imagen"
fi
}

escalar
exit

Ahora viene la explicación del script.
directorio=~/Imágenes //Cambiar por el directorio en el que se encuentren sus wallpapers

resolucion_imagen() //Esta función detecta la resolución de nuestro monitor, y la guarda en las variables:
mi_alto //Alto
mi_ancho //Ancho

rand_imagen() //Esta función obtiene una imagen dentro de «directorio»

imagen=`ls -1 -b -R «$directorio» | grep -i -e «.png» -e «.jpg» -e «.jpeg» | sort –random-sort | head -1`

¡IMPORTANTE! Si te das cuenta estamos filtrando todos los archivos con “extensión” .png, .jpg, .jpeg. Agrega -e “.extensión” según sea el caso.

Ejemplo:

imagen=`ls -1 -b -R "$directorio" | grep -i -e ".png" -e ".jpg" -e ".jpeg" -e ".nueva_extensión" | sort --random-sort | head -1`

resolucion_imagen() //Esta función obtiene la resolución de la imagen que obtuvo la función rand_imagen()

proporcion() //Esta función obtiene la proporción resolución_imagen/resolución_pantalla

escalar() //Esta función escala la imagen si es mas grande que la resolución de nuestro monitor y establece el fondo de pantalla

Ahora que tenemos el script para asignarle fondo de pantalla aleatorio a nitrogen (y ademas la imagen se adapta a tu monitor) solo nos resta hacer que se ejecute el script cada cierto tiempo, esto se logra haciendo que se ejecute el siguiente comando al inicio

watch -n 4 ruta_donde_se_encuentra_el_script/nombre_del_script

En este caso este comando se ejecuta cada 4 segundos, notar que ruta_donde_se_encuentra_el_script es la ruta completa donde se localiza el script y nombre_script es el nombre que le pusieron al script.

Espero que les sea útil.


9 comentarios, deja el tuyo

Deja tu comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.

  1.   KZKG^Gaara dijo

    Revisaré este tal Nitrogen para un script para KDE que quiero hacer 🙂
    Por lo demás buen post… jajajaja, excelente foto has elegido para el post (la de Snoopy LOL!!!)

    1.    alpj dijo

      Jjajajajjajajaja gracias, en efecto snoopy rifa, jajajjajajajjajaj

  2.   st0rmt4il dijo

    Gracias..

  3.   ANXO dijo

    Gracias

  4.   ferchometal dijo

    gracias!

  5.   izzyvp dijo

    ¿Esto no funciona para cinnamon verdad?

    1.    alpj dijo

      no tengo idea de como cambiar el fondo de pantalla en cinnamon, pero lo seguro es que la función function rand_imagen te sirve para sacar una imagen aleatoria, así que solo vasta con pasar le $dir_imagen
      Deja investigo

  6.   +AMEM+ dijo

    Gracis lo modifique un poco para futuras generaciones … espero no te molestes
    me gustaria saber que opinas, no se mucho del lenguaje

    #!/bin/bash

    #~ Autor original
    #~
    #~ halonsov: Matemático, amante de GNU/LINUX, programador, usuario de Debian y xmonad.
    #~
    #~ Referencias
    #~ https://blog.desdelinux.net/cambiar-automaticamente-el-fondo-de-pantalla-con-nitrogen/
    #~
    #~ Comando para ejecutar el script cada 120 segundos
    #~ watch -n 120 /home/amem/backup/DataCrunch/Synaptic/AleatorioWallpaper.sh
    #~
    #~ Colaboracion
    #~ +AMEM+
    #~ Personalmente prefiero usarlo una sola vez para no utilizar espacio
    #~ agregando en el autostart.sh
    #~ /home/amem/backup/DataCrunch/Synaptic/AleatorioWallpaper.sh &
    #~ Nota personal
    #~ este script fue realizado originalmente por halonsov.
    #~ Yo lo modifique para que solo un poco, para ejecutarlo al inicio de #CrunchBang!
    #~ la finalidad es que todas esas imagenes que tienes en tu disco puedas verlas
    #~ cada cierto tiempo, y que se ajusten a la pantalla segun sus propiedades.
    #~ para ello este escript identifica las caracteristicas de tu monitor,
    #~ y las de la imagen o foto de tu «directorio»,
    #~ para asi ejecutar nitrogen + un parametro de escalado o zoom evitando
    #~ imagenes alargadas, pixeleadas.
    #~ Si este script no satisface tus necesidades, puedes modificar sus parametros
    #~ Ej. nitrogen –set-centered
    #~ para centrar la imagen sin escalar
    #~ Te recomiendo estudies el manual de nitrogen.

    #Directorio
    #Directorio de las imágenes que se usarán como wallpaper, incluso los subdirectorios
    #Cambiar por el directorio en el que se encuentren sus wallpapers
    # Ej. directorio=/home/…/images
    directorio=/home/amem/images/Wallpaper

    #Resolución de monitor
    #Esta función detecta la resolución de nuestro monitor, y la guarda en las variables:
    function mi_resolucion()
    {
    #Obtenemos la resolución de nuestro monitor con xrandr
    res=`xrandr | grep ‘*’ | grep -o -E ‘[0-9]+x[0-9]+’`
    #Alto del monitor
    mi_alto=`echo «$res» | cut -d «x» -f 2`
    #Ancho del monitor
    mi_ancho=`echo «$res» | cut -d «x» -f 1`
    }

    #Imagen aleatoria
    #Esta función obtiene una imagen dentro de “directorio”
    function rand_imagen()
    {
    #Obtenemos el nombre de alguna imagen dentro de $directorio
    imagen=`ls -1 -b -R «$directorio» | grep -i -e «.png» -e «.jpg» -e «.jpeg» | sort –random-sort | head -1`

    #¡IMPORTANTE! Si te das cuenta estamos filtrando todos los archivos con “extensión” .png, .jpg, .jpeg. Agrega -e “.extensión” según sea el caso.
    #Ejemplo:
    # imagen=`ls -1 -b -R «$directorio» | grep -i -e «.png» -e «.jpg» -e «.jpeg» -e «.nueva_extensión» | sort –random-sort | head -1`

    #Obtenemos la ruta de $imagen
    dir_imagen=`find «$directorio» -iname «$imagen»`
    }

    #Resolución imagen
    #Esta función obtiene la resolución de la imagen que obtuvo la función rand_imagen()
    function resolucion_imagen()
    {
    rand_imagen
    #Obtenemos el alto de $imagen
    imagen_alto=`identify -format «%h» «$dir_imagen»`
    #Obtenemos el ancho de $imagen
    imagen_ancho=`identify -format «%w» «$dir_imagen»`
    }

    #Obtenemos la proporción resolución_imagen/resolución_pantalla
    # el resultado de esta divicion entrega un valor mayor o menor a 1
    # proporcion 1 la imagen es mayor que la pantalla
    function proporcion()
    {
    mi_resolucion
    resolucion_imagen
    proporcion_alto=`echo $imagen_alto/$mi_alto|bc -l`
    proporcion_ancho=`echo $imagen_ancho/$mi_ancho|bc -l`
    }

    #Obtenemos la proporción imagen_alto/imagen_ancho
    # el resultado de esta divicion entrega un valor mayor o menor a 1; amenos que la imagen se cuadrada O.o
    # proporcion_imagen 1 la imagen es mas alta que ancha
    function proporcionimagen()
    {
    resolucion_imagen
    proporcionimagen_razon=`echo $imagen_alto/$imagen_ancho|bc -l`
    }

    #Establece el fondo de pantalla
    #Esta función modifica los parametros de nitrogen segun las propiedades de la imagen en relacion al monitor
    #Imagen muy alta o grande que nuestra pantalla Establece el fondo de pantalla escalando la imagen
    # –set-centered centra la imagen sin escalar
    # –set-scaled rellena la pantalla con la imagen deformada
    # –set-zoom rellena la pantalla con la imagen escalada a lo alto
    # –set-zoom-fill rellena la pantalla con la imagen escalada a lo largo
    function escalar()
    {
    proporcion
    if [ `echo «$proporcion_ancho > 1″|bc` -eq 1 ]; then
    #Si la resolución de la imagen es mas grande que la de nuestra pantalla ejecutar…
    nitrogen –set-scaled «$dir_imagen»
    else
    if [ `echo «$proporcion_alto > 1″|bc` -eq 1 ]; then
    #Si la resolución de la imagen es mas pequeña que la de nuestra pantalla ejecutar…
    nitrogen –set-centered «$dir_imagen»
    else
    #Cuando la imagen es mas pequeña que la pantalla podemos expandirla a lo largo o a o ancho
    proporcionimagen
    if [ `echo «$proporcionimagen_razon > 1″|bc` -eq 1 ]; then
    #Si la altura de la imagen es mas pequeña que la de nuestra pantalla ejecutar…
    nitrogen –set-zoom «$dir_imagen»
    else
    if [ `echo «$proporcionimagen_razon < 1"|bc` -eq 1 ]; then
    #Si el ancho de la imagen es mas pequeña que la de nuestra pantalla ejecutar…
    nitrogen –set-zoom-fill "$dir_imagen"
    fi
    fi
    fi
    fi
    }

    escalar

    exit

    1.    Halonso V dijo

      Excelente. Gracias.