Club robotique de Sophia-Antipolis

Accueil > POBOTpedia > Ordinateurs embarqués (SBC) > La carte Raspberry PI > Installation et configuration de la R-Pi > Utiliser la Raspberry en mode Kiosk

Utiliser la Raspberry en mode Kiosk

samedi 3 mai 2014, par Eric P.

Le mode kiosk (ou borne) consiste à dédier l’affichage graphique à l’usage exclusif d’une application, et de plus sans faire apparaître les habituels éléments du bureau graphique (panel, icones,...).

Parmi les exemples les plus couramment rencontrés : les distributeurs de billets, les affichages d’horaires dans les (aéro)gares,...

Plusieurs aspects sont à prendre en compte pour configurer la Raspberry de cette manière, et nous allons les détailler.

Scénario et contexte

Le scénario utilisé pour l’exemple consiste à utiliser le navigateur Midori pré-installé pour se connecter à une application Web qui implémente les fonctionnalités de notre borne. C’est identique pour une application desktop écrite avec Qt ou toute autre option.

La distribution utilisée est une Raspbian installé depuis une SD Noobs. L’environnement graphique est LXDE, sélectionné par défaut sur la Raspbian lorsqu’on la démarre en mode desktop.

Lancement automatique de l’environnement graphique customisé

Tout se passe dans le fichier d’initalisation de LXDE, en l’occurrence /etc/xdg/lxsession/LXDE/autostart.

Son contenu par défaut est :

@lxpanel --profile LXDE 
@pcmanfm --desktop --profile LXDE
@xscreensaver -no-splash

En détail, cela signifie :

  • lancer lxpanel qui se charge d’affficher.. les panels
  • lancer le file manager pcmanfm qui va se charger d’afficher et de gérer les divers icones de navigation dans votre système
  • lancer l’économiseur d’écran xscreensaver

Le "@" en début de ligne signifie que si la commande est en erreur, elle n’interrompt pas le script. Je précise ce "détail" car il m’a valu la perte de plusieurs heures et d’un paquet de neurones pour comprendre pourquoi les choses ne marchaient pas comme je le voulais. Nous en reparlerons plus loin.

Dans notre cas de figure, nous ne voulons rien de tout cela (rappelez-vous, l’appli utilise tout l’écran et on ne veut pas voir apparaître les habituels décorations et occupants du bureau graphique). Et nous ne voulons surtout pas d’économiseur d’écran, car un panneau d’affichage n’ayant pas de périphérique d’interaction utilisateur, on ne risque pas de pouvoir réactiver l’écran si l’économiseur entre en action.

Conclusion, on supprime tout cela (en gardant une copie de l’original quelque part quand même, ou en mettant les lignes en commentaire avec l’habituel "#" en tête).

A la place nous allons y mettre tout simplement la commande de lancement de notre application, soit :

@midori -e Fullscreen -a http://url/de/mon/application/web

Les options utilisées sont :

  • -e qui permet l’exécution d’une commande Midori, soit la commande Fullscreen qui passe Midori en mode plein écran. Ce mode fait en sorte que le contenu des pages occupe toute la surface de l’écran, ce qui est différent de maximiser la fenêtre du navigateur, qui laisse encore apparaître les éléments d’IHM de l’application.
    Pour connaître toutes les commandes disponibles, utilisez la commande "midori —help-execute". Si vous le faites depuis ssh, il faudra donner un display X, même si la commande affiche sa sortie sur la console. Dans ce cas, ajoutez l’option "—display :0" à la commande [1]
  • -a ... c’est tout simplement l’adresse où on veut naviguer

On aurait pu se passer du "@" ici, la commande étant la seule du script (et en tout cas la dernière).

C’est tout ?

Pas vraiment.

Si vous enregistrez ce fichier et que vous rebootez la RasPi, tout va très bien se passer, l’environnement graphique va se lancer, avec l’appli Web occupant tout l’écran comme voulu.

Ben alors, c’est terminé donc.

Attendez une dizaine de minutes... Tout d’un coup, écran noir. Rassurez-vous, la Raspberry n’est pas plantée, et il suffit de se connecter en ssh dessus pour le vérifier. Et pourtant il n’y a pas d’économiseur d’écran, puisqu’on a retiré son lancement du script autostart.

Oui, mais il reste le DPMS

DPMS ? Késaco ?

DPMS : Display Power Management System. En d’autres termes, le gestionnaire du mode économie d’énergie, qui coupe la vidéo au bout de 10 minutes environ par défaut, de telle sorte que le moniteur passe en mode veille, car ne recevant plus de signal vidéo.

Et comment on s’en débarrasse ?

Simple : en ajoutant les lignes suivantes dans le fichier autostart, avant le lancement de Midori :

@xset -dpms
@xset s off

xset est un utilitaire du server X qui permet d’en configurer un grand nombre d’aspects. Ici, on l’utilise pour respectivement :

  • désactiver le DPMS
  • désactiver le screensaver

Mais au fait, pourquoi on désactive le screensaver puisqu’on l’a supprimé de l’autostart ? En fait, xscreensaver (notez le "x" en tête) est un screensaver "décoratif", du genre qui affiche des jolis graphismes animés sur votre écran (ce n’est rien d’autre qu’une appli qui s’arroge la totalité du display pour faire ses gribouillis). Le screensaver dont il est question ici est un dispositif beaucoup plus bas niveau et qui fait partie de la gestion de l’énergie au niveau du serveur X.

A noter que pas mal de recettes disponibles sur le Web ajoutent l’instruction "xset s noblank". Cette commande configure X pour ne pas utiliser le signal blank video mais d’afficher un pattern graphique à la place lorsque le screensaver entre en action. Sauf qu’ici cela n’a aucune utilité puisqu’on l’a désactivé. J’ai pu vérifier que le fait de mettre ou non cette commande ne change rien. Donc autant ne pas la mettre.

Et voilà c’est terminé cette fois-ci.

Sauf que...

Le préfixe "@" est un piège. En effet, quelle que soit la manière dont la commande se déroule (erreur ou pas) on passe à la suivante. Et une erreur de commande, c’est aussi une commande qui n’est pas trouvée.

C’est précisément ce qui m’est arrivé et que j’évoquais en début d’article. La commande xset n’était tout simplement pas installée sur le système, et par conséquent le DPMS n’était pas désactivé alors que je pensais qu’il l’était. Par conséquent l’affichage de ma borne persistait à s’éteindre au bout de 10 minutes. Comment je m’en suis rendu compte ? Tout simplement en essayant d’exécuter la commande "xset -q -display :0.0" qui affiche la configuration actuelle du display par défaut. Quand on vous renvoie "xset : command not found" comme réponse tout devient clair.

Pour corriger cela, il suffit d’installer le paquet x11-xserver-utils (qui fournit la commande xset) via un classique "sudo apt-get install".

J’ai mis un moment à trouver la cause, car ayant installé deux RasPi identiques, toutes deux à partir d’une SD Noobs, je ne comprenais pas pourquoi ça fonctionnait parfaitement sur la première et pas sur la deuxième. Vérification faite, la première avait bien la commande xset car le package était installé. Pourquoi il ne l’était pas sur la deuxième ? Grand mystère.

J’ai peut-être une explication possible. Il y a deux choix pour sélectionner l’installation de la Raspbian à partir de la SD Noobs. Celui qui est cochée par défaut installe à partir de la distrib contenue dans la SD, et l’autre (juste au-dessus) la télécharge depuis le réseau. J’ai sélectionné cette option pour la deuxième config, pensant disposer ainsi d’une version plus récente. En fait elle doit être différente et ne pas inclure tout à fait le même contenu.

Un petit cadeau pour finir

Il reste un petit détail peu esthétique : le pointeur de la souris au milieu de l’écran. Ce serait bien de pouvoir le masquer.

Il existe une application pour cela : unclutter

Elle fait disparaître le curseur au bout d’un délai d’inactivité et s’installe depuis le repository standard, soit par l’habituel "sudo apt-get install unclutter". Ajoutez la ligne correspondante dans le fichier autostart pour le lancer au démarrage. unclutter —help ou man unclutter vous donneront toute l’information utile sur les options disponibles.

Là c’est parfait, - ah ah ah ah - ah... comme dit l’autre dans la pub.

Petite mise à jour [2017]

Les versions actuelles de Jessie ayant remplacé Midori par Chromium, il suffit de remplacer la commande de lancement du browser telle qu’illustrée plus haut par :

@chromium-browser --kiosk http://url/vers/mon/site

Si vous voulez réaliser une borne complète, avec écran tactile, meuble,... voici un article très intéressant (à qui j’ai emprunté le logo pour cette article) : http://pikiosk.tumblr.com/.

Attention, c’est un peu plus compliqué que ce que nous venons de voir.


[1attention, il y a deux "-" devant les deux options, cela peut ne pas être flagrant selon la fonte utilisée par votre navigateur

Vos commentaires

  • Le 20 janvier 2018 à 08:45, par guy En réponse à : Utiliser la Raspberry en mode Kiosk

    Bonjour,
    Merci pour votre tuto tres complet mais malheueusement je n’arrive a rien. C’est comme si mon rpi ne lisais pas le fichier autostart. J’ai installer la derniere verssion de Jessie depuis la config NOOBS_V2_4_1
    Si vous avez une idée a me proposé
    Merci

    • Le 4 février 2018 à 23:08, par Eric P. En réponse à : Utiliser la Raspberry en mode Kiosk

      Bonjour,
      L’article remontant à 2014, il se base sur la distribution en vigueur à ce moment-là. Or les choses ont un peu changé depuis, comme le montre certains des commentaires du file de discussion à la suite de l’article. Les avez-vous vous étudiés ?
      Cordialement.

    Répondre à ce message

  • Le 28 septembre 2017 à 16:08, par Hugo En réponse à : Utiliser la Raspberry en mode Kiosk

    Bonjour Eric,
    J’ai comme projet de créer une borne interactive et je voulais utiliser le mode kiosk de la Raspberry Pi 3 modèle B. Mais en modifiant le fichier autostart (en mode root puisque le simple mode pi ne fonctionne pas) avec les bonnes commandes, le plein écran ne marche pas après le reboot...
    Nous avons installé les commandes xset.
    Grand mystère, merci d’avance et bonne journée.
    Hugo

    • Le 29 septembre 2017 à 00:11, par Eric P. En réponse à : Utiliser la Raspberry en mode Kiosk

      Bonsoir,
      Que veut dire exactement : "le plein écran ne marche pas" ?
      Aucun affichage ? Affichage en mode normal (i.e. pas en plein écran) ?
      Cordialement

    Répondre à ce message

  • Le 8 avril 2017 à 03:37, par dabek En réponse à : Utiliser la Raspberry en mode Kiosk

    j’ai fait tout ce qui tu a dis mais il ya pas le mode kiosk tu peut m’aider mon frere

    • Le 12 avril 2017 à 12:16, par Eric P. En réponse à : Utiliser la Raspberry en mode Kiosk

      Les dernières versions de la distrib Raspbian ont évolué par rapport à celle de l’époque à laquelle l’article a été rédigé. Il se peut donc que des détails soient à ajuster.
      N’ayant pas de projet du même type actuellement, je n’ai pas fait de recherche sur le sujet. Si d’autres visiteurs ont l’information, ils sont les bienvenus pour les communiquer via les commentaires.

    Répondre à ce message

  • Le 25 octobre 2016 à 09:56, par Paul C En réponse à : Utiliser la Raspberry en mode Kiosk

    Génial !
    Juste un update : pour moi le fichier était dans /home/pi/.config/lxsession/LXDE-pi/autostart
    Bonne journée

    • Le 23 novembre 2016 à 13:57, par Eric P. En réponse à : Utiliser la Raspberry en mode Kiosk

      Merci pour la précision.
      Les distributions ont un peu évolué depuis la rédaction de mon article. De plus, selon celle qu’on utilise (Occidentalis, Noobs, Raspbian pure,...) et leur version la localisation des resources peut différer.

    Répondre à ce message

  • Le 6 janvier 2016 à 17:11, par Ced En réponse à : Utiliser la Raspberry en mode Kiosk

    Article intéressant, je ne connaissais pas unclutter... pratique :D

    Répondre à ce message

  • Le 20 octobre 2015 à 11:37, par Renaud Da Silva En réponse à : Utiliser la Raspberry en mode Kiosk

    Bonjour,
    Merci pour ce auto précis, simple et efficace pour utiliser le raspberry en mode kiosque. Petite Question :
    Je n’ai pas trouvé d’option pour définir un niveau de zoom par défaut au lancement du navigateur ?

    • Le 20 octobre 2015 à 13:46, par Eric P. En réponse à : Utiliser la Raspberry en mode Kiosk

      Je ne la connais pas de tête si elle existe, et n’ai pas de RasPi sous la main pour tester.
      Ceci étant, la liste des commandes disponibles pouvant être fournies à l’option "-e" est obtenue via :
      “midori –help-execute”.

    Répondre à ce message

  • Le 3 septembre 2015 à 15:00, par michel En réponse à : Utiliser la Raspberry en mode Kiosk

    Salut !
    Super ce petit tuto 😉
    Je voudrais juste savoir comment faire pour actualiser ma page web tout les X temps ?
    Merci
    Michel

    • Le 3 septembre 2015 à 15:37, par Eric P. En réponse à : Utiliser la Raspberry en mode Kiosk

      Il y a plusieurs techniques, depuis le tag "refresh" dans le header jusqu’à Javascript.
      Comme très souvent Google est ton ami. Essayez la requête "html periodic refresh" pour une présentation des diverses options possibles.

    Répondre à ce message

  • Le 29 septembre 2014 à 12:29, par Jerome En réponse à : Utiliser la Raspberry en mode Kiosk

    Hello
    Merci pour ces tips vraiment bien expliquées !


    AJOUT


    Pour supprimer le log et lancer directement le mode graphique, j’aurai rajouter cela
    Auto StartX (Run LXDE)


    sudo nano /etc/rc.local
    A la fin du fichier, rajouter la ligne suivante au dessus de "exit 0" :
    su -l pi -c startx
    (lance le Server graphique avec l’utilisateur pi )


    QUESTION


    Si je souhaite maintenant naviguer sur l’écran d’affichage du raspberry DEPUIS l’extérieur (avec seulement un ssh acces), genre faire une démo à distance.
    Comment peut on faire ?

    • Le 29 septembre 2014 à 22:44, par Eric P. En réponse à : Utiliser la Raspberry en mode Kiosk

      Merci pour les compliments 😐
      Si "supprimer le log" signifie bypasser le login, il suffit tout simplement de configurer la RasPi en auto-login. D’ailleurs les cartes dont cet article décrit la configuration démarrent automatiquement sans aucune intervention pour le login.
      Concernant la question : il faut utiliser les options -X ou -Y de la commande ssh.
      Elles ont pour rôle de transférer également le trafic X (l’option -X applique en plus les security policies, ce dont on peut se passer dans un contexte de réseau purement local).
      Lorsqu’on va lancer une commande qui utilise le display graphique depuis la console ssh, c’est la machine d’où on passe la commande (le client ssh donc) qui fait office de serveur X pour l’application, et donc toute l’interaction graphique a lieu depuis ce poste.
      Attention à ce que le serveur ssh sur la RasPi soit configuré pour autoriser le déport du trafic X également (option ForwardX11 à yes dans /etc/ssh/ssh_config).

    Répondre à ce message

Un message, un commentaire ?

modération a priori

Attention, votre message n’apparaîtra qu’après avoir été relu et approuvé.

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.