Después de mucho tiempo usando i3-wm, estaba constantemente, cambiando de wallpaper (seguramente ha más de uno le pasa), pense que habria alguna manera de hacer que cada X tiempo, el wallpaper que estoy utilizando cambiara automaticamente, de los que tengo en el directorio donde los guardo.
Así que me puse a la busqueda de como se puede hacer.
Encontre unas cuantas maneras de hacer lo que yo queria :
Yo me quede con la idea del segundo script, aunque le añadi la posibilidad de enviar notificaciones al escritorio de los cambios de fondos de pantalla a través del notify-send
.
#!/usr/bin/bash
shopt -s nullglob
if [[ -z $(which feh) ]]; then
echo "wallpaper err: Can not found command feh." > ~/i3wm-wallpaper.err
exit 127
fi
# DIRECTORI ON ESTAN ELS FONTS DE PANTALLA
path=~/.config/wallpapers
# TEMPS / INTERVAL ENTRE ELS CANVIS DE FONS DE PANTALLA
interval=59m
# INICI DE L'SCRIPT
cd $path
# INICIEM EL BUCLE DE L'SCRIPT
while true
do
files=()
for i in *.jpg *.png;
do
[[ -f $i ]] && files+=("$i")
done
range=${#files[@]}
CURRENT_WALLPAPER="${files[RANDOM % range]}"
CURRENT_IMAGE=$path"/"$CURRENT_WALLPAPER
((range)) && feh --bg-scale $CURRENT_WALLPAPER
#
# ENVIEM LA NOTIFICACIÓ AL SISTEMA, PERQUE ES VEGI PER PANTALLA
#
notify-send -i "$CURRENT_IMAGE" 'Desktop Changed' $(basename -- "$CURRENT_WALLPAPER")
sleep $interval
done
El script en esencia es muy simple. Lo unico que hace, es poner en un array
todos los archivos del directorio que le indicas donde estaran las imagenes (wallpapers
) para que cada X minutos (interval
) que le hayas configurado haga el cambio de fondo de pantalla y que te notifique (notify-send
) de dicho cambio, se necesita el paquete libnotify-bin para que te avise del cambio.
Lo unico que queda, es configurar el fichero de configuración de i3-wm
para que :
- Haga la carga inicial del wallpaper
- Inicie el script del cambio de wallpaper, que a su vez, tomara el control y que cada X tiempo (segun tengas configurado) ira realizando el cambio de fondo de pantalla.
Para que funcione, tienes que añadir lo siguiente en el fichero de configuración:
# PARA VISUALIZAR EL FONDO DE PANTALLA
exec_always --no-startup-id feh --bg-scale --no-fehbg ~/.config/wallpapers/Wallpaper_10.jpg
# AQUI ES CONFIGURA EL CANVI AUTOMATIC DEL WALLPAPER
exec --no-startup-id ~/.config/i3/scripts/wallpaper.sh &
La otra modificación que he realizado, ha sido la de que en la barra de i3-wm
(i3block
) me informe de los paquetes que se tienen que actualizar, era una información que me gustaba tener y después de mucho buscar, encontré el comando / instrucción que me daba lo que necesitada.
Lo primero, necesitas el script apt-upgrades
y descargarlo en algún sitio desde donde puedas tener acceso. En mi caso, lo he dejado en el directorio del i3-wm/script
, que es donde tengo todos los scripts que uso para i3-wm
.
El script en cuestión (tener en cuenta que depende de aptitude) hace lo siguiente :
#!/usr/bin/env bash
#
# Copyright (C) 2015 James Murphy
# Licensed under the terms of the GNU GPL v2 only.
#
# i3blocks blocklet script to display pending system upgrades
# FontAwesome refresh symbol, change if you do not want to install FontAwesome
#PENDING_SYMBOL=${PENDING_SYMBOL:-"\uf021 "}
PENDING_SYMBOL=${PENDING_SYMBOL:-""}
# By default, show both the symbol and the numbers
SYMBOL_ONLY=${SYMBOL_ONLY:-0}
# By default, show something when no upgrades are pending
ALWAYS_PRINT=${ALWAYS_PRINT:-1}
# Colors for when there is/isn't a pending upgrade
PENDING_COLOR=${PENDING_COLOR:-"#FF0000"}
NONPENDING_COLOR=${NONPENDING_COLOR:-"#FFFFFF"}
while getopts s:oc:n:Nh opt; do
case "$opt" in
s) PENDING_SYMBOL="$OPTARG" ;;
o) SYMBOL_ONLY=1 ;;
c) PENDING_COLOR="$OPTARG" ;;
n) NONPENDING_COLOR="$OPTARG" ;;
N) ALWAYS_PRINT=0 ;;
h) printf \
"Usage: apt-upgrades [-s pending_symbol] [-o] [-c pending_color] [-N|-n nonpending_color] [-h]
Options:
-s\tSpecify a refresh symbol. Default: \"\\\\uf021 \"
-o\tShow refresh symbol only, but no numbers.
-c\tColor when upgrade is pending. Default: #00FF00
-n\tColor when no upgrade is pending. Default: #FFFFFF
-N\tOnly display text if upgrade is pending (supercedes -n)
-h\tShow this help text\n" && exit 0;;
esac
done
read upgraded new removed held < <(
aptitude full-upgrade --simulate --assume-yes |\
grep -m1 '^[0-9]\+ packages upgraded,' |\
tr -cd '0-9 ' |\
tr ' ' '\n' |\
grep '[0-9]\+' |\
xargs echo)
if [[ $upgraded != 0 ]] || [[ $new != 0 ]] || [[ $removed != 0 ]] || [[ $held != 0 ]]; then
color="$PENDING_COLOR"
if [[ $SYMBOL_ONLY == 1 ]]; then
echo -e "$PENDING_SYMBOL"
echo -e "$PENDING_SYMBOL"
else
echo -e "$PENDING_SYMBOL$upgraded/$new/$removed/$held"
echo -e "$PENDING_SYMBOL$upgraded/$new/$removed/$held"
fi
echo $color
elif [[ $ALWAYS_PRINT == 1 ]]; then
color="$NONPENDING_COLOR"
echo -e "$PENDING_SYMBOL$upgraded/$new/$removed/$held"
echo -e "$PENDING_SYMBOL$upgraded/$new/$removed/$held"
echo $color
fi
Una vez tengas el script, vamos a la configuración del archivo de i3block.conf
:
[apt_upgrades]
command=/home/usuari/.config/i3/scripts/apt-upgrades
# l'script s'executara cada dia (el valor es refereix a minuts)
interval=1440
signal=1
label=
Cuando ya tenemos configurado toda la parte del usuario, solamente nos queda configurar la parte de root (que es el encargado de realizar el aptitude update
para actualizar los paquetes y que a su vez, hace que el script obtenga los paquetes a actualizar.
Para eso, tenemos que hacer lo siguiente (a través de sudo
, en mi caso):
# obtenim acces a nivell de root
usuari@debian:~#sudo -i
Una vez, tenemos acceso a la consola de root
pasamos a configurar el cron
que lo puedes hacer de la siguiente manera para evitar al maximo cualquier error posible:
usuari@debian:~#crontab -e
Y ahora pasamos a la creación de nuestro cron:
@daily aptitude update
Y con este sencillo script obtenemos la siguiente información:
- Los paquetes a actualizar.
- Los nuevos paquetes que se van a instalar.
- Los paquetes que se van a eliminar.
- Los paquetes que no se actualizar.
Todo esto, claro esta, siempre que realices la actualización.
En pantalla quedaría de la siguiente manera: