Démarrage automatique d’application sous Raspberry Pi

Expression du besoin

Les systèmes embarqués sont souvent dédiés à l’exécution d’une unique application qui doit se lancer automatiquement à la mise sous tension.

On distingue deux types d’application :

  • GUI (Graphical User Interface) : application qui se lance à partir d’une interface graphique
  • CLI (Command Line Interface) : application qui se lance à partir de la ligne de commande (le shell)

Démarrage automatique d’application GUI sous Raspberry Pi

Principe

Sur une RaspberryPi, il faut réaliser les trois étapes suivantes :

  • assurer le démarrage automatique de l’environnement GUI (LXDE, …)
  • assurer l’autologin d’un utilisateur (par exemple pi)
  • assurer le démarrage de l’application GUI

Assurer le démarrage automatique de l’environnement GUI

Le plus simple est de passer par l’outil de configuration :

$ sudo raspi-config 

Choisir 
    "3 Enable Boot to Desktop  Choose whether to boot into a desktop environment or the command-line" 
    
Puis Select 

    Should we boot straight to desktop? <Oui> <Non> 
    
Puis Oui

Ceci revient à lancer la commande update-rc.d (install and remove System-V style init script links) pour activer le service lightdm et qui permet de créer le lien dans le niveau de démarrage de votre Pi :

  • Activer le service lightdm :
$ sudo update-rc.d lightdm enable
  • Désactiver le service lightdm :
$ sudo update-rc.d lightdm disable 

Pour connaître le niveau de démarrage :

$ sudo  cat /etc/inittab | grep initdefault 
id:2:initdefault: 

$ sudo  runlevel 
N 2 

Les liens vers les scripts qui démarrent les services pour le niveau 2 :

$ ls -l /etc/rc2.d/ 
...
lrwxrwxrwx 1 root root  17 mai    9 17:02 S04lightdm -> ../init.d/lightdm 

Conclusion : le service lightdm sera bien lancé au niveau de démarrage 2.

Assurer l’autologin d’un utilisateur

Pour cela, il faut configurer le service lightdm (ici pour l’utilisateur pi) :

$ vim /etc/lightdm/lightdm.conf

autologin-user=pi

Assurer le démarrage de l’application GUI

Vous pouvez utiliser plusieurs façons de faire :

$ sudo vim /usr/share/applications/projet.desktop 

[Desktop Entry] 
Encoding=UTF-8 
Name=Projet BTS 
Name[fr]=Projet BTS 
GenericName=Projet BTS 
GenericName[fr]=Projet BTS 
Comment=Programme cesar 
Comment[fr]=Programme cesar 
#TryExec=/usr/bin/cesar 
Exec=/usr/bin/cesar 
Icon=designer-qt4 
Type=Application 
Categories=Qt;Development; 

Puis créer un lien pour la configuration de l’utilisateur concerné :

$ sudo ln -s /usr/share/applications/projet.desktop /home/pi/.config/autostart/ 

Ou pour l’ensemble des utilisateurs :

$ sudo ln -s /usr/share/applications/projet.desktop /etc/xdg/autostart/

Ou l’utilisateur concerné crée directement :

$ vim /home/pi/.config/autostart/projet-qt.desktop 

[Desktop Entry] 
Encoding=UTF-8 
Name=Test Projet BTS 
Name[fr]=Test Projet BTS 
GenericName=Projet BTS 
GenericName[fr]=Projet BTS 
Comment=Le projet BTS 
Comment[fr]=Le projet BTS 
TryExec=/home/pi/exemples/compteur-vitesse-qwt/speedo 
Exec=/home/pi/exemples/compteur-vitesse-qwt/speedo 
Icon=designer-qt4 
Type=Application 
Categories=Qt;Development; 

Remarque : c’est la ligne Exec=... qui assure l’exécution du programme, les autres lignes étant facultatives.

Le mode kiosk ou borne

Le mode kiosk a été conçu à l’origine pour les bornes internet (Internet kiosks). Ces bornes nécessitent la mise en place d’un environnement logiciel restreint aux fonctions essentielles afin d’empêcher les utilisateurs de faire quoi que ce soit d’indésirable ou de dangereux. Cela comprend aussi de dédier l’affichage graphique exclusivement à une application et d’enlever les composants graphiques habituels (curseur souris, barre de titre, tableau de bord, icones, etc…).

  • Désactiver le gestionnaire d’économie d’énergie (DPMS, Display Power Management System) et l’écran de veille :
$ xset -dpms -display :0.0
$ xset s off -display :0.0
$ xset s noblank -display :0.0
  • Configuration de l’environnement de bureau LXDE :
$ cat /etc/xdg/lxsession/LXDE/autostart
@lxpanel --profile LXDE
@pcmanfm --desktop --profile LXDE
@xscreensaver -no-splash
# ...
$ vim /etc/lightdm/lightdm.conf

# don't sleep the screen
xserver-command=X -s 0 dpms

Remarque : Si une ligne commence avec un arobase ‘@’, la commande le suivant sera automatiquement ré-exécutée si elle plante. Les lignes commençant par un dièse sont des commentaires.

LXPanel (lxpanel) est la barre des tâches standard de LXDE. PCMan File Manager (pcmanfm) est le gestionnaire de fichiers par défaut sous LXDE. XScreenSaver (xscreensaver) est un logiciel qui propose un ensemble d’écrans de veille (ou économiseurs d’écran).

Lien : wiki.lxde.org

Pour la Raspberry Pi 3 :

$ vim /home/pi/.config/lxsession/LXDE-pi/autostart
@xset s off
@xset -dpms
@xset s noblank
  • Masquer le curseur de la souris :
$ sudo apt-get install unclutter

Démarrage automatique d’application non-GUI sous Raspberry Pi

Assurer le démarrage d’une application non-GUI

$ sudo vim /etc/rc.local
...
su -l pi -c /home/pi/my-app

Assurer l’autologin d’un utilisateur

$ sudo vim /etc/inittab
...
#1:2345:respawn:/sbin/getty --noclear 38400 tty1 
1:2345:respawn:/bin/login -f pi tty1 </dev/tty1 >/dev/tty1 2>&1
...

Retour au sommaire