¿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`
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
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!!!)
Jjajajajjajajaja gracias, en efecto snoopy rifa, jajajjajajajjajaj
Gracias..
Gracias
gracias!
¿Esto no funciona para cinnamon verdad?
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
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
Excelente. Gracias.