# Chapitre 6 : L'Automagie sous le capot (Réseau et USB)

> ![Illustration des services systèmes](images/grimos_wifi_usb.png)

L'un des plus grands défis de GrimOS a été de remplacer les "démons" Linux complexes (comme *NetworkManager* pour le réseau ou *Udisks2* pour les clés USB) par du pur code Python, lisible et modifiable par l'utilisateur.

Un système d'exploitation moderne (Linux, Windows ou macOS) est peuplé de "démons" (*Daemons* en anglais, ou *Services*). Ce sont de petits programmes invisibles qui tournent en boucle en arrière-plan dès l'allumage de la machine pour gérer diverses tâches : détecter une clé USB, maintenir la connexion réseau, vérifier les mises à jour, etc.

Le problème ? L'accumulation de ces dizaines de démons consomme énormément de mémoire vive (RAM) et de temps de calcul, même lorsque vous ne faites rien.

Dans ce chapitre, nous allons voir comment GrimOS parvient à s'en passer totalement pour la gestion du Réseau (Wi-Fi) et des clés USB, en utilisant une approche "à la main", 100% Python.

## 1. La gestion du Réseau (Wi-Fi) "à la main"

Sur un Linux grand public (comme Ubuntu), le réseau est géré par **NetworkManager**, un très gros démon qui fournit une interface complexe. 

GrimOS a supprimé NetworkManager. À la place, il utilise l'outil fondamental et historique de Linux : `wpa_supplicant`. C'est le programme le plus léger possible capable de parler aux antennes Wi-Fi.

Le fichier `core/wifi.py` joue le rôle de traducteur entre l'interface de GrimOS et cet outil. 
Quand vous cliquez sur l'icône Wi-Fi dans la barre des tâches :

1. Python lance une simple ligne de commande invisible : `sudo wpa_cli scan`
2. Python lit la réponse brute en texte du système d'exploitation.
3. Python "parse" (découpe) ce texte pour extraire le nom des réseaux (SSID) et la puissance du signal.
4. L'interface affiche la liste déroulante.

**Le gain :** Aucun processus lourd ne surveille le réseau en permanence. Le scan n'a lieu que lorsque l'utilisateur le demande explicitement.

## 2. L'Auto-montage USB "Maison"

Insérer une clé USB sur un ordinateur moderne provoque une série d'actions complexes gérées par des démons comme `Udisks2` ou `gvfs`, qui montent la clé, envoient des notifications au bureau, indexent les fichiers pour la recherche, etc.

Dans GrimOS, la philosophie est brutale mais d'une efficacité redoutable. Le bureau (`core/desktop.py`) possède une petite boucle très légère qui s'exécute silencieusement toutes les quelques secondes pour vérifier l'état de la batterie et... les disques durs.

### Comment ça marche ?

1. À intervalle régulier, Python exécute la commande native Linux : `lsblk -J` (List Block Devices).
2. Cette commande très rapide renvoie la liste complète de tout ce qui est branché à la machine au format JSON.
3. Python analyse le JSON. S'il détecte un disque de type `RM` (Removable / Amovible) qui n'a pas de `mountpoint` (point de montage), cela signifie qu'une clé vient d'être insérée !
4. Automatiquement, le script lance la commande `sudo mount /dev/sdX /media/usb...` pour monter la clé de manière transparente.
5. Une icône "⏏️ USB" apparaît alors dans la barre des tâches.

Lorsque l'utilisateur a terminé, il clique sur cette icône. Python exécute simplement `sudo umount` et la clé peut être retirée en toute sécurité.

## 3. La Frugalité comme philosophie

En déléguant ces opérations critiques non pas à d'énormes services en arrière-plan, mais à de minuscules commandes textuelles Unix (comme `mount`, `lsblk`, `wpa_cli`) orchestrées par quelques dizaines de lignes de code Python, GrimOS accomplit un miracle de légèreté.

C'est ainsi que la version finale de GrimOS, avec son interface graphique, son explorateur, sa détection USB et son réseau Wi-Fi actifs, réussit à consommer **moins de 100 Mégaoctets de RAM** au repos, là où d'autres systèmes saturent des ordinateurs équipés de 4 Gigaoctets.

GrimOS ne cache rien à son utilisateur : l'OS est un chef d'orchestre, et le terminal Unix est son instrument.
