C’est pour cette raison que je me suis penché sur la possibilité d’ajouter un petit écran lcd et de chercher comment y afficher les informations que j’aimerais avoir.Quelques recherches plus tard, j’ai trouvé à la fois le logiciel que j’utiliserais (lcd4linux) et aussi l’écran (un écran USB 4×20 caractères piloté par un contrôleur HD44780 payé 25€ sur Ebay). D’ailleurs, je ne peux résister à mettre une photo du joli colis reçu pour l’occasion:

Et une photo de l’écran, en pleine action:

Pour arriver à cela, il n’y a rien de vraiment sorcier, c’est ce que je vais expliquer maintenant.Installation du logicielOn a de la chance ce ce côté: le package lcd4linux est disponible avec ipkg (à installer si ce n’est déjà fait, comme expliqué dans l’article sur la supervision perso). Il n’y a donc qu’à taper la commande suivante en tant qu’utilisateur root:ipkg install lcd4linux
Pour commencer, dans le fichier /opt/etc/lcd4linu.conf, il faut définir un écran lcd sur lequel on va faire l’affichage, en indiquant le driver utilisé (dans mon cas LCD2USB pour le contrôleur HD4478), la taillede l’écran (20×4 pour le nombre de caractères hauteur x largeur), le contraste et la luminosité (maximum 250 chacun: valeurs que j’ai choisi après tâtonnement):
Display MonEcranLCD { Driver 'LCD2USB' Size '20x4' Contrast 250 Brightness 125 }
Ensuite, on définit la façon dont on veut afficher notre charge CPU. Pour cela, on crée un « widget », en lui indiquant le type données à afficher (Text dans notre cas, mais ça pourrait être une barre par exemple), la valeur à récupérer (il y a des valeurs prédéfinies comme c’est le cas ici, mais on pourrait très bien utiliser une valeur retournée par un script shell), le préfixe, le postfixe, la largeur de l’affichage, la précision (0 indique aucun chiffre après la virgule), l’alignemen (R pour droite) et le temps de raffraîchissement (500 ms dans ce cas):
Widget CPU { class 'Text' expression proc_stat::cpu('busy', 500) prefix 'CPU: ' postfix '% | ' width 11 precision 0 align 'R' update 500 }
Ensuite, on définit à quel endroit on veut afficher nos widget, en précisant la ligne et la colonne:
Layout Default { Row1 { Col1 'CPU' } Row2 { } Row3 { } Row4 { } }
Pour terminer, on choisit l’affichage qui sera utilisé ainsi que l’écran (car il est possible de définir plusieurs écrans, plusieurs affichages et plusieurs widget):
Display 'MonEcranLCD' Layout 'Default'
Pour tester cela et le lancer lcd4linux en tâche de fond, il suffit de lancer la commande suivante:
lcd4linux -f /opt/etc/lcd4linux.conf
Pour stopper le processus (à chaque fois qu’on modifier le fichier et qu’on veut tester la nouvelle conf):
killall lcd4linux
On continue: on ajoute le % de RAM utilisé
Pour ajouter le % de RAM utilisé, il suffit de rajouter une section Widget. La différence ici, c’est qu’on doive effectuer des calculs pour obtenir la mémoire utilisée (une bête règle de trois):
Widget MEMOIRE { class 'Text' expression meminfo('MemFree')/meminfo('MemTotal')*100 prefix 'RAM: ' postfix '%' width 8 precision 0 align 'R' update 500 }
On rajoute dans l’affichage ce qu’on vient de créer, à la colonne 12 de la ligne 1:
Layout Default { Row1 { Col1 'CPU' Col12 'MEMOIRE' } Row2 { } Row3 { } Row4 { } }
Et maintenant, on utilise le retour d’un script shell
On crée un nouveau widget qui retournera le pourcentage d’espace disque libre du volume1. La commande Unix permettant de renvoyer cela (df -k /volume1 | tail -1 | cut -b22- | cut -d » » -f5 ) doit être appelée avec la commande exec. Par contre, on ne va pas rafraichir toutes les 500ms, toutes les 10mn est largement suffisant:
Widget ESPACEDISQUE1 { class 'Text' expression exec('df -k /volume1 | tail -1 | cut -b22- | cut -d" " -f5',1000') prefix 'HD1: ' postfix ' |' width 10 align 'L' update 60000 }
Pour finir, on met l’affichage de l’espace disque sur la 2ème ligne, colonne 1:
Layout Default { Row1 { Col1 'CPU' Col12 'MEMOIRE' } Row2 { Col1 'ESPACEDISQUE1' } Row3 { } Row4 { } }
Exemple complet
Ci dessous l'exemple complet qui permet d'afficher ce qu'il y a sur la photo du début de l'article. J'ai ajouté l'uptime et j'ai aussi ajouté une section Variable qui permet d'intégrer des variables dans les différentes sections (utilisées ici pour le temps de raffraichissement): Display MonEcranLCD { Driver 'LCD2USB' Size '20x4' Contrast 250 Brightness 125 } Widget ESPACEDISQUE1 { class 'Text' expression exec('df -k /volume1 | tail -1 | cut -b22- | cut -d" " -f5',1000') prefix 'HD1: ' postfix ' |' width 10 align 'L' update minute } Widget ESPACEDISQUE2 { class 'Text' expression exec('df -k /volume2 | tail -1 | cut -b22- | cut -d" " -f5',1000') prefix 'HD2: ' postfix ' |' width 10 align 'L' update minute } Widget MEMOIRE { class 'Text' expression meminfo('MemFree')/meminfo('MemTotal')*100 prefix 'RAM: ' postfix '%' width 8 precision 0 align 'R' update tick } Widget CPU { class 'Text' expression proc_stat::cpu('busy', 500) prefix 'CPU: ' postfix '% | ' width 11 precision 0 align 'R' update tick } Widget UPTIME { class 'Text' expression uptime('%d days %H:%M:%S') width 20 align 'R' prefix 'Up ' update 1000 } Layout Default { Row1 { Col1 'CPU' Col12 'MEMOIRE' } Row2 { Col1 'ESPACEDISQUE1' Col12 'ESPACEDISQUE2' } Row3 { } Row4 { Col1 'UPTIME' } } Variables { tick 500 minute 60000 } Display 'MonEcranLCD' Layout 'Default'
Lancement automatique
#! /bin/sh
#
# lcd4linux
#
PATH=/opt/bin/:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin
DAEMON=/opt/bin/lcd4linux
NAME=lcd4linux
DESC=lcd4linux
test -f $DAEMON || exit 0
set -e
case "$1" in
start)
echo -n "Starting $DESC: "
start-stop-daemon --start --quiet --pidfile /var/run/$NAME.pid --exec $DAEMON
echo "$NAME."
;;
stop)
echo -n "Stopping $DESC: "
start-stop-daemon --oknodo --stop --quiet --pidfile /var/run/$NAME.pid --exec $DAEMON
echo "$NAME."
;;
reload)
start-stop-daemon --stop --signal 1 --quiet --pidfile /var/run/$NAME.pid --exec $DAEMON
;;
restart|force-reload)
echo -n "Restarting $DESC: "
start-stop-daemon --stop --quiet --pidfile /var/run/$NAME.pid --exec $DAEMON
sleep 1
start-stop-daemon --start --quiet --pidfile /var/run/$NAME.pid --exec $DAEMON
echo "$NAME."
;;
*)
N=/etc/init.d/$NAME
echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2
exit 1
;;
esac
exit 0
Conclusion
Je suis content de ce que j’ai réalisé, mais j’aurais aimé avoir la possibilité d’avoir plusieurs « layout » qui se succèdent. Par exemple, avoir pendant 15 secondes le layout suivant:
puis celui-là pendant 5 secondes:
puis celui-là pendant 10 secondes: