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 :
- WMFS, acte III : Les raccourcis claviers
- WMFS, acte II : Lancement d’applications à l’ouverture d’une session
- WMFS, acte I : Installation
- En route vers WMFS
12 avril 2011 à 21:22
Encore un très bon article sur WMFS, c’est vrai que les info de la statusbar sont pus pratique avec conky
12 avril 2011 à 21:57
@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é
13 avril 2011 à 11:53
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.
13 avril 2011 à 13:05
@Xavier : Merci pour ta petite démonstration, qui j’en suis sur sera bien utile !
13 avril 2011 à 14:18
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 …
13 avril 2011 à 14:26
@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
18 avril 2011 à 12:58
[...] WMFS, acte IV : La statusbar [...]
25 avril 2011 à 11:08
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??
3 mai 2011 à 16:51
up plz
3 mai 2011 à 16:59
@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
3 mai 2011 à 19:30
[...] WMFS, acte IV : La statusbar [...]
8 mai 2011 à 18:23
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?
8 mai 2011 à 18:26
@Tété : Aucune idée, je n’utilise pas Conky, par contre lors de mes essaies je n’ai pas noté ce problème.
8 mai 2011 à 22:24
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 juin 2011 à 17:59
[...] WMFS, acte IV : La statusbar [...]
1 juillet 2011 à 23:13
Quel programme faut-il installer pour utiliser status? Car lorsque je lance mon status.sh, la console renvoie: ./status.sh: ligne11: status : commande introuvable
4 juillet 2011 à 16:18
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.
5 juillet 2011 à 19:44
@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 !
6 juillet 2011 à 20:19
Voici: http://pastebin.com/1193A5Yx et merci beaucoup de te pencher sur mes petits soucis .
9 juillet 2011 à 14:00
Je crois qu’il faut modifier quelque chose dans la partie [root] du wmfsrc pour faire fonctionner le status.sh peut-être pour ça
11 juillet 2011 à 18:00
[...] WMFS, acte IV : La statusbar [...]
11 juillet 2011 à 18:02
[...] WMFS, acte IV : La statusbar [...]