118 lines
6.1 KiB
Markdown
118 lines
6.1 KiB
Markdown
# Catalogue des applications installées — session V2
|
|
|
|
## Changement demandé
|
|
|
|
Le 27 octobre 2026, l'utilisateur a demandé de prendre en charge les applications
|
|
installées, au lieu d'ajouter une entrée à chaque erreur
|
|
`APPLICATION_UNSUPPORTED`. Le catalogue explicite reste prioritaire pour
|
|
Firefox, WhatsApp, Kitty, ChatGPT, LiMusic et Proton Pass. La découverte des autres
|
|
applications complète ces politiques ; elle ne remplace aucune identité exacte
|
|
Firefox et ne modifie aucun checkpoint existant.
|
|
|
|
## Découverte et identité
|
|
|
|
`Catalog()` utilise `Gio.AppInfo.get_all()` et les objets `DesktopAppInfo`.
|
|
GIO applique la recherche XDG, y compris les installations locales et les exports
|
|
Flatpak, ainsi que la priorité des fichiers utilisateur et les overrides
|
|
`Hidden=true`. Une entrée non affichée dans le menu (`NoDisplay` ou
|
|
`OnlyShowIn`) peut toujours produire une fenêtre : elle reste admissible.
|
|
|
|
L'entrée doit être de type `Application`, avoir un ID compatible avec le
|
|
schéma, un fichier desktop régulier lisible appartenant à root ou à l'utilisateur
|
|
sans écriture groupe/autres, et un exécutable disponible ou une activation DBus.
|
|
Le catalogue ne lance rien pendant sa construction.
|
|
|
|
La correspondance des surfaces reste exacte et sensible à la casse :
|
|
|
|
- Wayland : nom du fichier desktop sans `.desktop` en priorité, puis
|
|
`StartupWMClass`, puis nom d'exécutable non partagé.
|
|
- X11 : namespace typé `x11-class:`, `StartupWMClass` explicite prioritaire,
|
|
puis noms exacts issus de l'entrée.
|
|
- Une identité de même priorité revendiquée par plusieurs entrées est retirée
|
|
de toutes ces entrées ; aucun ordre alphabétique ne tranche une ambiguïté.
|
|
- Les namespaces des politiques explicites sont réservés dans les deux
|
|
protocoles. Une entrée générique ne peut pas contourner le provider Firefox.
|
|
- Les noms d'interpréteurs/launchers communs (`env`, `flatpak`, `java`,
|
|
`python3`, `AppRun`, etc.) ne servent pas d'identité.
|
|
|
|
Aucun titre, contenu de document, argument du processus ou URL d'onglet ne sert
|
|
au classement. Une application qui ne publie aucune de ces identités reste
|
|
refusée ; un catalogue de lanceurs n'est pas une preuve que chaque application
|
|
émet l'identifiant attendu dans toutes ses versions.
|
|
|
|
## Lancement et sauvegarde
|
|
|
|
La stratégie V2 `application-self-restore` autorise au plus une demande
|
|
d'ouverture si aucune fenêtre de l'application n'est déjà présente. Elle utilise
|
|
`/usr/bin/gio launch <fichier-desktop-installé>`, avec le chemin issu du
|
|
catalogue, après revalidation de l'identité et du contenu du fichier. Aucun
|
|
exécutable, chemin de document ou argument ne provient du snapshot.
|
|
|
|
Le moteur attend le nombre complet de fenêtres sauvegardé avant le premier
|
|
déplacement. Si une application rouvre une seule fenêtre sur les deux attendues,
|
|
la restauration est reportée avec `APPLICATION_WINDOWS_INCOMPLETE`, sans
|
|
staging, sans journal de récupération nouveau, ni seconde ouverture au retry
|
|
tant que la première fenêtre existe. La présence de toutes les fenêtres permet
|
|
ensuite la restauration de leur disposition selon le contrat existant.
|
|
|
|
Une fenêtre générique unique conserve l'identité singleton. Plusieurs fenêtres
|
|
de la même application restent interchangeables sans provider dédié : leurs
|
|
documents et commandes ne sont pas sauvegardés, et leur association individuelle
|
|
à chaque contenu n'est pas garantie. Le schéma V1 et les stratégies existantes
|
|
restent inchangés ; la nouvelle stratégie n'est acceptée qu'en V2.
|
|
|
|
Les applications `Terminal=true` sont des contenus de terminal, pas des surfaces
|
|
indépendantes. Le contrat Kitty restaure les fenêtres, pas les commandes qui y
|
|
tournaient. Les nouveaux lanceurs `firefox.webapp-*` non couverts par la politique
|
|
explicite restent `provider-required` tant que leur exclusion du provider Firefox
|
|
normal n'est pas établie.
|
|
|
|
## Inventaire de la machine le 27 octobre 2026
|
|
|
|
Lecture seule dans l'environnement de la session graphique :
|
|
|
|
| Résultat | Nombre |
|
|
| --- | ---: |
|
|
| Entrées installées vues par GIO | 103 |
|
|
| Entrées du catalogue | 95 |
|
|
| Politiques explicites | 6 |
|
|
| Entrées découvertes automatiquement | 89 |
|
|
|
|
Huit entrées sont exclues du catalogue de surfaces :
|
|
|
|
| Entrée | Motif |
|
|
| --- | --- |
|
|
| `btop.desktop` | Contenu de terminal |
|
|
| `jshell-java-openjdk.desktop` | Contenu de terminal |
|
|
| `jshell-java17-openjdk.desktop` | Contenu de terminal |
|
|
| `julia.desktop` | Contenu de terminal |
|
|
| `nvim.desktop` | Contenu de terminal |
|
|
| `yazi.desktop` | Contenu de terminal |
|
|
| `org.kde.akonadi.desktop` | Aucun Exec disponible ni activation DBus |
|
|
| `org.quickshell.desktop` | Aucun Exec disponible ni activation DBus |
|
|
|
|
Les cinq surfaces présentes au moment de cette lecture étaient classées
|
|
(Proton Pass, Kitty, ChatGPT, WhatsApp et LiMusic). Firefox et les deux terminaux
|
|
supplémentaires présents au début de l'incident n'étaient plus dans l'arbre ;
|
|
aucune application n'a été ouverte ou fermée pour cet inventaire. Le checkpoint
|
|
canonique et les trois fichiers de récupération ont conservé leurs SHA-256.
|
|
|
|
## Vérifications
|
|
|
|
`tests/session_v2/test_installed_catalog.py` couvre les correspondances exactes,
|
|
les collisions et priorités, les politiques réservées, les entrées non affichées,
|
|
la résolution XDG utilisateur/système/Flatpak dans un processus isolé, les
|
|
overrides Hidden, la lecture non bloquante des fichiers non réguliers, la
|
|
revalidation du lanceur, l'absence d'arguments issus du snapshot, la sauvegarde
|
|
multi-fenêtre et le report avant mutation lorsqu'une fenêtre manque.
|
|
|
|
Les fixtures sont des fichiers temporaires et des arbres IPC inertes. Les
|
|
lancements sont interceptés. Aucun test n'ouvre les applications de l'utilisateur.
|
|
Le catalogue explicitement injecté par les tests est hermétique et ne découvre
|
|
pas les applications de la machine.
|
|
|
|
## Références
|
|
|
|
- [Desktop Entry Specification — recognized keys](https://specifications.freedesktop.org/desktop-entry/latest/recognized-keys.html)
|
|
- [GioUnix.DesktopAppInfo](https://docs.gtk.org/gio-unix/class.DesktopAppInfo.html)
|
|
- [Gio.AppInfo.launch](https://docs.gtk.org/gio/method.AppInfo.launch.html)
|