████   ██               ██                 ██               ██   ████
 ░░░░   ░░██             ██  ██   ██     ██ ░░██             ██   ░░░░
         ░░██           ██  ░░██ ░░██   ██   ░░██           ██
          ░░██         ░██   ░░   ░░   ██     ░██          ██
           ░░██        ░██            ██      ░██         ██
            ░░██       ░░██         ██        ██         ██
             ░░██ █████ ░░██     ███         ██   █████ ██
              ░░ ░░░░░   ░░     ░░░         ░░   ░░░░░ ░░
      

Mode kiosk sur une Raspberry Pi 1

█▓▒░「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 car je suis gentil. ;)


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:

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

Et maintenant on installe le plugin.

EDIT: luakit est une alternative à ne pas écarter mais qutebrowser 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 :

Afin de décommenter la ligne suivante :

Ah et ne pas oublier de rajouter cette ligne à la fin :

.: 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 :

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 :

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é…