avr 12

Comme promis, le quatrième acte concernant WFMS est consacré à sa statusbar et plus particulièrement à son fichier status.sh.

Pour rappel et avant de rentrer dans le vif du sujet, WMFS permet d’afficher des informations de toutes sortes au sein même de sa statusbar, une fonctionnalité similaire aux infobars d’Awesome.

Mettez ce que vous voulez, WMFS se charge de l’afficher !

How to :

La première chose à faire est de renseigner correctement la section « [misc] [/misc] » de son wmfsrc :

$ nano ~/.config/wmfs/wmfsrc
[misc]
          status_timing     = 1     #seconds
          status_path        = "~/.config/wmfs/status.sh"
[/misc]

Créez ensuite le fichier status.sh en le rendant exécutable par la même occasion :

$ touch ~/.config/wmfs/status.sh
$ chmod +x ~/.config/wmfs/status.sh

Donnez maintenant à manger à votre petit fichier :

$ echo -e '#!/bin/sh \nwmfs -s "Bonjour"' > ~/.config/wmfs/status.sh

Rechargez ensuite WMFS via la combinaison de touches [Ctrl + Alt + R] et appréciez le résultat !

Simple non ? Histoire de voir un peu ce que l’on peut faire voici une capture d’écran provenant de mon netbook suivi de son status.sh :

#!/bin/sh
#
#
	## Couleurs ##
rouge="\\#FF000B\\" 
vert="\\#1CB500\\" 
jaune="\\#FFF23D\\" 
bleu="\\#4599F8\\" 
orange="\\#FF6600\\" 
rose="\\#FF53B5\\"
camel="\\#FFA500\\"
cyan="\\#00F3FF\\"
normal="\\#D9D9D9\\" 
#
#
	## Heure ##
_hour () {
hour=$(date '+%Hh %Mm')
hour="$vert [ H : $normal$hour$vert ]"
}
#
#
	## Date ##
_dat () {
dat_s=$(date '+%a %d/%m/%y')
dat_l=$(date '+%A %d %b %Y')
dat="$orange [ D : $normal$dat_s$orange ]"
}
#
#
	## Uptime ##
_uptim () {
uptim=$(cut -d'.' -f1 /proc/uptime)
mins=$((${uptim}/60%60))
hours=$((${uptim}/3600%24))
days=$((${uptim}/86400))
uptim="${mins}m"
if [ "${hours}" -ne "0" ]; then
uptim="${hours}h ${uptim}"
fi
if [ "${days}" -ne "0" ]; then
uptim="${days}d ${uptim}"
fi
uptim="$jaune [ U : $normal$uptim$jaune ]"
}
#
#
	## Ram ##
_ram () {
mem_u=$(free -mto | grep Mem | awk '{ print $3 }')
mem_t=$(free -mto | grep Mem | awk '{ print $2 }')
ram="$bleu [ R : $normal$mem_u M / $mem_t M$bleu ]"
}
#
#
	## Hdd ##
_hdd () {
hdd_f=$(df -h / | grep "/dev/" | awk '{print $3}')
hdd_t=$(df -h / | grep "/dev/" | awk '{print $2}')
hdd="$camel [ H : $normal$hdd_f / $hdd_t$camel ]"
}
#
#
	## Températures ##
_temp () {
cpu_t=$(sensors | grep "CPU T" | awk {'print $3'})
mb_t=$(sensors | grep "MB T" | awk {'print $3'})
gpu_t=$(nvidia-settings -t -q GPUCoreTemp)
temp="$vert [ T : $normal$cpu_t $mb_t +$gpu_t°C$vert ]"
}
#
#
	## Musique ##
_mcp () {
if [ -n $(mpc current) ]; then
	mus="off "
	mcp="$rose [ M : $normal$mus$rose ]"
else
	if [ $(mpc current | wc -m) -gt "25" ]; then
		mus=$(mpc current |  cut -b 1-25)
		mcp="$rose [ M : $normal$mus...$rose ]"
	else
		mus=$(mpc current)
		mcp="$rose [ M : $normal$mus$rose ]"
	fi
fi
}
#
_quod () {
if [ -f ~/.quodlibet/current ]; then
	art=$(cat ~/.quodlibet/current | grep artist | cut -d '=' -f2)
	tit=$(cat ~/.quodlibet/current | grep title | cut -d '=' -f2)
	mus="$art - $tit"
	mus="$rose [ M : $normal$mus$rose ]"
else
	mus="off "
	mus="$rose [ M : $normal$mus$rose ]"
fi
}
#
#
	## IP local ##
_ip () {
if [ -z $(ifconfig wlan0 | grep "inet addr") ]; then
	ip="Non connecté"
	ip="$orange [ I : $normal$ip$orange ]"
else
	ip=$(ifconfig wlan0 | grep "inet addr" | cut -b 21-32)
	ip="$orange [ I : $normal$ip$orange ]"
fi
}
#
#
	## Gmail ##
_mail () {
if [ -z $(ifconfig wlan0 | grep "inet addr") ]; then
	mail="$rouge [ G : $normal ?$rouge ]"
else
	gmailuser="adresse@gmail.com"
	gmailpass="motdepasse"
	mail=$(wget --secure-protocol=TLSv1 -T 3 -t 1 --no-check-certificate --user=$gmailuser --password=$gmailpass http://mail.google.com/mail/feed/atom -q -O - | grep  "<fullcount>" | grep -o "[^/<fullcount>]")
	mail="$rouge [ G : $normal$mail @$rouge ]"
fi
}
#
#
	## Volume ##
_vol () {
status=$(amixer get Master | grep "Mono: P" | awk '{print $6}')
 
if [ "$status" = "[on]" ] ; then
	vol=$(amixer get Master | grep "Mono: P" | awk '{print $4}' | grep -oE "[[:digit:]]{1,}"%)
	vol="$cyan [ V : $normal$vol$cyan ]"
else
	vol="mute"
	vol="$cyan [ V : $normal$vol$cyan ]"
fi
}
#
#
	## Batterie ##    
_bat () {                                                               
path="/proc/acpi/battery/BAT1"
 
if [ $(cat $path/state | grep 'present:' | awk '{print $2}') = "no" ]; then 
	bat="$vert [ B : $normal off$vert ]"
else
	full=`cat $path/info|grep 'last full capacity'|awk -F: '{print $2}'|awk -Fm '{print $1}'`
	current=`cat $path/state|grep 'remaining capacity'|awk -F: '{print $2}'|awk -Fm '{print $1}'` 
	state=$(( $current * 100 / $full))
	if [ $(cat $path/state | grep 'charging' | awk '{print $3}') = "discharging" ]; then
		charge=""
		bat="$vert [ B : $normal$state % $charge $vert ]" 
	else
		charge=""
		bat="$vert [ B : $normal$state % $charge $vert ]" 
	fi
fi
}
#
#
	## Status ##
status () {
	for arg in $@; do
		_${arg}
		args="${args}  `eval echo '$'$arg`"
	done
	wmfs -s 0 "$args"
	echo "$args"
 
}
#
#
	## Variables ##
	## dat hour uptim ram hdd ram hdd ip mail mcp vol bat quod temp
 
status dat hour uptim ram hdd ip mail mcp vol bat
#
#

À noter que le fichier status.sh peut être édité dans le langage voulu : Bash, C, Python, etc… Faites donc comme bon vous semble ;) ( Merci à linkdd pour ce petit rappel )

Multi-écran :

WMFS permet de mettre un message différent pour chaque écran en faisant comme ceci :

$ nano ~/.config/wmfs/status.sh
#!/bin/sh
#
wmfs -s 0 "Écran 1"
wmfs -s 1 "Écran 2"
wmfs -s 2 "Écran 3"
wmfs -s 3 "Écran 4"

Comme vous pouvez le voir la numérotation des écrans commence à partir de 0.

Intégration de Conky :

Il est tout à fait possible d’utiliser la sortie provenant de Conky dans la statusbar. En premier lieu, prennez soin de renseigner correctement votre fichier conkyrc :

$ nano ~/.conkyrc
out_to_console yes
out_to_x no
background no
update_interval 0.9
total_run_times 0
no_buffers yes
 
TEXT

Une fois les options insérées, il vous suffit d’éditer le fichier status.sh :

$ nano ~/.config/wmfs/status.sh
#!/bin/sh
#
conky -q | while read -r; do wmfs -s -name "$REPLY"; done

Sauvegardez, rechargez et appréciez !

Ce billet touche maintenant à sa fin et comme d’habitude, j’espère que celui-ci vous donnera envie de tester ce passionnant tiling manager !

Le prochain acte concernera la section « menu » : See you soon ;) .

Dans la même catégorie :

écrit par David Lopes Ferreira

22 commentaires à “WMFS, acte IV : La statusbar”

  1. SkyZ Dit:

    Encore un très bon article sur WMFS, c’est vrai que les info de la statusbar sont pus pratique avec conky

  2. David Lopes Ferreira Dit:

    @SkyZ : Personnellement, je préfère un petit script Bash à Conky, c’est certainement plus long à mettre en place mais ça m’a bien amusé ;)

  3. Xavier Dit:

    Perso., je laisse conky ramasser les infos que je veux. Je mets la couleur dans le script conky :

    out_to_console yes
    out_to_x no
    background no
    update_interval 1
    total_run_times 0
    use_spacer none
    overwrite_file /home/xavier/.config/wmfs/conkyout.txt

    TEXT
    CPUs\\#00ff00\ ${cpu cpu1}% \\#ffffff\/ \\#00ff00\${cpu cpu2}% \\#ffffff\ \
    | RAM\\#00ff00\ $memperc% ($mem) \\#ffffff\ \
    | Net ↓\\#00ff00\${downspeed eth0} \\#ffffff\↑\\#00ff00\${upspeed eth0} \\#ffffff\ \
    | ${time %a %x %R}

    Mon script status.sh est super simple:
    TXT=`tail -n1 $XDG_CONFIG_HOME/wmfs/conkyout.txt`
    wmfs -s « $TXT

    Simple et Unixien : Laisser les outils appropriés faire le boulot. Le script perso ne fait que collecter et mettre ensemble les miettes. Le script conky est un peu simplet, mais rien n’empêche de l’étendre.

  4. David Lopes Ferreira Dit:

    @Xavier : Merci pour ta petite démonstration, qui j’en suis sur sera bien utile !

  5. Desmogone Dit:

    Salut !

    Je suis depuis quelques temps tes articles car je suis intéressé par une config Arch+Openbox sur mon netbook (Fedora + Xfce en ce moment).

    Je ne voyais pas l’intérêt d’un WM en tiling sur un petit écran comme celui d’un netbook car même avec les fenêtres en plein écran, j’ai parfois envie de « pousser les murs », mais je vois que tu as franchi le pas.

    Ce n’est pas trop gênant d’avoir du tiling sur un écran aussi petit ?

    Desmogone, au pire, je pourrais essayé également …

  6. David Lopes Ferreira Dit:

    @Desmogone : « au pire, je pourrais essayé également … » + 1

    L’intérêt pour moi est de pouvoir maximiser automatiquement les fenêtres tout en les plaçant directement sur le bon tag. OpenBox peut également le faire mais bon… Je préfère WMFS ;)

  7. WMFS, acte V : Les menus » UbunBloX Dit:

    [...] WMFS, acte IV : La statusbar [...]

  8. Vodou Dit:

    Bonjour,

    J’aurais besoin de conseils car chez moi le .config/wmfs/status.sh n’est pas reconnu par wmfs, ma statubar n’est pas modifié alors que j’ai bien :

    [misc]
    #font = « dejavu-10″
    #raisefocus = true
    #raiseswitch = false
    #focus_follow_mouse = true
    #focus_follow_movement = false
    opacity = 200
    ## focus_pointer_click: click on unfocused client area:
    ## true — default, set focus
    ## false — click go to client; including dockapps
    #focus_pointer_click = true
    status_timing=1 #seconds
    status_path= »~/.config/wmfs/status.sh »
    [/misc]

    Bug??

  9. Vodou Dit:

    up plz

  10. David Lopes Ferreira Dit:

    @Vodou : As tu essayé d’utiliser ta status bar de manière simple, je veux dire sans y mettre un long script ? Si ton problème persiste, je te conseille vivement de te rendre sur le site officiel du projet ou mieux encore d’aller faire un tour sur l’irc de WMFS ( irc.freenode.net #wmfs ). Bon courage ;)

  11. Le wiki de WMFS fait peau neuve » UbunBloX Dit:

    [...] WMFS, acte IV : La statusbar [...]

  12. Tété Dit:

    Bonjour,

    Pour le scripte avec conky, y a-t-il un moyen pour évité que celui-ci ne clignote a chaque rafraichissement de la barre?

  13. David Lopes Ferreira Dit:

    @Tété : Aucune idée, je n’utilise pas Conky, par contre lors de mes essaies je n’ai pas noté ce problème.

  14. maejoz Dit:

    merci beaucoup ! grâce à toi, j’ai aussi adopté WMFS à la place d’openbox.
    Une remarque pour les débs, pour tester le script ci-dessus, il suffit de le lancer en console et de débogguer.
    $ ~/.config/wmfs/status.sh

  15. MOC et WMFS : Intégration » UbunBloX Dit:

    [...] WMFS, acte IV : La statusbar [...]

  16. Lanonyme Dit:

    Quel programme faut-il installer pour utiliser status? Car lorsque je lance mon status.sh, la console renvoie: ./status.sh: ligne11: status : commande introuvable

  17. Lanonyme Dit:

    Désolé d’avoir été si rapide et impoli dans mon dernier com, mais je manquais de temps pour faire quelque chose de construit. Donc voici mon status.sh:
    # ~/.config/wmfs/status.sh

    #
    # if you want to have « conky » in your statusbar, just had this in your status.sh :
    # conky | while read -r; do wmfs -s -name « $REPLY »; done
    #

    color= »\#02A1CB\ » # Custom color
    normal= »\#D9D9D9\ » # Normal color

    _moc () {
    # Script moc.sh

    status () {
    for arg in $@; do
    _${arg}
    args= »${args} `eval echo ‘$’$arg` »
    done
    wmfs -s 0 « $args »
    echo « $args »
    }
    }

    # Affichage
    status moc

    RED= »\\#BF4D80\\ »
    YEL= »\\#C4A1E6\\ »
    GRN= »\\#287373\\ »
    CYN= »\\#6096BF\\ »
    MAG= »\\#7E62B3\\ »
    GRY= »\\#666666\\ »
    WHT= »\\#C0C0C0\\ »
    GRE= »\\#A3A3A3\\ »

    while true;
    do
    # Collect system information
    BAT1=`acpi -V | awk ‘{ gsub(/,/, «  »);} NR==1 {print $4}’`
    BAT2=`acpi -b | grep « Battery » | awk ‘{print $5}’ | cut -c 1-2`
    BAT3=`acpi -b | grep « Battery » | awk ‘{print $5}’ | cut -c 4-5`
    MEM1=`free -m | awk ‘/buffers\/cache/{print $3}’`
    MEM2=20
    MEM=`echo « $MEM1 / $MEM2″ | bc`
    CPU=`eval $(awk ‘/^cpu /{print « previdle= » $5 « ; prevtotal= » $2+$3+$4+$5 }’ /proc/stat); sleep 0.4; eval $(awk ‘/^cpu /{print « idle= » $5 « ; total= » $2+$3+$4+$5 }’ /proc/stat); intervaltotal=$((total-${prevtotal:-0})); echo « $((100*( (intervaltotal) – ($idle-${previdle:-0}) ) / (intervaltotal) )) »`
    VOL=`amixer get Master | grep -o [[:alnum:]]*%[.a-zA-Z\-]* -i | uniq`
    WIFI1=`cat /sys/class/net/eth1/wireless/link`
    WIFI2=0.7
    WIFI=`echo « $WIFI1 / $WIFI2″ | bc`
    DATE=`date « +%H:%M »`
    # Pipe to status bar
    wmfs -s 0 « $GRE• $GRY[CPU $GRE$CPU%$GRY] [RAM $GRE$MEM%$GRY] [VOL $GRE$VOL%$GRY] [WIFI $GRE$WIFI%$GRY] [BAT $GRE$BAT1 $BAT2:$BAT3$GRY]$GRE • $WHT$DATE • »
    sleep 1
    done

    Seulement WMFS ne voulait pas me le prendre en compte. Je l’ai donc exécuté et le retour de commande est: ./status.sh: ligne27: status : commande introuvable

    Je pourrais effacer la partie concernant moc mais j’aimerais comprendre pourquoi il y a cette erreur.

    Merci d’avance.

  18. David Lopes Ferreira Dit:

    @Lanonyme : Je viens de regarder avec un peu de mal ton script ( worpress à la facheuse tendance de modifier le code si il n’est pas entouré par des balises ) envoie donc ton code vers un service du genre pastebin en renvoyant le lien.

    Quelqu’un pourra surement t’aider, peut être moi si j’ai un peu de temps libre !

    Bon courage !

  19. Lanonyme Dit:

    Voici: http://pastebin.com/1193A5Yx et merci beaucoup de te pencher sur mes petits soucis :) .

  20. SkyZ Dit:

    Je crois qu’il faut modifier quelque chose dans la partie [root] du wmfsrc pour faire fonctionner le status.sh peut-être pour ça

  21. WMFS, acte VI : Rules » UbunBloX Dit:

    [...] WMFS, acte IV : La statusbar [...]

  22. Intégrer CutMyUrl au launcher de WMFS » UbunBloX Dit:

    [...] WMFS, acte IV : La statusbar [...]

Laisser une Réponse