Lors d'un précédent article, j'avais expliqué comment on pouvait récupérer l'écran d'un ordinateur portable cassé pour en faire un moniteur simple : https://lofurol.fr/joomla/electronique/114-transformer-un-ecran-de-laptop-en-moniteur-autonome
L'étape suivante est d'utiliser cet écran en tant que panneau d'affichage autonome ou tableau de bord permettant de faire défiler des informations. Les Anglo-Saxons appellent cela un "dashboard". Pour cela, je vais recycler un Raspberry Pi (je sais il date un peu... et le fonctionnement sera lent mais ça suffit pour ce que l'on cherche à faire) qui fonctionnera en mode kiosque.
Mise à jour : J'ai finalement commandé un Raspberry Pi B v3 et vraiment la différence de vitesse, de navigation sur Internet est notoire !!! Donc n'hésitez pas à faire cet achat. Du coup, je fais donc mes tests avec le Raspberry Pi 3 et une fois que j'aurais terminé, j'utiliserai le Raspberry Pi pour commander l'écran d'affichage autonome (recyclage).
Sites ayant des infos sur des projets de tableaux de bord :
- https://www.jjtronics.com/wordpress/2016/11/04/raspberry-pi-raspbian-pixel-et-chromium-en-mode-kiosk-ouverture-automatique-dun-navigateur-en-mode-plein-ecran-au-demarrage-de-raspbian/
- http://www.magdiblog.fr/boa-pi-homedashscreen/1-raspberry-pi-home-dash-screen/
- http://www.instructables.com/id/Raspberry-Pi-Wall-Mounted-Calender-and-Notificatio/
- http://www.instructables.com/id/Digital-Wall-Calendar-and-Home-Information-Center/
- https://ouiaremakers.com/posts/tutoriel-diy-un-tableau-de-bord-numerique
- https://obrienlabs.net/setup-raspberry-pi-kiosk-chromium/
I- Matériel utilisé :
- un écran LCD avec prise hdmi (pour le branchement au Pi)
- un Raspberry Pi + une carte SD d'au moins 4Gb ( et de classe 10 pour la rapidité ) pour le système d'exploitation
- une alimentation de 12 v pour l'écran
- un convertisseur de courant continu du 12V vers 5V avec prise micro USB pour alimenter le RasPi (on n'aura ainsi qu'un seul câble d'alimentation) : inutile car on peut utiliser le courant qui sort en 5V de la carte contrôleur de l'écran en soudant un câble micro USB (http://www.instructables.com/id/Digital-Wall-Calendar-and-Home-Information-Center/step7/Power-the-Pi/).
- un câble hdmi
- un dongle USB Wifi (inutile avec le Raspberry Pi 3 qui intègre nativement et le wifi et le bluetooth)
Remarque : le temps des réglages initiaux, il faudra un clavier et une souris USB (inutile par la suite si on se connecte sur le RasPi à distance via ssh par exemple).
II- Repiquage d'une sortie 5 volt sur le contrôleur d'affichage :
Il est possible d'alimenter le Raspberry Pi à partir de la carte contrôleur graphique de l'écran. Ceci permet d'éviter d'avoir une alimentation supplémentaire.
J'ai donc coupé le câble d'un chargeur USB avec prise micro-USB (les câbles de chargeur n'ont que 2 fils, attention de ne pas couper un câble micro-USB véhiculant des données, ça serait dommage).
Ensuite on soude ce câble sur les plots délivrant du 5V sur la carte contrôleur en faisant attention à la polarité : le rouge sur le +5V et le noir sur la terre GND (voir les captures d'écran ci-contre).
Désormais, l'alimentation de la carte contrôleur de l'écran alimentera aussi le Raspberry Pi.
III- Fixation de l'ensemble au dos de l'Écran
J'ai tout monté sur une platine au dos de l'écran afin d'en faire un ordinateur tout en un. Voir les détails du montage ici : https://lofurol.fr/joomla/electronique/114-transformer-un-ecran-de-laptop-en-moniteur-autonome
IV- Installation et réglage de l'OS sur la carte SD :
J'ai décidé d'installer la version Raspbian Pixel se basant sur Debian Jessie : http://www.framboise314.fr/raspbian-pixel-version-septembre-2016-les-nouveautes/
a) Instructions pour installer Raspbian sur sa carte SD :
Sources :
- https://www.raspberrypi.org/documentation/installation/installing-images/README.md
- sur Linux : https://www.raspberrypi.org/documentation/installation/installing-images/linux.md
À partir des infos trouvées sur le site ci-dessus, sur mon portable sous Ubuntu 16.04, voici la commande que j'ai utilisé (ma carte SD étant /dev/mmcblk0 : pour le savoir, taper la commande "df -h") AVEC PRÉCAUTION à cause de "dd" (peut effacer votre disque dur en un rien de temps si on ne fait pas attention à la cible "of=" !!!) :
sudo dd bs=4M if=2017-03-02-raspbian-jessie.img of=/dev/mmcblk0
Remarque : attention le processus de recopiage sur la carte SD est assez long (une dizaine de minutes environ).
b) Mise à jour de la distribution Raspbian
Ensuite on insère la carte SD dans le Raspberry et on démarre. On va dans la configuration pour paramétrer selon ses besoins (langage notamment). Puis on met à jour avec la commande :
sudo apt-get update
c) Configuration de Raspbian et du clavier AZERTY
Une fois l'installation réalisée, on configure Raspbian afin de l'adapter à nos besoins : modification du mot de passe par défaut (très important pour des questions de sécurité ) , langage, affichage, ssh, vnc, ... Pour cela, il faut aller dans le menu principal -> "Préférences" -> "Configuration du Raspberry Pi" et faire ses modifications.
Il subsiste toutefois un problème lorsqu'on se met sur une des consoles (CTRL + ALT + F1 par exemple) car le clavier est configuré en QWERTY même si on a correctement configuré la langage. C'est d'autant plus embêtant que lorsqu'on se déconnecte, la saisie du mot de passe se fait aussi en QWERTY. Le seul moyen de contourner ces problèmes est dans un terminal de saisir la commande :
sudo raspi-config
et de changer les paramètres de langue et de clavier. Après un redémarrage, tout rentrera dans la normale.
d) Retrouver l'IP de son Raspberry / Connexion en ssh
L'utilité est de pouvoir "commander" à distance, via la ligne de commande, son Raspberry Pi à travers une connexion ssh (à condition que le RasPi soit connecté au réseau).
De son portable par exemple, on peut arriver à connaître l'adresse IP attribuée au RasPi en utilisant la commande "nmap" (voir la documentation ici : https://nmap.org/man/fr/man-host-discovery.html) :
sudo nmap -PU -sP 192.168.1.0/24
Cette commande affiche la liste des postes connectés sur le réseau en indiquant leur adresse IP mais aussi le fabriquant. Il suffit donc de repérer le matériel s'appelant Raspberry Pi. Voici les lignes qui concernent notre framboise :
Nmap scan report for pc72.home (192.168.1.25)
Host is up (0.021s latency).
MAC Address: 12:34:11:11:11:11 (Raspberry Pi Foundation)
Maintenant qu'on a l'info (et à condition d'avoir activé la connexion ssh sur le RasPi) on va pouvoir se connecter sur son terminal en tapant la commande :
ssh
Il suffira ensuite d'accepter la connexion et de saisir le mot de passe de l'utilisateur "pi". Nous voilà arrivés sur le terminal du RasPi : cela va grandement nous faciliter la tâche pour l'administrer à distance (plus besoin d'y accéder physiquement).
Une fois qu'on a fini, pour se déconnecter on tape "exit" ou bien on utilise le raccourci "CTRL+D".
e) Afficher l'écran du Pi à distance via le protocole VNC
De même que précédemment, il est possible d'afficher sur son portable, l'écran du Pi : c'est un affichage graphique à distance. Pour cela on utilise VNC qu'il faut avoir activer sur son Pi. Il suffit de connaître l'adresse IP de son Pi (voir chapitre précédent) et d'avoir un client VNC sur sa machine. Sur Ubuntu 16.04, il existe "Remmina" mais visiblement on ne peut pas se connecter sur le serveur RealVNC installé sur Raspbian. Il faut installer le client RealVNC sur Ubuntu et paramétrer sur le RasPi, le serveur RealVNC dans l'onglet "Sécurité" sur "Mot de passe VNC" et donner des mots de passe à chaque type d'utilisateur (user et admin).
f) Activer le pavé numérique au démarrage
Pour activer le pavé numérique au démarrage, il faut éditer le fichier /etc/kbd/config avec la commande :
sudo nano /etc/kbd/config
et décommenter la ligne en enlevant le signe dièse # devant l'instruction "LEDS=+num". Comme ça ne marchait pas, j'ai aussi installé le paquet "numlockx", ce qui a résolu le problème.
g) Activer et paramétrer le wifi natif
Source : https://www.raspberrypi.org/documentation/configuration/wireless/
Ceci évite d'avoir à se brancher en filaire par câble Ethernet RJ45 : on gagne en autonomie. Il suffit juste de choisir le réseau wifi auquel on veut se connecter et de saisir sa clé en cliquant sur l'icône dédiée aux réseaux en haut à droite.
h) Faire disparaître le curseur de la souris :
Il faut installer le paquet "unclutter" qui permet de faire disparaître le curseur de la souris au bout de 3 secondes par défaut.
i) Orientation de l'affichage en mode portrait
Si l'on a besoin d'afficher l'écran en mode portrait, il faut éditer le fichier "/boot/config.txt" et rajouter le paramètre "display_rotate=1" (ou 3 si l'on veut dans l'autre sens).
V- Paramétrage du navigateur Chromium pour fonctionner en mode kiosque
Sources principales :
- https://www.jjtronics.com/wordpress/2016/11/04/raspberry-pi-raspbian-pixel-et-chromium-en-mode-kiosk-ouverture-automatique-dun-navigateur-en-mode-plein-ecran-au-demarrage-de-raspbian/
- https://obrienlabs.net/setup-raspberry-pi-kiosk-chromium/
- Ajout le 28/12/2018 (suite de cet article à mettre à jour) : http://martinpennock.com/blog/disable-restore-session-bubble-chromium-raspberry-pi/
L'idée est de démarrer pour n'avoir affiché en plein écran que les pages web qui nous intéressent. Ici pas besoin de transformer notre Pi en serveur Web Apache mais juste de récupérer une page web déjà existante : ça a le mérite de la simplicité.
a) Paramétrer le navigateur en mode kiosque au démarrage :
Pour cela, il faut installer un paquet d'extensions pour Chromium, le navigateur Internet natif de la distribution Raspbian avec la commande :
sudo apt-get install rpi-chromium-mods
Ensuite il faut configurer le RasPi afin qu'il adopte un fonctionnement particulier. Pour cela, il faut éditer le fichier de démarrage de session avec la commande :
sudo nano ~/.config/lxsession/LXDE-pi/autostart
Et il faut commenter (les rendre inactives en rajoutant devant le signe #) des lignes existantes et en rajouter. Voici le contenu de ce fichier après modifications :
@lxpanel --profile LXDE-pi
@pcmanfm --desktop --profile LXDE-pi
#@xscreensaver -no-splash
@point-rpi
#Rajouté par Thierry pour le mode kiosque au démarrage
@xset s off
@xset -dpms
@xset s noblank
unclutter -idle 0
# If Chrome crashes (usually due to rebooting), clear the crash flag so we don't have the annoying warning bar
# Ça ne marche pas : contournement on utilise la navigation privée avec l'option -incognitosed -i 's/"exit_type":"Crashed"/"exit_type":"Normal"/' /home/pi/.config/chromium/Default/Preferences
sed -i 's/"exited_cleanly":false/"exited_cleanly":true/' /home/pi/.config/chromium/Default/Preferences@chromium-browser -noerrdialogs -kiosk -incognito https://adresse1 http://adresse2
La dernière ligne concerne le paramétrage de Chromium et des onglets des pages à afficher. On utilise la navigation privée via l'option -incognito pour ne pas avoir de messages d'erreurs au démarrage après un arrêt brutal de Chromium.
b) Rotation automatique des onglets avec l'extension Revolver
Il faut installer le plugin Revolver en cliquant à cette adresse : https://chrome.google.com/webstore/detail/revolver-tabs/dlknooajieciikpedpldejhhijacnbda
On peut y paramétrer la durée d'affichage en fonction des onglets.
c) Connexion automatique sur des sites demandant un code d'accès à l'aide de scripts
On peut installer le plugin Auto-login en cliquant à cette adresse : https://chrome.google.com/webstore/detail/auto-login/kjdgohfkopafhjmmlbojhaabfpndllgk. Le problème se pose avec cette extension lorsque l'on veut se connecter sur 2 onglets ayant la même identification (même site ou application). On peut donc passer par du javascript pour compléter la page de connexion automatiquement (ATTENTION ce n'est pas sûr car on envoie son mot de passe en clair...).
On se crée un script intitulé "autologin.user.js" avec ces lignes (à adapter selon les intitulés des éléments et du bouton de soumission de la fenêtre de connexion) :// ==UserScript==
// @match http://adresse_du_site/*
// ==/UserScript==
var username = "nom_d'utilisateur";
var password = "som_mot_de_passe";
document.getElementById("username").value = username;
document.getElementById("password").value = password;
document.getElementById("valider").click();
Ensuite on fait glisser cette extension dans la fenêtre Chromium gérant les extensions (en tapant dans la barre d'adresse "chrome://extensions") et on l'autorise à fonctionner en mode privé en cochant la case adéquate.
La redirection pour Owncloud ne se fait pas correctement : on arrive sur la page générale des tâches au lieu de celle de l'école. Qu'à cela ne tienne, on va donc créer un autre script "redirection_owncloud.user.js" pour le faire :
// ==UserScript==
// @match https://mariecurielezignan.fr/owncloud/index.php/apps/*
// @description Permet de rediriger et rafraîchir l'affichage toutes les 5 minutes
// @name Affichage Owncloud
// ==/UserScript==
if (window.location.href == "https://mariecurielezignan.fr/owncloud/index.php/apps/tasks/#/collections/all") {
window.location.replace("https://mariecurielezignan.fr/owncloud/index.php/apps/tasks/#/calendars/ecole-projets-suivi-dossiers");
window.location.reload();
}
// Rafraichit les onglets toutes les 5 minutes
var numMinutes = 5;
window.setTimeout("document.location.reload();", numMinutes*60*1000);
Comme le script précédent on l'installe dans Chromium en l'autorisant à s'exécuter en page privée.