Le système
Pour l’un de mes stages il y a quelques semaines, je devais réaliser un écran connecté afin de faire un show room pour une entreprise mais le matériel fournis étant une Raspberry Pi 1, je me suis tout de suite douté qu’il risquait d’avoir des problèmes de performances. De plus pour faire cet écran connecté, le chef de projet avait décidé de le faire en web, peut être qu’il aurait été préférable de le faire avec une autre techno, je ne sais pas car je n’ai pas étudié la question.
Mais des problèmes de performances, oh que oui j’en ai rencontrés !
Pour commencer, je ne connaissais pas les configurations déjà présentes sur la carte et dès que j’ai commencé à mettre en un peu de JS dans mon code pour la page web, le navigateur n’a pas arrété de crasher au démarrage de la rasp.
Bon, après le changement de la conf sur plusieurs navigateurs, de changement de gestionnaire de fenêtre j’ai ai eu marre et j’ai décidé de changer directement de distribution. Ah oui, car la rasp était de base sur une raspbian, alors j’ai installé un archlinux dessus et depuis elle va beaucoup mieux, par contre je ne vous cache pas que le JS est toujours lent mais fonctionnel.
EDIT: tinycorelinux aurait pus être une alternative aussi…
Pour l’installation d’Archlinux, pas besoin d’expliquer comment faire, la doc sur leur site est très bien mais je vous mets quand même un [lien](https://archlinuxarm.org/platforms/armv6/raspberry-pi/#installation) car je suis gentil. ;)
Warning
Avant d’aller plus loin, je vous conseille viviement de changer les mots de passe des comptes root
et alarm
!
Après l’installation, j’ai dû installer quelques paquets, que voici :
Pour la partie graphique :
xorg-server
xorg-xinit
matchbox-window-manager
xf86-video-fbdev
xorg-xset
fbset
xwit (aur)
Et pour la partie serveur web :
php
php-apache
php-mcrypt
apache
Démarrage auto
Bon avant d’automatiser le tout nous allons faire en sorte que notre interface graphique démarre sans encombre. Pour ça nous allons créer le fichier .xinitrc
ou le modifier si celui-ci est déja présent, voila à quoi ressemble mon fichier de conf:
#!/bin/sh
while true; do
# Disable DPMS / Screen blanking
xset -dpms
xset s off
# Reset the framebuffer's colour-depth
fbset -depth $( cat /sys/module/*fb*/parameters/fbdepth );
# Hide the cursor (move it to the bottom-right, comment out if you want mouse interaction)
xwit -root -warp $( cat /sys/module/*fb*/parameters/fbwidth ) $( cat /sys/module/*fb*/parameters/fbheight )
# Démarre le gestionnaire de fenétre (suprimer "-use_cursor no" si vous vouler l'intégration de la souris)
matchbox-window-manager -use_titlebar no -use_cursor no &
midori -a http://127.0.0.1/Magpie-box -e Fullscreen
done;
Je précise que dans le cas actuel ma boucle permet de redémarer le navigateur en cas de crash de celui-ci au cas où…
Et pour démarrer cette interface graphique un simple coup de startx
et c’est plié.
Le navigateur
On va s’occuper de l’étape où j’ai passé la plus part de mon temps, la configuration du navigateur. Car après m’être littéralement battu avec eux j’ai enfin trouvé la solution ! Sur la Raspberry Pi 1 seulement midori et firefox pouvaient tourner mais le problème est le suivant :
Midori prend peu de ressources mais a quelques soucis avec le javascript;
Firefox gère très bien le javascript mais prend trop de ressources pour la rasp – je parle du cas où il y a des images plutôt lourdes à charger, ce qui était mon cas pour le projet malheureusement :/
Midori pose aussi problème lorsqu’on éteint et qu’on redémmare la rasp de manière brutale, physiquement, le navigateur tente de recharger l’onglet fermé mais n’y arrive pas et du coup il faut rafraichir la page à la main mais je n’ai pas trouvé le moyen de désactiver ce fichu plugin malheureusement.
Donc j’ai opté pour firefox, par contre le mode kiosk n’est possible qu’en installant un plugin et cela ce fait de manière graphique, je n’ai pas encore regardé pour le faire via le terminal. Il faut commencer par modifier la config en tapant dans la bar d’adresse about:config
et approuver qu’on ne va pas tout casser. Après on change l’option de vérifiction de la signature du plugin de true à false : je ne comprends pas trop
xpinstall.signatures.required false
Et maintenant on installe le [plugin](https://github.com/NeodarZ/r-kiosk/blob/master/build/r_kiosk.xpi).
EDIT: luakit est une alternative à ne pas écarter mais [qutebrowser](https://qutebrowser.org) semble être une meilleur alternative… ;)
Configuration du serveur web
Une fois ceci configuré, il faut configurer le serveur web pour qu’il soit compatible avec php7, pour cela il faut éditer le fichier /etc/httpd/conf/httpd.conf
et commenter la ligne suivante :
LoadModule mpm_event_module modules/mod_mpm_event.so
Afin de décommenter la ligne suivante :
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
Ah et ne pas oublier de rajouter cette ligne à la fin :
Include conf/extra/php7_module.conf
Mise en place de la connection automatique
Maintenant que notre interface graphique démarre tranquillement, on va pouvoir automatiser le tout, pour cela on va commencer par faire en sorte que la connection soit automatique pour cela on crée le dossier suivant : /etc/systemd/system/getty@tty1.service.d/
Et enfin créer et modifier le fichier suivant : /etc/systemd/system/getty@tty1.service.d/override.conf
:
[Service]
ExecStart=
ExecStart=-/sbin/agetty --autologin alarm --noclear %I 38400 linux
On peut remarquer que j’ai mis deux fois ExecStart=
, ce n’est pas une erreur, c’est juste que ma rasp ne voulait pas booter automatiquement avec un seul alors qu’avec deux, c’était nickel… Aller savoir pourquoi ^^
Bon maintenant que notre session se lance il va faloir faire en sorte que notre belle interface graphique se lance toute seule comme une grande, alors pour ça il faut commencer par copier le fichier suivant : /etc/skel/.bash_profile
et ajouter à la fin :
[[ -z $DISPLAY && $XDG_VTNR -eq 1 ]] && exec startx
Et là on se dit, oui c’est fini ! Et bien non ! :p
Ce serait trop facile. Pour faire simple, il faut juste autoriser n’importe quel utilisateur à lancer le serveur Xorg. Pour cela il vous faut créer et modifier le fichier /etc/X11/Xwrapper.config
et ajouter cette ligne :
Et voila maintenant c’est bon, nous pouvons profiter de notre mode kiosk fraichement installé ! ;)
Personnellement je ne vous cache pas que je me suis battu avec la conf de mon navigateur qui finalement démarre sans trop de difficulté…