Dotfiles_ArchAP/greetd/README.md

111 lines
5.3 KiB
Markdown

# Labfy Greeter GTK4 V1
## Contrat
`greetd` ouvre la session PAM. Le client IPC envoie exclusivement
`["/usr/bin/uwsm", "start", "default"]` dans `start_session`, avec `env=[]`.
Le greeter GTK termine ensuite, `run-ui` demande la sortie du Sway greeter,
et `greetd` démarre alors la session authentifiée. Aucun code du greeter ne
lance Sway utilisateur ou Session Restore V2. `/etc/pam.d/greetd` reste intact.
## Fichiers
- `src/greetd_ipc.py` : trames JSON UTF-8 bornées à 64 KiB, socket Unix.
- `src/auth.py` : réponses PAM `secret`, `visible`, `info`, `error`, invites successives et nouvel essai.
- `src/accounts.py` : comptes NSS dans les limites de `/etc/login.defs`, avec saisie manuelle.
- `src/system_state.py` : batterie, rétroéclairage et dernier nom réussi.
- `src/avatar_icon.py` : lecture de la copie PNG AccountsService root-owned.
- `src/avatar_backend.py` : conversion bornée puis `SetIconFile` via D-Bus système.
- `src/labfy_greeter.py` : fenêtre GTK4 et mode `--preview`.
- `style/labfy-greeter.css` : palette Mocha/Lavender versionnée autonome.
- `config/labfy-sway.conf` : Sway greeter séparé, sans `include` utilisateur.
- `scripts/start-compositor` : environnement HOME/XDG greeter, préserve `GREETD_SOCK`.
- `scripts/run-ui` : ferme le compositor après GTK.
La palette provient de `quickshell/.config/quickshell/labfy-sway/theme/catppuccin.json`.
Le fond système `/etc/greetd/background/sway.png` est lu sans dépendance au HOME utilisateur.
La ligne `output *` fournit le fallback ; `eDP-1` reprend le mode et l'échelle de cette machine.
Quick Settings → Apparence → Avatar propose un sélecteur de PNG, JPEG ou WebP.
`python-pillow` convertit l'image en PNG carré de 256 px, après vérification
de la taille du fichier et du nombre de pixels. AccountsService publie ensuite
la copie système. Le greeter ne consulte que
`/var/lib/AccountsService/icons/<username>` : fichier régulier root-owned,
PNG de dimensions bornées. Une image absente ou invalide laisse l'icône
utilisateur par défaut. L'outil de réglage utilise la politique standard
`org.freedesktop.accounts.change-own-user-data` ; il n'installe ni sudoers ni
helper root. La page QuickShell se trouve sous Apparence → Avatar ; elle ne
versionne aucune image personnelle.
## Prévisualisation sans authentification
```sh
GDK_BACKEND=wayland python3 greetd/src/labfy_greeter.py --preview
```
Dans ce mode, le sélecteur est de démonstration, le champ et les actions sont
inactifs, le slider ne peut pas écrire et aucun `GREETD_SOCK` n'est requis.
La date utilise la locale système de `/etc/locale.conf`.
## Validation locale
```sh
python3 -m unittest discover -s greetd/tests -v
python3 -m py_compile greetd/src/*.py
sway --validate --config greetd/config/labfy-sway.conf
git diff --check
```
Pour prouver l'accès à la luminosité sans variation visible, un membre du
groupe `video` peut écrire la valeur courante dans `brightness` puis la relire.
Le test automatique n'écrit que dans un sysfs fictif temporaire.
## Installation
Depuis la copie source, avec les droits root :
```sh
sudo greetd/scripts/install.sh --prepare
sudo greetd/scripts/install.sh --activate-after-visual-approval
```
`--prepare` sauve byte-for-byte les fichiers existants sous
`/var/lib/labfy-greeter/backup/` et vérifie leur SHA-256 avant toute écriture
sous `/etc/greetd`. Il installe code, CSS et configuration Sway avec ownership
root, prépare state/cache en `greeter:greeter` et active `getty@tty2.service`.
L'installateur accepte la configuration tuigreet sauvegardée ou la
configuration Labfy déjà active ; toute autre configuration active est refusée.
La commande `--activate-after-visual-approval` remplace uniquement
`/etc/greetd/config.toml`. Elle ne redémarre jamais greetd.
`/etc/greetd/sway` reste présent jusqu'à la recette réelle réussie.
Avant logout, vérifier `systemctl is-active getty@tty2.service` et le chemin
de secours `Ctrl+Alt+F2` → connexion console. En cas d'échec, depuis tty2 :
```sh
sudo /usr/local/libexec/labfy-greeter/rollback --restart
```
Le rollback root-owned vérifie les hashes, remet `config.toml` initial,
recharge systemd et ne redémarre greetd que sur demande explicite
`--restart` depuis le TTY. Les sauvegardes restent disponibles après rollback.
## Première recette réelle
Après approbation visuelle et activation sur disque, effectuer le logout normal
QuickShell, contrôler l'interface et la luminosité sur VT1, puis authentifier.
Vérifier ensuite `loginctl`, `XDG_RUNTIME_DIR`, `systemd --user`, UWSM,
`quickshell-labfy-sway.service`, l'unicité QuickShell et du chooser Session
Restore V2, autotiling, Limusic et transparency helper. Aucun commit/push avant
cette recette complète.
Les boutons d'alimentation ne sont activés que si `org.freedesktop.login1.Manager`
retourne `yes` à `CanReboot` ou `CanPowerOff` dans le contexte greeter.
Une réponse `challenge`, `no` ou une erreur les désactive. Aucun privilège
supplémentaire n'est installé. Sur la machine validée, logind retourne
`challenge` : les boutons restent désactivés par la politique en place.
Le thème de login reste Mocha/Lavender en V1. La mise à l'échelle validée
concerne l'écran `eDP-1` ; `output *` fournit un fallback. Session Restore V2
reste indépendant du greeter : seul le démarrage UWSM lui transmet la session.
La recette et ses limites sont consignées dans `VALIDATION.md`.