Rendez-vous sur Arrakiss
Le 29/11/2019 à 15:47 dans /Logiciel-libre/Code/

xclockstatusbar : Barre de status avec Xclock

XClock est disponible dans la plupart des distributions et livré avec le serveur d'affichage X.

J'ai voulu relever le défi d'avoir une barre de status affichant des informations sans ajouter d'outils supplémentaires à une installation OpenBSD de base. Ce que je décris ci-dessous peut être obtenu avec conky, lemonbar ou que sais-je ?

Tout d'abord, voici la capture d'écran de ce à quoi ça ressemble :

xclockstatusbar

Dans l'ordre, on peut lire :

Le tout est mis à jour régulièrement, à chaque fois qu'un des éléments ci-dessus change (avec un délai maximum d'1 seconde).

Voici en détail ce que fait le script :

Voici le script qui va bien xclockstatusbar:

#!/bin/sh

s=1 # seconds before reload
font="DejaVuSansMono-9"

# screen width
w=$(/usr/X11R6/bin/xwininfo -root|sed '/Width/!d;s/.* //')
# size of clock : 20px height, at top
geometry="${w}x20+0+0"

# some functions
ram() {
    top | grep Memory | awk {'print $3'}
}
fsperc(){
    printf "%s" "$(df -h $1 | tail -n 1 | awk '{print $5}')"
}
volperc(){
    printf "%s" "$(($(mixerctl -n outputs.master | cut -d, -f1) * 100 / 255))%"
}
loadavg(){
    uptime | awk '{print $9 $10 $11}'
}

# start
OLDPID=""
PID=""
OLDSTATUS=""
STATUS=""

while true; do
    OLDPID=$PID
    STATUS="[ /home:$(fsperc /home)% | \
/usr/local:$(fsperc /usr/local)% ]\
 [ $(loadavg) ]\
 [ Vol:$(volperc) ]\
 $(nbmail)\
 [ $(mpc current) ]" 
    if [ "${STATUS}" != "${OLDSTATUS}" ]; then
        OLDSTATUS="${STATUS}"
        xclock -render -face "${font}" -padding 3 -digital \
            -geometry "${geometry}" \
            -strftime "[ %H:%M - %d/%m/%Y ] ${STATUS} " &
        PID=$!
        sleep "${s}" 
        test -n "$OLDPID" && kill $OLDPID &
    fi
done