
Boîte à outils réseau unifiée pour Linux — Python 3 + PySide6
# NMLinux · v1.7.14 [](https://github.com/thongor77/nmlinux/releases/latest) [](https://www.python.org/) [](LICENSE) [](#installation) [](#features) [](https://www.paypal.com/donate/?business=JFQGY7NU3ANCN&no_recurring=0&item_name=Every+donation%2C+no+matter+how+small%2C+helps+me+keep+this+project+alive.+Thank+you%21%0A¤cy_code=EUR) [](#support-the-project) **Une boîte à outils réseau unifiée pour Linux et macOS — inspecter, connecter, diagnostiquer.** NMLinux est une interface graphique unique et unifiée qui rassemble 29 modules réseau dans une seule fenêtre : surveillance des interfaces, Wi-Fi, DNS, terminal SSH, visualiseur de pare-feu, carte de topologie, traceroute, et plus encore. Développé de zéro en Python et PySide6 (Qt 6), avec 8 langues d'interface et aucune dépendance externe au-delà des outils système standards. > [!NOTE] > **NMLinux n'a aucun lien avec le démon système Linux `/usr/bin/NetworkManager` (NetworkManager de Red Hat/GNOME).** NMLinux est un projet autonome développé de zéro en Python et PySide6. > Développé avec [Claude Code](https://claude.ai/code) (Anthropic) et la contribution de son auteur. --- ## Processus de développement NMLinux est développé avec l'assistance de l'IA — [Claude Code](https://claude.ai/code), précisément — et cela n'est caché nulle part dans ce dépôt. Quasiment tous les projets logiciels sérieux aujourd'hui utilisent l'IA quelque part dans leur chaîne de production, qu'ils le disent ou non. Donc « l'IA a-t-elle été impliquée » n'est pas la question intéressante. La question intéressante est : y a-t-il quelque chose qui détecte quand l'IA se trompe ? Voici ce qui le fait, si vous préférez vérifier plutôt que me croire sur parole : - **162 tests** — `pytest tests/ -v`. De la logique pure plus une poignée de vrais tests de widgets Qt (menus, tableaux), sans masquer les parties intéressantes par du mocking. - **[`docs/Decisions-Techniques.md`](https://github.com/thongor77/nmlinux/blob/main/docs/Decisions-Techniques.md)** — chaque décision technique non évidente, les alternatives rejetées, et les bugs (y compris ceux introduits par l'IA) qui ont été trouvés et corrigés, avec le raisonnement consigné. - **[`docs/Architecture.md`](https://github.com/thongor77/nmlinux/blob/main/docs/Architecture.md)** et **[`docs/Carte-des-Modules.md`](https://github.com/thongor77/nmlinux/blob/main/docs/Carte-des-Modules.md)** — la structure réelle du code, maintenue en phase avec ce qui est livré. - Une **vérification de cohérence i18n** exécutée avant chaque release pour détecter les clés de traduction manquantes dans les 8 langues prises en charge. Rien de tout cela n'existe parce que l'IA ne peut pas être digne de confiance. Cela existe parce que rien ne devrait être livré sans un processus qui le vérifie — le code écrit à la main inclus. Jugez le résultat et la façon dont il est vérifié, pas l'outil qui a aidé à l'écrire. Vous avez quand même trouvé un bug ? C'est utile, pas embarrassant — [ouvrez une issue](https://github.com/thongor77/nmlinux/issues). --- ## Communauté **[Les GitHub Discussions](https://github.com/thongor77/nmlinux/discussions) sont ouvertes** — partagez vos retours, proposez des idées, posez des questions, ou dites simplement bonjour. L'auteur a plus de 30 ans d'expérience en infrastructure et en opérations, et a créé cet outil parce qu'un logiciel bon, gratuit et simple devrait aussi exister pour Linux. --- ## Captures d'écran > Captures d'écran Linux de la v1.2.7 — captures d'écran macOS de la v1.3.5. L'application compte désormais 29 modules et 8 langues d'interface (FR/EN/ES/DE/IT/PT/JA/ZH). **Linux (KDE)** | Tableau de bord | Topologie | |-----------|----------| |  |  | | Traceroute | Wi-Fi | |------------|-------| |  |  | **macOS** | Tableau de bord | Traceroute | |-----------|------------| |  |  | --- ## Journal des modifications ### v1.7.14 — 2026-09-30 - **AppImage — correction du plantage au démarrage, tentative 2** : le correctif de la v1.7.13 (suppression des bibliothèques système embarquées) n'a pas suffi — l'interpréteur Python embarqué lui-même (`libpython3.14.so.1.0`, compilé contre la glibc 2.44 de la machine de développement Arch Linux) exigeait encore des symboles glibc plus récents que ceux disponibles sur la machine de test du catalogue AppImageHub (Ubuntu 22.04, glibc 2.35), si bien que l'AppImage continuait de planter dès le lancement. `build-appimage.sh` construit désormais le bundle PyInstaller à l'intérieur d'un conteneur `ubuntu:22.04` (via `podman`) plutôt que sur l'hôte, afin que chaque binaire embarqué soit lié exactement à la version de glibc que l'AppImage doit prendre en charge. ### v1.7.13 — 2026-09-30 - **AppImage — correction du plantage au démarrage (incomplète, voir v1.7.14)** : `build-appimage.sh` embarquait des bibliothèques partagées (`libz.so.1`, `libstdc++.so.6`, `libX11.so.6`, `libfontconfig.so.1`, et d'autres) directement depuis la glibc très récente de la machine de compilation Arch Linux. Sur les distributions plus anciennes, l'AppImage plantait immédiatement au lancement (`GLIBC_ABI_DT_RELR' not found`), détecté par le test automatisé du catalogue AppImageHub. Ces bibliothèques sont désormais retirées du bundle afin que l'AppImage se rabatte sur les copies du système hôte, ce qui est l'approche standard pour les AppImages. ### v1.7.12 — 2026-08-12 - **Traceroute — correction** : sous Flatpak (v1.7.11, voir ci-dessous — désormais supprimé), `traceroute` était toujours résolu sur le `PATH` via le shim de l'hôte même lorsque l'hôte n'avait aucun véritable binaire `traceroute` installé, si bien que le worker ne se rabattait jamais sur `tracepath` et la trace se terminait instantanément sans aucun saut ni erreur affichée. Il se rabat désormais sur `tracepath` dès que `traceroute` ne produit aucune sortie exploitable, quelle que soit la *raison* de l'échec. - **Terminal SSH — correction askpass** : lorsque `DISPLAY`/`WAYLAND_DISPLAY` sont définis (toute session graphique) et que ssh ne dispose pas d'un tty propre, il peut tenter d'utiliser `$SSH_ASKPASS` pour l'invite de mot de passe au lieu du terminal embarqué — échouant silencieusement à l'authentification si aucun assistant askpass n'est installé. `SSH_ASKPASS_REQUIRE=never` force désormais les invites de mot de passe à toujours passer par le terminal lui-même. - **Packaging Flatpak supprimé** : le manifeste local KDE Linux livré en v1.7.11 est abandonné. L'investigation du bug d'invite de mot de passe SSH ci-dessus a mis en évidence une limitation au niveau du noyau : un processus relayé via `flatpak-spawn --host` ne peut jamais devenir le propriétaire du terminal de contrôle du pty transféré (`TIOCSCTTY` refusé avec `EPERM` — une autre session, sans rapport, le possède déjà ; il s'agit d'une frontière de sécurité intentionnelle du noyau, pas d'un bug). Le seul contournement fonctionnel (`script`, allouant un nouveau pty) corrige l'invite de mot de passe mais casse la propagation du redimensionnement du terminal en direct pour cette session — jugé un compromis pire que de ne pas livrer Flatpak du tout. AUR et l'AppImage sont les voies d'installation Linux prises en charge à l'avenir. ### v1.7.11 — 2026-08-03 - **Packaging Flatpak (KDE Linux)** : un manifeste de compilation local sous `packaging/flatpak/` cible KDE Linux et d'autres distributions Flatpak uniquement. Les outils CLI de l'hôte que nmlinux appelle (`nmcli`, `pkexec`, `mount.cifs`, `ssh`, `nmap`, …) sont pontés via des shims `flatpak-spawn --host` sur le `PATH` plutôt que d'être isolés individuellement ; PySide6 provient du `io.qt.PySide.BaseApp` de Flathub plutôt que du wheel PyPI. Non publié sur Flathub — un unique bundle `.flatpak` est construit avec `packaging/flatpak/build-bundle.sh` et attaché à chaque release à la place, de la même manière que l'AppImage l'est déjà. **Abandonné en v1.7.12 — voir ci-dessus.** ### v1.7.10 — 2026-08-03 - **Terminal SSH — correction** : correction d'une condition de course où le PTY pouvait démarrer avec la mauvaise taille (24×80 par défaut) si la taille réelle du widget terminal n'était pas encore connue au lancement de la session, abandonnant silencieusement la demande de redimensionnement. Cela désynchronisait les applications distantes plein écran (par ex. Claude Code CLI, htop, vim) de la taille réelle de la fenêtre, provoquant du texte obsolète/résiduel en bas de l'écran qui ne disparaissait qu'au fur et à mesure que les nouvelles sorties défilaient. Signalé par l'utilisateur ; reproduit avec une véritable session interactive ### v1.7.9 — 2026-08-02 - **Terminal SSH — copier/coller** : sélectionnez du texte à la souris (clic-glisser, surligné), copiez avec `Ctrl+Shift+C` ou le menu clic droit ; collez avec `Ctrl+Shift+V` (existant). La copie était auparavant impossible — aucune sélection de texte n'existait du tout - **Terminal SSH — sessions simultanées multiples** : la page SSH ouvre désormais chaque connexion dans son propre onglet au lieu d'une session unique partagée. Se reconnecter à une connexion enregistrée — même deux fois la même — tuait auparavant la session active sans ouvrir de remplacement fonctionnel ; désormais chaque action de connexion ouvre un nouvel onglet indépendant ### v1.7.8 — 2026-07-14 - **Test de débit — nouvel onglet LAN (iperf3)** : en plus du test de débit internet existant, un nouvel onglet exécute des tests `iperf3` en mode client uniquement contre soit une liste de serveurs publics embarquée (26 pays), soit un serveur personnalisé enregistré (par ex. un serveur interne d'organisation). Prend en charge TCP/UDP, IPv4/IPv6/auto, et la direction inverse (téléchargement), avec gigue/perte affichées pour les tests UDP. Suggéré par [l'issue #6](https://github.com/thongor77/nmlinux/issues/6) - **Nouvelle dépendance optionnelle** : `iperf3` — installez-la pour activer l'onglet LAN ; sinon l'onglet affiche une bannière et reste désactivé ### v1.7.6 — 2026-07-05 - **Inventaire des actifs — rafraîchissement par clic droit** : faites un clic droit sur une ou plusieurs lignes déjà scannées (sélection multiple prise en charge) et choisissez « Refresh selected » pour rescanner uniquement ces hôtes sur place, au lieu de relancer un scan réseau complet - **Inventaire des actifs — retour sur échec d'authentification SSH** : une connexion SSH rejetée affiche désormais « SSH auth failed » au lieu d'échouer silencieusement, sans perdre la base nom d'hôte/OS détectée par Nmap — confirmé contre un véritable NAS Synology où l'Auto Block du DSM rejetait un mot de passe correct après que d'autres jeux d'identifiants configurés eurent été essayés en premier ### v1.7.5 — 2026-07-04 - **Moniteur de ping — répertoire de cibles enregistrées** : un nouveau panneau à gauche permet d'enregistrer des cibles de ping (nom, hôte, intervalle) dans une liste persistante, afin que les hôtes surveillés survivent à un redémarrage de l'application au lieu de devoir être ressaisis. Un bouton ★ sur chaque ligne activement surveillée enregistre cet hôte dans le répertoire à tout moment de la session — pas besoin d'avoir anticipé avant que l'application ne se ferme de façon inattendue - **Moniteur de ping — « Start monitoring »** : sélectionnez une cible enregistrée et lancez sa surveillance en un clic, en réutilisant son intervalle enregistré ### v1.7.4 — 2026-07-04 - **Inventaire des actifs — correction de résultats de scan incohérents** : la vérification de présence envoyait un seul ping avec un délai d'expiration d'une seconde et sans nouvelle tentative, ce qui pouvait faire manquer un appareil réel sous la charge concurrente du scanner lui-même (jusqu'à 40 hôtes sondés simultanément) ou lorsqu'un hôte Wi-Fi était brièvement en veille entre deux balises — confirmé en direct contre un véritable sous-réseau qui renvoyait des nombres d'appareils différents lors d'exécutions répétées de la même plage. La vérification réessaie désormais le ping avant de se rabattre sur la sonde de port TCP - **Inventaire des actifs — nouveau bouton « Refresh empty »** : après un scan, rescannez uniquement les IP qui n'ont renvoyé aucune donnée au lieu de toute la plage à nouveau ; les hôtes nouvellement trouvés sont fusionnés dans les résultats existants ### v1.7.3 — 2026-07-03 - **SMB — monter les partages depuis le menu clic droit** : faites un clic droit sur un partage dans l'onglet SMB et choisissez Mount/Unmount pour le monter à un chemin local stable (`~/mnt/<host>_<share>`), utilisable depuis le terminal et toute autre application — pas une vue de navigation transitoire. Valable pour la session uniquement (pas de persistance fstab/systemd), identifiants réutilisés depuis les champs utilisateur/mot de passe existants. Linux utilise `pkexec mount -t cifs` avec un fichier d'identifiants à permissions restreintes (jamais exposé via `ps`) ; macOS utilise `mount_smbfs` directement. Réessaie automatiquement avec un dialecte SMB plus ancien (`vers=2.0`) lorsqu'un serveur rejette la négociation par défaut (fréquent avec les NAS plus anciens) — les deux tentatives se font sous une seule invite d'authentification via un processus assistant dédié - **Nouvelle dépendance optionnelle** : `cifs-utils` (Linux) pour le montage SMB ; intégré à macOS ### v1.7.2 — 2026-07-03 - **Installation macOS — correction de deux bugs d'amorçage trouvés sur un Mac vierge** : `bootstrap_macos.sh` ne force plus `NONINTERACTIVE=1` sur l'installateur Homebrew, ce qui interrompait immédiatement l'installation sur tout compte administrateur neuf au lieu de demander le mot de passe sudo ; la commande unique documentée télécharge désormais d'abord le script au lieu de le diriger directement vers `bash`, car des étapes interactives imbriquées (installateur Xcode CLT, propre invite sudo de Homebrew) pouvaient interférer avec le flux d'entrée du script externe lorsqu'il était piped - **Menu clic droit universel — SMB ajouté** : `SmbNfsPage` était la seule page cible manquante du système de clic droit inter-modules livré en v1.7.0 ; faire un clic droit sur un hôte et choisir SMB préremplit désormais le champ hôte et lance immédiatement le scan, en gras dans le menu lorsque le port 445 est détecté ouvert - **i18n — chaînes restantes du tableau de bord traduites** : le libellé de latence de la passerelle, le titre de la carte TLS Watchlist et sa ligne d'état étaient encore codés en dur en français ; désormais traduits dans les 8 langues d'interface ### v1.7.1 — 2026-07-02 - **macOS 26 (Tahoe)** — corrections du SSID Wi-Fi : passage de `system_profiler` (qui renvoie `<redacted>` sans les services de localisation) à **CoreWLAN** comme source de données principale ; l'application demande désormais l'autorisation des services de localisation au premier lancement ; la page Wi-Fi affiche tous les réseaux avec leurs vrais noms une fois l'autorisation accordée - **macOS** — Gestionnaire de connexions : le SSID connecté est désormais lu via CoreWLAN, avec `system_profiler` pour le mode de sécurité - **macOS** — SMB : message clair « authentication required » lorsque le NAS exige des identifiants ; correction d'un avertissement smb.conf parasite provenant de smbclient Homebrew - **macOS** — Correction d'un plantage potentiel à la fermeture après la première boîte de dialogue d'autorisation des services de localisation ### v1.7.0 — 2026-07-02 - **Menu contextuel clic droit universel** sur chaque tableau contenant des IP ou des noms d'hôtes — naviguez directement entre les modules sans copier-coller : faites un clic droit sur n'importe quel hôte découvert et choisissez Ping, Scan ports, Whois, DNS, Traceroute, MTR, SSH, RDP, VNC, View in Topology, ou Add to Inventory. Les éléments de menu SSH/RDP/VNC apparaissent en **gras** lorsque le port correspondant est détecté ouvert. Les libellés sont entièrement traduits dans les 8 langues d'interface. - **Pages sources** (émettent les actions de clic droit) : IP Scanner, Nmap, Ping, Port Scanner, Traceroute, MTR, Topology (clic droit sur un nœud) - **Pages cibles** (reçoivent l'hôte et préremplissent) : Whois (`set_target` + requête automatique), DNS (`set_target` préremplissage uniquement), Ping (`set_target` + démarrage automatique), Traceroute (`set_target` + démarrage automatique), MTR (`set_target` + démarrage automatique), Port Scanner (`set_target` + focus), SSH / RDP / VNC (`set_target` ouvre le formulaire de nouvelle connexion prérempli), Topology (`load_hosts` injecte les nœuds depuis un scan IP Scanner/Nmap sans rescanner — passerelle détectée automatiquement, arêtes tracées, nœud d'origine surligné en rouge), Inventaire des actifs (`prefill_hosts` lance directement le scan d'identifiants sur les hôtes découverts, saute la phase de découverte ICMP) - **Tableau de bord — graphique de ping de la passerelle** : sparkline de latence en direct mise à jour toutes les 2 secondes ; code couleur (<20 ms vert / 20–100 ms orange / >100 ms rouge / timeout rouge) - **Tableau de bord — résumé TLS Watchlist** : la carte d'état du tableau de bord reflète automatiquement l'état de la TLS Watchlist (OK / expiring / alert) sans nouvelle requête - **Tableau de bord — redimensionnement de la carte géo** : la carte du monde s'étend désormais horizontalement lorsque la fenêtre est redimensionnée ### v1.6.4 — 2026-06-28 - **macOS** : la barre de menus affiche désormais **NMLinux** au lieu de **Python** — cause racine : après `exec()` vers Python, `NSBundle.mainBundle()` se résout vers le bundle `Python.framework` (CFBundleName = "Python") que Qt lit lors de la construction de QApplication ; corrigé en patchant l'`infoDictionary()` du bundle et en renommant les éléments de menu natifs via AppKit avant la création du menu de l'application ### v1.6.3 — 2026-06-28 - **macOS** : première tentative de correction de la barre de menus en utilisant `NSProcessInfo.setProcessName_` via `pyobjc-framework-Cocoa` (remplacée par la v1.6.4) ### v1.6.2 — 2026-06-28 - **macOS** : remplacement du script de lancement bash par un stub C compilé dans `install_macos_app.sh` afin que macOS associe correctement le bundle `.app` au processus en cours d'exécution ; ajout de `setprogname` et d'une surcharge de `sys.argv[0]` comme solutions de repli ### v1.6.1 — 2026-06-25 - **Terminal SSH — correction de l'écho distant** : les frappes saisies dans le terminal SSH embarqué étaient envoyées au shell distant mais jamais renvoyées en écho (le clavier semblait « mort » après la connexion). nmlinux forçait la désactivation de l'écho du PTY local, et ssh propageait ce « no echo » au pty distant via ses modes de terminal (pty-req), si bien que le shell distant cessait de renvoyer l'écho des entrées. Reproduit sur une VM Ubuntu 26.04 neuve (les OpenSSH récents appliquent fidèlement ces modes). Le terminal maintient désormais le PTY en mode normal et laisse ssh gérer l'écho, comme les vrais émulateurs de terminal. ### v1.6.0 — 2026-06-24 - **Inventaire des actifs — WinRM Windows (complet)** : détection des hôtes via sonde de port TCP lorsque l'ICMP est bloqué par le pare-feu Windows ; PowerShell utilise désormais le chemin absolu complet + **EncodedCommand (base64)** pour empêcher cmd.exe d'interpréter les pipes `|` ; chaîne de repli complète sans droits admin : OS via `ver`, CPU via le registre, RAM via `systeminfo`, disque via `wmic` → `fsutil` (sensible à la locale : virgule EN / espace FR) → `dir /-C` - **Inventaire des actifs — SSH multi-identifiants** : plusieurs jeux d'identifiants SSH pris en charge ; disque macOS corrigé (`/System/Volumes/Data`), repli CPU Apple Silicon (`hw.model`), Synology (`/volume1`), Unraid (`/mnt/user`) - **Corrections de bugs** : les erreurs WinRM sont désormais affichées dans le tableau au lieu d'un repli silencieux ; la détection d'hôtes WinRM/SNMP n'est plus bloquée par la présence d'identifiants SSH ; délai d'expiration pywinrm corrigé ### v1.5.3 — 2026-06-24 - **macOS .app — détection des outils Homebrew** : `sshpass`, `nmap` et `snmpget` installés via Homebrew sont désormais trouvés et appelés en utilisant leur chemin absolu ; les bundles `.app` sur macOS n'héritent pas du PATH Homebrew (`/opt/homebrew/bin`, `/usr/local/bin`), si bien que les outils précédemment installés étaient silencieusement ignorés - **Chemin de mise à jour macOS** : exécuter `git pull && bash packaging/install_macos_app.sh` depuis la racine du dépôt est désormais la méthode de mise à niveau documentée ; le script gère son propre venv (`~/.local/share/nmlinux/venv`) et ne nécessite aucun `pip` ou `pipx` au niveau système ### v1.5.2 — 2026-06-24 - **Inventaire des actifs** — nouveau module (29e) ; scanne une plage CIDR et collecte l'OS, le CPU, la RAM, le disque et l'uptime de chaque hôte via SSH, WinRM, SNMP ou Nmap ; prend en charge plusieurs jeux d'identifiants par protocole (essaie chacun dans l'ordre) ; politique de rétention zéro : les identifiants ne sont jamais écrits sur disque, effacés de la mémoire après le scan ; exportez les résultats en JSON, CSV ou Markdown ; carte géo animée ajoutée à la section IP Geolocation du tableau de bord - **Corrections de la collecte SSH** : erreur de quoting awk dans la commande disque corrigée ; `free -h` remplacé par `free` compatible BusyBox ; le chemin de code macOS utilise désormais `sw_vers` pour le nom de l'OS, un repli `hw.model` pour le CPU Apple Silicon, `/System/Volumes/Data` pour le volume de données utilisateur APFS ; volumes Synology/Unraid (`/volume1`, `/mnt/user`) détectés avant la racine ; motif de faux succès `df | tail -1 || …` corrigé avec des gardes `test -d` ; sortie de `lsb_release` débarrassée des guillemets environnants ; plusieurs jeux d'identifiants SSH/WinRM pris en charge (essaie chacun dans l'ordre par hôte) ### v1.5.0 — 2026-06-17 - **Serveur de transfert de fichiers** — nouveau module pour démarrer/arrêter un serveur TFTP ou HTTP léger directement depuis l'application ; cas d'usage classique : sauvegarde et restauration de configurations de routeur, switch ou imprimante ; un seul serveur actif à la fois (TFTP ou HTTP), port et répertoire racine configurables, IP locales affichées sous forme de boutons copier-dans-le-presse-papiers ; HTTP inclut le listing de répertoire (navigation depuis n'importe quel navigateur du LAN), GET (téléchargement) et POST/PUT (envoi) ; TFTP prend en charge GET et PUT (bidirectionnel), le port 69 nécessite root — l'application affiche un bouton « Start as root (pkexec) » en cas d'erreur de permission ; tableau de journal des transferts en direct (horodatage, nom de fichier, IP client, direction ↑/↓, taille) ; protection contre la traversée de port ; 8 langues d'interface ; nouvelle dépendance : `tftpy` ### v1.4.3 — 2026-06-14- **Correctifs de la liste de surveillance TLS** : les certificats auto-signés et non approuvés sont désormais correctement affichés comme « ⚠ Invalid / untrusted cert » (orange) au lieu de vert ; la capture des exceptions SSL a été élargie pour couvrir toutes les sous-classes de `ssl.SSLError` ; les entrées affichent désormais « … (checking) » pendant l'exécution de la vérification en arrière-plan et « — (unreachable) » lorsque l'hôte est injoignable ### v1.4.2 — 2026-06-14 - **TLS Watchlist** — liste persistante de noms d'hôtes à surveiller pour l'expiration des certificats ; ajoutez des hôtes avec `+ Watch` (utilise l'hôte/port actuel) ou manuellement dans le panneau ; la vérification en arrière-plan s'exécute automatiquement 2 secondes après le lancement ; l'entrée « TLS Inspector » de la barre latérale affiche un point coloré : rouge si un certificat est expiré, orange si un certificat expire dans les 30 jours ; bouton de revérification dans le panneau ; la liste affiche le statut par entrée (✓ / ⚠ / EXPIRED) avec un code couleur ### v1.4.1 — 2026-06-14 - **macOS — IP Scanner** : correction de la recherche d'adresse MAC, de fournisseur et d'interface sur macOS ; `_arp_entry()` appelle désormais `arp -n <ip>` sur macOS et analyse son format de sortie (`? (IP) at AA:BB:CC on en0`) au lieu de lire `/proc/net/arp` (Linux uniquement) ; les quatre colonnes du scanner sont désormais correctement remplies sur macOS - **Aide VNC** : ajout d'une note dans les 8 langues précisant que Linux n'a pas de serveur VNC par défaut et listant les options courantes à installer (x11vnc, tigervnc-server, wayvnc) ### v1.4.0 — 2026-06-14 - **macOS — IP Scanner** : remplacement de `getent` (Linux uniquement) par `socket.gethostbyaddr()` de Python pour une résolution DNS inverse multiplateforme ; la recherche de nom d'hôte fonctionne désormais nativement sur macOS sans outil supplémentaire - **macOS — SMB Browser** : passage de `smbclient` (nécessite samba via Homebrew) à `smbutil view` (outil intégré à macOS) ; le listage des partages SMB fonctionne désormais sur macOS sans aucune installation - **macOS — NFS Browser** : `showmount` est intégré à macOS mais ne prend pas en charge `--no-headers` ; option supprimée sur macOS, ligne d'en-tête ignorée dans l'analyseur ; le listage des exports NFS fonctionne désormais nativement - **macOS — RDP** : lorsque `xfreerdp` est introuvable, bascule vers le schéma d'URL `open rdp://` ; ouvre Microsoft Remote Desktop (App Store) s'il est installé, avec l'hôte, le port, le nom d'utilisateur et le domaine pré-remplis - **macOS — VNC** : lorsque `vncviewer` est introuvable, bascule vers le schéma d'URL `open vnc://` ; ouvre le partage d'écran macOS (intégré, aucune installation requise) ### v1.3.9 — 2026-06-13 - **Transfert d'agent SSH** — nouvelle case à cocher « Agent forwarding » dans le formulaire de connexion SSH ; ajoute `-A` à la commande `ssh` ; permet de rebondir entre serveurs sans copier votre clé privée (PC → A → B) ; nécessite un agent SSH actif (`SSH_AUTH_SOCK`) ; aide contextuelle mise à jour dans les 8 langues ### v1.3.8 — 2026-06-13 - **Palette de commandes (Ctrl+P)** — navigation clavier instantanée vers l'un des 27 modules ; recherche floue sur le nom et les mots-clés (par ex. « firewall », « tls », « ssh key », « scan ») ; flèches Haut/Bas + Entrée ou un simple clic pour naviguer ; s'ouvre avec Ctrl+P depuis n'importe où dans l'application - **Export Manager** — exportez un instantané réseau complet (interfaces, routes, résolveurs DNS) depuis Fichier → Export Network Report… en JSON, Markdown, texte brut ou PDF (optionnel : `pip install reportlab`) - **Boutons d'export au niveau des modules** — boutons Export ajoutés aux pages Interfaces, DNS, Firewall, SSH Connections et Connection Manager ; chaque page exporte ses données actuelles dans le format choisi avec mise à jour en direct de l'extension du nom de fichier lorsque le filtre de format change ### v1.3.6 — 2026-06-12 - **Topologie — icônes d'appareils** — chaque nœud affiche désormais une icône SVG Lucide correspondant à son type d'appareil (routeur/wifi, ordinateur/portable, imprimante, NAS/serveur, smartphone, commutateur réseau, Raspberry Pi) au lieu d'un cercle générique ; 5 nouvelles icônes SVG intégrées (`printer`, `server`, `smartphone`, `cpu`, `laptop`) - **Topologie — détection mDNS** — le type d'appareil est détecté via `avahi-browse` (optionnel, s'exécute en parallèle du scan nmap) ; identifie les imprimantes (`_ipp._tcp`, `PDL Printer`), les téléphones et TV Android (`_googlecast._tcp`, `_androidtvremote2._tcp`), les Mac Apple (modèle `am=Mac16,x` dans le TXT AirPlay), les NAS (Synology rapporte `model=Xserve`), les postes KDE Connect ; bascule vers les heuristiques OUI du fournisseur MAC et du nom d'hôte lorsque avahi est indisponible - **Topologie — panneau de détails** affiche la classe d'appareil détectée (Printer, Smartphone, NAS…) au lieu du libellé générique « Host » ; i18n dans les 8 langues - **Traceroute — zoom automatique** — la carte mondiale zoome et se centre automatiquement sur la boîte englobante des sauts géolocalisés à la fin de chaque route ; se désactive lorsque l'utilisateur effectue un panoramique ou un zoom manuel ; se rétablit au prochain traceroute ; un clic droit réinitialise à la vue mondiale complète ### v1.3.5 — 2026-06-06 - **Compatibilité macOS** — les 9 modules réseau fonctionnent désormais sur macOS sans casser le comportement Linux ; chaque module détecte la plateforme au démarrage (`_IS_MACOS`) et bifurque vers les commandes natives macOS : `route -n get default`, `ifconfig`, `scutil --dns`, `networksetup`, `system_profiler SPAirPortDataType`, `pfctl`, `netstat -ib` ; l'élévation de privilèges utilise `osascript` + `with administrator privileges` au lieu de `pkexec` ; la police monospace utilise `Menlo` au lieu de `Monospace` - **Modules avec chemins Linux/macOS doubles** : Dashboard, Interfaces, Wi-Fi, Topology, Bandwidth, Firewall (pf.conf + pfctl), Connection Manager, Hosts File, MTR - **Modules inchangés** (outils identiques sur les deux plateformes) : DNS, Nmap Scan, SNMP, Whois ### v1.3.2 — 2026-06-06 - **i18n étendu à 8 langues** — ajout de l'Italiano, du Português, du 日本語 (japonais) et du 中文 (chinois simplifié) ; l'interface complète (les 27 modules, ~720 clés de traduction) est désormais disponible en FR / EN / ES / DE / IT / PT / JA / ZH ; une invite de redémarrage apparaît après avoir changé la langue dans les Paramètres - **Aide contextuelle dans 8 langues** — le panneau du badge `?` (description, exemples d'utilisation et commandes CLI équivalentes) couvre désormais les 8 langues pour chaque module ; auparavant JA et ZH basculaient vers l'anglais - **Correction de bug** — les infobulles de navigation pour SMB/NFS et Hosts File s'affichaient en français quelle que soit la langue sélectionnée ; les clés manquantes `nav_hint_smb_nfs` et `nav_hint_hosts` ont été ajoutées à tous les 7 blocs de langue non français ### v1.3.1 — 2026-06-05 - **SSH Key Manager** — liste toutes les paires de clés dans `~/.ssh/` (fichier, type, bits, commentaire, empreinte SHA256) ; génère des clés Ed25519 ou RSA 4096 avec phrase secrète optionnelle (détection de non-concordance, nom de fichier automatique par type) ; copie la clé publique dans le presse-papiers ; déploie vers un serveur distant via `ssh-copy-id` dans un terminal en ligne avec prise en charge de stdin pour les invites de mot de passe ; supprime les paires de clés avec confirmation ; crée automatiquement `~/.ssh/` s'il est absent ; i18n : fr / en / es / de ### v1.3.0 — 2026-06-03 --- [Read more](https://github.com/thongor77/nmlinux)