aboutsummaryrefslogtreecommitdiff
path: root/source/blog/2016-06-04-Mode-kiosk-sur-une-Raspberry-Pi-1.md
blob: 27fc5ab69703201118ae52e299485adfef191c4f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
---
title: "Mode kiosk sur une Raspberry Pi 1"
date: 2016-06-04T00:37:05+02:00
date_display: Jun 04, 2016
---

# 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. ;)

---------------------

<i class="fa fa-exclamation-triangle" aria-hidden="true"></i> 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:

```sh
#!/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 :

```sh
[[ -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 :

```
allowed_users=anybody
```

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