Couches personnalisables¶
Version
Page écrite pour pupitre 0.1.35-1.
Un serveur pupitre empile des couches : Debian en bas, le paquet pupitre par-dessus, puis des couches optionnelles que l'administrateur pilote, et enfin ce que la collectivité ajoute elle-même. Savoir à quelle couche appartient un fichier dit trois choses : qui a le droit de le changer, comment le changer, et s'il survivra à la prochaine mise à jour du paquet.
Les couches, de la base Debian aux ajouts de la collectivité : qui change quoi, et ce qui survit à une mise à jour.
Deux modes de session, deux périmètres¶
Une partie de ce qui suit ne vaut qu'en mode élèves. Le siège a deux modes (variable
PUPITRE_CONNEXION) :
fixe, le défaut : le siège ouvre lui-même un bureau Xfce fixe, sans écran de connexion ;eleves(depuis 0.1.27) : un écran de connexion LightDM par siège, une session par élève sous son propre compte.
Les raccourcis de l'école sur le bureau, le son d'ouverture de session, l'absence de verrouillage
d'écran (light-locker masqué) et le pavé numérique allumé à l'écran de connexion passent par la
session LightDM : ils sont propres au mode élèves. En mode fixe, le siège lance lui-même
xfce4-session et ne lit pas /etc/X11/Xsession.d/60pupitre.
L'apparence PrimTux, la politique Firefox, les briques de contrôle et la règle polkit valent pour les deux modes.
Les couches, de bas en haut¶
| Couche | Livrée par | Où elle vit | Qui la change |
|---|---|---|---|
| 1. Debian 13 | apt | partout | apt |
| 2a. Base de pupitre, toujours active | le paquet | /usr/share/pupitre, /usr/lib/pupitre, /usr/lib/firefox-esr/distribution/, /usr/share/lightdm/, /usr/share/polkit-1/rules.d/ |
personne |
| 2b. Conffiles | le paquet | /etc/pupitre/, /etc/pam.d/pupitre, /etc/X11/Xsession.d/60pupitre |
l'administrateur, avec prudence |
| 3. Couche de contrôle (depuis 0.1.28) | le paquet, briques activées par l'administrateur | fichiers posés dans /etc par chaque brique |
pupitre-controle |
| 4. Apparence PrimTux | paquets PrimTux installés par un script | thèmes système, xfconf réécrit à chaque démarrage de siège | variables PUPITRE_* |
| 5. Logiciels de l'école | scripts du paquet | /usr/bin/tuxbot, bureau de l'élève |
l'administrateur, une fois |
| 6. Ajouts de la collectivité | vous | drop-ins systemd, /etc/firefox-esr/, /etc/lightdm/, /etc/skel |
vous |
| 7. L'élève | l'élève | ~/.config de son compte |
l'élève |
La base livrée, toujours active¶
Le paquet installe une base que la mise à jour suivante remplace en entier. Elle porte la sécurité et la vie privée, et n'est pas négociable :
- la politique Firefox de base, dans
/usr/lib/firefox-esr/distribution/policies.json(voir la politique Firefox) ; - la règle polkit qui interdit aux élèves et à l'écran de connexion d'éteindre, redémarrer ou mettre en veille le serveur, ainsi que toute action systemd (depuis 0.1.27) ;
- la configuration de LightDM et de son écran de connexion, dans
/usr/share/lightdm/; - les lanceurs du bureau, l'autostart des élèves, les briques et les scripts.
Ne modifiez aucun fichier sous /usr/share/pupitre, /usr/lib/pupitre ou
/usr/lib/firefox-esr/distribution/ : il serait écrasé à la mise à jour suivante.
Les cinq conffiles¶
Le paquet construit déclare exactement cinq conffiles (debian/pupitre/DEBIAN/conffiles) :
| Fichier | Rôle | Le modifier ? |
|---|---|---|
/etc/pupitre/pupitre.conf |
le gestionnaire : interface, IP, nombre de sièges, enrôlement, console web | oui, c'est fait pour |
/etc/pupitre/limits.conf |
fichiers ouverts des sessions élèves (souple 1024, dure 4096) | avec prudence |
/etc/pupitre/pam-env.conf |
environnement PAM des sessions | non conseillé |
/etc/pam.d/pupitre |
service PAM des sessions élèves ouvertes par LightDM sur les sièges | non conseillé |
/etc/X11/Xsession.d/60pupitre |
ouverture d'une session élève | non conseillé |
dpkg garde un conffile que vous avez modifié, et pose la question si le paquet change aussi le sien. Les trois derniers portent l'isolement entre élèves : ne les affaiblissez pas.
Où se règlent les sièges¶
/etc/pupitre/pupitre.conf ne règle que le gestionnaire. Les réglages d'un siège (mode de
connexion, apparence, fond, lanceurs de la barre, mémoire, etc.) sont des variables PUPITRE_*
posées par un drop-in systemd reglages.conf de pupitre-seat@.service, décrit dans
Installation, les sièges. Un drop-in dans /etc/systemd/system
appartient à l'administrateur : il survit aux mises à jour. La liste des variables et leur défaut
est dans Versions et fonctionnalités.
La couche de contrôle (depuis 0.1.28)¶
La couche de contrôle regroupe les choix éducatifs, chacun sous forme de brique qui couvre tout le serveur. Pas de démon, pas de fichier de configuration, pas de fichier d'état : l'état d'une brique se lit sur le disque.
| Brique | Effet | État par défaut | Depuis |
|---|---|---|---|
dns-recherche-sure |
un Unbound local réécrit les noms de DuckDuckGo, Google et YouTube vers leurs versions sûres ; le reste part au DNS de l'école | allumée | 0.1.28, allumée par défaut depuis 0.1.33 |
recherche-enfants |
Firefox ne cherche qu'avec « DuckDuckGo sûr » (filtre strict) ou Qwant Junior, les autres moteurs sont retirés, la région est figée à FR | éteinte | 0.1.28 |
video-fenetre |
pas de plein écran dans Firefox, les vidéos restent dans la fenêtre | éteinte | 0.1.30 |
accueil-pupitre |
Firefox démarre sur une page locale de quatre tuiles (Qwant Junior, Vikidia, Calcul@tice, TACIT) | éteinte | 0.1.30 |
Activer ou désactiver une brique¶
sudo pupitre-controle etat
sudo pupitre-controle activer recherche-enfants
sudo pupitre-controle desactiver video-fenetre
etat affiche chaque brique, active ou inactive, et une ligne de description. Activer deux fois
ne change rien ; désactiver retire exactement ce que la brique a posé. Une brique refuse
d'écraser un fichier qui n'est pas le sien, et ne le retire pas à la désactivation. Un nom inconnu
est refusé (code 2). activer et desactiver exigent root, etat se lit aussi sans
(scripts/pupitre-controle).
Dans Firefox, about:policies montre la politique réellement appliquée.
Ce qu'il faut savoir sur dns-recherche-sure :
- elle n'est allumée d'office qu'à la première installation, et une seule fois à la mise à jour
depuis une version antérieure à 0.1.33-1 (
debian/postinst). Ensuite, le choix de l'administrateur prévaut : une brique désactivée reste désactivée ; - elle exige que
/etc/resolv.confsoit écrit par dhcpcd. Avec NetworkManager, par exemple, elle refuse et dit pourquoi, et l'installation continue ; - elle lit les serveurs DNS de l'école au moment de l'activation : si le DNS de l'école change,
relancez
activer; - si Unbound s'arrête, les postes retombent sur le DNS de l'école, sans recherche sûre ;
- le mode restreint de YouTube ne retire pas les Shorts : c'est une limite de YouTube.
Avant de désinstaller le paquet, désactivez les briques actives : apt remove et apt purge
laissent leurs fichiers en place.
Écrire une brique¶
Une brique est un script exécutable de /usr/share/pupitre/controle/ qui répond à etat (code 0 si
active, 1 sinon, plus une ligne de description), activer et desactiver. Il n'existe pas de
répertoire prévu pour les briques d'une collectivité : une nouvelle brique se contribue au dépôt
(scripts/controle/, déclarée dans debian/pupitre.install, testée sur le modèle de
tests/test_controle.py). Pour une préférence Firefox, scripts/controle/video-fenetre donne le
modèle en dix lignes, à partir de prefs-firefox.sh.
La politique Firefox¶
Firefox ne fusionne pas ses politiques : un fichier de politique en remplace un autre en entier.
Les préférences des fichiers .js, elles, s'additionnent.
L'ordre dans lequel Firefox lit ses politiques et ses préférences.
- La base,
/usr/lib/firefox-esr/distribution/policies.json, livrée par le paquet : télémétrie et études coupées, DNS sur HTTPS coupé et verrouillé (depuis 0.1.28) ; page de nouvel onglet sans actualités ni contenu sponsorisé, uBlock Origin installé d'office,about:configbloqué, ni page de bienvenue, ni compte Mozilla, ni import, ni suggestions, quatre sites de l'école épinglés (depuis 0.1.30) ; bandeaux de cookies masqués par les listes d'uBlock (depuis 0.1.32, effet au second démarrage de Firefox sur un profil existant). /etc/firefox/policies/policies.json, s'il existe, remplace toute la base. C'est là que la briquerecherche-enfantspose un fichier complet : la base, plus les moteurs pour enfants./etc/firefox-esr/*.jss'ajoutent à la politique active. Les briquesvideo-fenetreetaccueil-pupitrey posentpupitre-video-fenetre.jsetpupitre-accueil-pupitre.js, en préférences verrouillées.- Le profil de l'élève : seules les préférences non verrouillées restent modifiables, comme les sites épinglés.
Pour ajouter une préférence à vous, posez un fichier .js dans /etc/firefox-esr/ avec un nom qui
ne commence pas par pupitre-. Ne posez jamais un /etc/firefox/policies/policies.json à la main :
il effacerait toute la base (télémétrie, DNS sur HTTPS) et empêcherait recherche-enfants de
s'activer. Si vous le faites malgré tout, il doit reprendre toutes les clés de la base.
L'apparence¶
L'apparence PrimTux (thèmes Colloid, icônes, police Luciole, fond uni et mascotte) est optionnelle (depuis 0.1.1). Le détail est dans Apparence.
Installer les paquets PrimTux, une fois :
sudo pupitre-themes-primtux
Le script installe trois paquets PrimTux (thème, icônes, police) et le paquet des fonds d'écran
(41 Mo), seule source de la mascotte, que --sans-fond évite. Rien de PrimTux n'est copié dans le
paquet pupitre. Sans ces paquets, le siège marche quand même, avec l'aspect Xfce par défaut pour
chaque réglage manquant.
Changer le thème, par des variables dans le drop-in commun pupitre-seat@.service.d/ :
PUPITRE_GTK_THEME, PUPITRE_WM_THEME, PUPITRE_ICON_THEME, PUPITRE_CURSOR_THEME,
PUPITRE_FONT, PUPITRE_TITLE_FONT, PUPITRE_MONO_FONT, PUPITRE_PANEL_SIZE,
PUPITRE_PANEL_ICON_SIZE, PUPITRE_BG_RGBA, PUPITRE_LANCEURS, PUPITRE_FOND_IMAGE.
PUPITRE_APPARENCE=0 saute toute l'apparence. Un thème ou une police absents sont journalisés et
laissés de côté. Le changement prend effet au prochain démarrage du siège.
Le fond coûte du débit. Chaque image est encodée en RLE avant de partir vers le boîtier : un
plein écran du fond PrimTux d'origine fait 2 584 997 octets, l'aplat 72 378, l'aplat avec la mascotte
127 364 (docs/apparence.md). Préférez un aplat ou une image à grands aplats, aux dimensions de
l'écran (1280 x 1024 par défaut). PUPITRE_FOND_IMAGE vide donne l'aplat nu.
L'écran de connexion n'obéit pas à ces variables. Surchargez-le dans
/etc/lightdm/lightdm-gtk-greeter.conf (background, theme-name, font-name, etc.) : une clé
posée là l'emporte sur celle de pupitre (commentaire de config/lightdm/50-pupitre-greeter.conf).
Ce réglage vaut pour tout le serveur.
Pourquoi un réglage de /etc/xdg semble ignoré. En mode élèves, la session cherche sa
configuration dans cet ordre, du plus fort au plus faible (config/Xsession.d/60pupitre) :
~/.configde l'élève ;/var/lib/pupitre/xdg: les quatre canaux xfconf de l'apparence (xsettings,xfwm4,xfce4-desktop,xfce4-panel), réécrits à chaque démarrage d'un siège ;/usr/share/pupitre/xdg: l'autostart des élèves ;/etc/xdg: Debian et l'administrateur.
Un réglage de l'administrateur dans /etc/xdg pour l'un de ces quatre canaux est donc masqué par
pupitre ; les autres canaux (Thunar, clavier, etc.) s'appliquent. En mode fixe, l'apparence est
écrite dans le ~/.config du siège à chaque démarrage : un réglage fait en session dans ces quatre
canaux est perdu au démarrage suivant.
En mode élèves, l'apparence est commune à tous les sièges et republiée à chaque démarrage de siège : des drop-ins d'apparence différents d'un siège à l'autre se marcheraient dessus, le dernier siège démarré gagnant. Réglez l'apparence dans le drop-in commun.
Les logiciels de l'école¶
Le bureau de l'élève (mode élèves, depuis 0.1.30) : à chaque connexion, pupitre-bureau pose les
raccourcis de l'école dans un ordre fixe, après le dossier personnel et la place de la clé USB :
Calcul@tice, Vikidia, Qwant Junior, Writer, Impress, puis TuxBot une fois installé. Un raccourci
n'apparaît que si son programme est installé. Les sites s'ouvrent dans une fenêtre Firefox agrandie.
Rien d'autre sur le bureau n'est touché.
Ajouter un logiciel au bureau. Aucun point d'extension n'est prévu en 0.1.35-1 : la liste et
l'ordre sont dans le paquet (scripts/pupitre-bureau, variable ORDRE). Trois possibilités, de la plus propre à
la moins propre :
- Contribuer au dépôt : un
.desktopdansconfig/bureau/, avecTryExec, et son nom dansORDREdescripts/pupitre-bureau. - La barre des tâches :
PUPITRE_LANCEURS, une liste de.desktopde/usr/share/applications, dans le drop-in commun. Défaut :firefox-esr.desktop libreoffice-writer.desktop thunar.desktop. /etc/skel: un.desktopdéposé dans/etc/skel/Bureau/est copié à la première connexion de chaque nouvel élève seulement. Ne le nommez jamaispupitre-*:pupitre-bureaule retirerait.
TuxBot (depuis 0.1.25) :
sudo pupitre-logiciels-primtux
Le script active l'architecture i386 et le dépôt PrimTux, puis installe TuxBot et Wine 32 bits : environ 215 paquets et 2,6 Go. Le préfixe Wine est préparé sans fenêtre à l'ouverture de session (depuis 0.1.32). TuxBot est muet par construction : son animation ne contient aucun son, le son du siège n'y est pour rien.
Menus en français (depuis 0.1.25) : les sièges tournent en fr_FR.UTF-8, et le paquet dépend
des traductions françaises de Firefox et de LibreOffice.
Ce qui survit à une mise à jour¶
| Élément | Après apt upgrade |
|---|---|
| Conffiles modifiés | gardés ; dpkg pose la question si le paquet change aussi le fichier |
Drop-ins systemd, vos /etc/firefox-esr/*.js, /etc/lightdm/, /etc/skel |
gardés |
| État des briques | inchangé : aucune mise à jour n'allume ni n'éteint une brique, sauf dns-recherche-sure, allumée une seule fois à la montée depuis une version antérieure à 0.1.33-1 |
| Contenu d'une brique active | pas rafraîchi, voir ci-dessous |
| Base Firefox, scripts des briques, raccourcis, autostart, réglages LightDM, règle polkit | remplacés par ceux de la nouvelle version |
/var/lib/pupitre/xdg |
régénéré au prochain démarrage de siège |
| Fond et avatar PrimTux générés | gardés |
| Homes des sièges et des élèves | gardés (depuis 0.1.26 ; avant, une mise à jour les rendait à root) |
| Lien avec les boîtiers | maintenu (depuis 0.1.27) |
Une brique active n'est pas mise à jour toute seule. Le postinst ne relance pas activer.
recherche-enfants le signale (older version, run activer to update). video-fenetre,
accueil-pupitre et dns-recherche-sure se disent actives même si le paquet a changé leur contenu :
elles ne vérifient qu'une marque ou un fichier de configuration.
Relancez pupitre-controle activer sur chaque brique active après une mise à jour.
Montée depuis 0.1.25, 0.1.26 ou 0.1.27 : les moteurs pour enfants étaient livrés par le paquet
dans /etc/firefox/policies/policies.json, que 0.1.28 retire ; ils disparaissent jusqu'à
sudo pupitre-controle activer recherche-enfants. Ce fichier, s'il avait été modifié, est gardé en
policies.json.dpkg-bak (debian/pupitre.maintscript).
LightDM ne relit sa configuration qu'à son démarrage, et le paquet ne le redémarre jamais : voir Installation, mode élèves.
Préconisations¶
À modifier, c'est prévu pour :
- Les briques, avec
pupitre-controle, selon la politique éducative de l'école. Relanceractiversur les briques actives après chaque mise à jour et après tout changement du DNS de l'école. - Les réglages des sièges, par un drop-in systemd de
pupitre-seat@.service, de préférence commun à tous les sièges. /etc/pupitre/pupitre.confpour le gestionnaire, dontenroll = noune fois la salle installée.- L'écran de connexion, par
/etc/lightdm/lightdm-gtk-greeter.conf. - Des préférences Firefox, par un fichier à vous dans
/etc/firefox-esr/. - Le fond d'écran : un aplat ou une image à grands aplats, aux dimensions de l'écran.
À ne pas toucher :
- Tout fichier sous
/usr/share/pupitre,/usr/lib/pupitreet/usr/lib/firefox-esr/distribution/: écrasé à la mise à jour. - Un
/etc/firefox/policies/policies.jsonécrit à la main : il remplace toute la base. - Les fichiers posés par les briques (fichiers
pupitrede/etc/unbound/,/etc/resolv.conf.head,/etc/firefox-esr/pupitre-*.js) : la prochaine activation les réécrit. /run/pupitre/seat-N.envet/var/lib/pupitre/xdg: régénérés./etc/pam.d/pupitre,/etc/pupitre/pam-env.conf,60pupitreet la règle polkit : ils portent l'isolement entre élèves et l'interdiction d'éteindre le serveur.- Un fichier à vous nommé
pupitre-*, sur le bureau d'un élève ou dans/etc/firefox-esr/. - Désinstaller le paquet avec des briques encore actives.