Retour aux mises à jour
New releaseAug 3, 2026

nmlinux v1.7.11

Boîte à outils réseau unifiée pour Linux — Python 3 + PySide6

Partager

NMLinux · v1.7.11

Version Python License: GPL-2.0 Platform Languages Donate Bitcoin

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 réunit 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 standard.

[!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 (Anthropic) et la contribution de son auteur.


Processus de développement

NMLinux est développé avec l'aide de l'IA — Claude Code, plus précisément — et cela n'est caché nulle part dans ce dépôt. Presque tous les projets logiciels sérieux utilisent aujourd'hui l'IA quelque part dans leur pipeline, qu'ils l'avouent ou non. La question « l'IA a-t-elle été utilisée ? » n'est donc pas la question intéressante. La question intéressante est : qu'est-ce qui détecte les erreurs de l'IA ?

Voici ce qui s'en charge, si vous préférez vérifier plutôt que de me croire sur parole :

  • 162 testspytest tests/ -v. Logique pure plus une poignée de véritables tests de widgets Qt (menus, tableaux), sans simuler les parties intéressantes.
  • docs/Decisions-Techniques.md — chaque décision technique non évidente, les alternatives rejetées, et les bugs (y compris ceux introduits par l'IA) découverts et corrigés, avec le raisonnement consigné par écrit.
  • docs/Architecture.md et docs/Carte-des-Modules.md — la structure réelle du code, maintenue en phase avec ce qui est livré.
  • Un contrôle de cohérence i18n exécuté avant chaque version 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 serait indigne de confiance. Cela existe parce que rien ne devrait être livré sans un processus de vérification — 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 gênant — ouvrez un ticket.


Communauté

GitHub Discussions est ouvert — 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 exploitation, et a créé cet outil parce qu'un bon logiciel 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 bordTopologie
Tableau de bordTopologie
TracerouteWi-Fi
TracerouteWi-Fi

macOS

Tableau de bordTraceroute
Tableau de bord macOSTraceroute macOS

Journal des modifications

v1.7.11 — 2026-08-03

  • Packaging Flatpak (KDE Linux) : un manifeste de construction local sous packaging/flatpak/ cible KDE Linux et les autres distributions uniquement Flatpak. Les outils CLI hôtes que nmlinux invoque (nmcli, pkexec, mount.cifs, ssh, nmap, …) sont pontés via des shims flatpak-spawn --host sur PATH plutôt que d'être sandboxés individuellement ; PySide6 provient du io.qt.PySide.BaseApp de Flathub plutôt que de la wheel PyPI. Non publié sur Flathub — un unique bundle .flatpak est construit avec packaging/flatpak/build-bundle.sh et attaché à chaque version à la place, de la même manière que l'AppImage l'est déjà

v1.7.10 — 2026-08-03

  • Terminal SSH — correction : correction d'une condition de course où le PTY pouvait démarrer à la mauvaise taille (24×80 par défaut) si la taille réelle du widget de terminal n'était pas encore connue au lancement de la session, abandonnant silencieusement la demande de redimensionnement. Cela désynchronisait les applications plein écran distantes (par ex. Claude Code CLI, htop, vim) de la taille réelle de la fenêtre, laissant un texte obsolète/résiduel en bas de l'écran qui ne disparaissait qu'au fil du défilement de nouvelles sorties. Signalé par l'utilisateur ; reproduit avec une session interactive réelle

v1.7.9 — 2026-08-02

  • Terminal SSH — copier/coller : sélectionnez le texte à la souris (clic-glisser, surligné), copiez avec Ctrl+Shift+C ou le menu contextuel ; collez avec Ctrl+Shift+V (existant). La copie était auparavant impossible — aucune sélection de texte n'existait du tout
  • Terminal SSH — plusieurs sessions simultanées : la page SSH ouvre désormais chaque connexion dans son propre onglet au lieu d'une session partagée unique. Se reconnecter à une connexion enregistrée — même deux fois à la même — tuait auparavant la session active sans ouvrir de remplaçant 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 côté client uniquement contre une liste de serveurs publics intégrée (26 pays) ou un serveur personnalisé enregistré (par ex. un serveur interne d'organisation). Prend en charge TCP/UDP, IPv4/IPv6/auto, et le sens inverse (téléchargement), avec gigue/pertes affichées pour les tests UDP. Suggéré par issue #6
  • Nouvelle dépendance optionnelle : iperf3 — installez-la pour activer l'onglet LAN ; l'onglet affiche une bannière et reste désactivé sinon

v1.7.6 — 2026-07-05

  • Inventaire d'actifs — actualisation au clic droit : faites un clic droit sur une ou plusieurs lignes déjà scannées (sélection multiple prise en charge) et choisissez « Actualiser la sélection » pour rescanner uniquement ces hôtes sur place, au lieu de relancer un scan réseau complet
  • Inventaire d'actifs — retour en cas d'échec d'authentification SSH : une connexion SSH rejetée affiche désormais « Échec de l'authentification SSH » au lieu d'échouer silencieusement, sans perdre le nom d'hôte/système d'exploitation de référence détecté par Nmap — confirmé contre un vrai NAS Synology où l'Auto Block de DSM rejetait un mot de passe correct après que d'autres ensembles d'identifiants configurés avaient été essayés en premier

v1.7.5 — 2026-07-04

  • Moniteur Ping — répertoire de cibles enregistrées : un nouveau panneau latéral gauche permet d'enregistrer des cibles 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 — inutile d'avoir prévu le coup avant que l'application ne se ferme de manière inattendue
  • Moniteur Ping — « Démarrer la surveillance » : sélectionnez une cible enregistrée et commencez à la surveiller en un clic, en réutilisant son intervalle enregistré

v1.7.4 — 2026-07-04

  • Inventaire d'actifs — correction des résultats de scan incohérents : la vérification de vivacité envoyait un seul ping avec un délai d'expiration d'une seconde et sans nouvelle tentative, ce qui pouvait omettre un appareil réel sous la charge concurrente du scanner lui-même (jusqu'à 40 hôtes sondés à la fois) ou lorsqu'un hôte Wi-Fi s'endormait brièvement entre deux balises — confirmé en conditions réelles contre un vrai sous-réseau qui renvoyait des comptes d'appareils différents entre des 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 d'actifs — nouveau bouton « Actualiser les vides » : après un scan, rescanner uniquement les adresses 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 des partages depuis le menu contextuel : faites un clic droit sur un partage dans l'onglet SMB et choisissez Monter/Démonter pour le monter sur un chemin local stable (~/mnt/<host>_<share>), utilisable depuis le terminal et toute autre application — pas une simple vue de parcours temporaire. Session uniquement (aucune 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 aux permissions restreintes (jamais exposé via ps) ; macOS utilise mount_smbfs directement. Nouvelle tentative automatique avec un dialecte SMB plus ancien (vers=2.0) lorsqu'un serveur rejette la négociation par défaut (courant avec les anciens NAS) — les deux tentatives se font sous une seule invite d'authentification via un processus d'assistance 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 avortait immédiatement sur tout compte administrateur fraîchement créé au lieu de demander le mot de passe sudo ; la ligne de commande documentée télécharge désormais d'abord le script au lieu de le diriger directement vers bash, car les étapes interactives imbriquées (installateur Xcode CLT, invite sudo propre à Homebrew) pouvaient interférer avec le flux d'entrée du script externe lorsqu'il était dirigé via un pipe
  • Menu contextuel universel — SMB ajouté : SmbNfsPage était la seule page cible manquante du système de clic droit inter-modules livré en v1.7.0 ; un clic droit sur un hôte et le choix 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 — dernières chaînes du Tableau de bord traduites : l'étiquette 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 des 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 « authentification requise » lorsque le NAS exige des identifiants ; correction d'un avertissement smb.conf parasite de smbclient Homebrew
  • macOS — Correction d'un crash 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 universel sur chaque tableau contenant des adresses IP ou des noms d'hôtes — naviguez directement entre les modules sans copier-coller : faites un clic droit sur tout hôte découvert et choisissez Ping, Scan des ports, Whois, DNS, Traceroute, MTR, SSH, RDP, VNC, Voir dans la topologie, ou Ajouter à l'inventaire. 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 du clic droit) : IP Scanner, Nmap, Ping, Port Scanner, Traceroute, MTR, Topologie (clic droit sur un nœud)
  • Pages cibles (reçoivent l'hôte et se 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), Topologie (load_hosts injecte les nœuds du scan IP Scanner/Nmap sans rescanner — passerelle détectée automatiquement, arêtes dessinées, nœud d'origine surligné en rouge), Inventaire d'actifs (prefill_hosts démarre le scan d'identifiants directement 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 actualisée toutes les 2 secondes ; code couleur (<20 ms vert / 20–100 ms orange / >100 ms rouge / délai dépassé 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 / expiration / alerte) 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() dans Python, NSBundle.mainBundle() se résout vers le bundle Python.framework (CFBundleName = "Python") que Qt lit pendant la construction de QApplication ; corrigé en patchant infoDictionary() du bundle et en renommant les éléments de menu natifs via AppKit avant que le menu de l'application soit créé

v1.6.3 — 2026-06-28

  • macOS : première tentative de correction de la barre de menus à l'aide de NSProcessInfo.setProcessName_ via pyobjc-framework-Cocoa (remplacée par 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 ; ajout de setprogname et de la 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 intégré étaient envoyées au shell distant mais jamais renvoyées en écho (le clavier semblait « mort » après la connexion). nmlinux forçait l'écho local du PTY à être désactivé, et ssh propageait ce « pas d'écho » au pty distant via ses modes de terminal (pty-req), si bien que le shell distant cessait de renvoyer l'écho des saisies. Reproduit sur une VM Ubuntu 26.04 fraîche (les OpenSSH récents appliquent ces modes fidèlement). 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 d'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 tubes | ; chaîne de repli complète sans droits administrateur : OS via ver, CPU via le registre, RAM via systeminfo, disque via wmicfsutil (sensible à la locale : virgule EN / espace FR) → dir /-C
  • Inventaire d'actifs — SSH multi-identifiants : plusieurs ensembles 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 des 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 avec leur chemin absolu ; les bundles .app sur macOS n'héritent pas du PATH de Homebrew (/opt/homebrew/bin, /usr/local/bin), donc 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 d'actifs — nouveau module (29e) ; scanne une plage CIDR et collecte l'OS, le CPU, la RAM, le disque et la durée de fonctionnement de chaque hôte via SSH, WinRM, SNMP ou Nmap ; prend en charge plusieurs ensembles d'identifiants par protocole (les essaie chacun dans l'ordre) ; politique de rétention zéro : les identifiants ne sont jamais écrits sur le disque, effacés de la mémoire après le scan ; export des résultats en JSON, CSV ou Markdown ; carte géo animée ajoutée à la section Géolocalisation IP du Tableau de bord
  • Corrections de la collecte SSH : erreur de guillemets 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, hw.model en repli 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 ensembles d'identifiants SSH/WinRM pris en charge (les 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 des configurations de routeurs, commutateurs ou imprimantes ; un seul serveur actif à la fois (TFTP ou HTTP), port et répertoire racine configurables, adresses IP locales affichées comme boutons de copie dans le presse-papiers ; HTTP inclut le listage des répertoires (parcourable 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 requiert root — l'application affiche un bouton « Démarrer en root (pkexec) » en cas d'erreur de permission ; table de journal des transferts en direct (horodatage, nom de fichier, IP cliente, direction ↑/↓, taille) ; protection contre la traversée de ports ; 8 langues d'interface ; nouvelle dépendance : tftpy

v1.4.3 — 2026-06-14

  • Corrections TLS Watchlist : les certificats auto-signés et non fiables sont désormais correctement affichés comme « ⚠ Certificat invalide / non fiable » (orange) au lieu de vert ; capture des exceptions SSL élargie pour couvrir toutes les sous-classes de ssl.SSLError ; les entrées affichent désormais « … (vérification en cours) » pendant que la vérification en arrière-plan s'exécute et « — (injoignable) » lorsque l'hôte ne peut pas être atteint

v1.4.2 — 2026-06-14

  • TLS Watchlist — liste persistante de noms d'hôtes pour surveiller l'expiration des certificats ; ajoutez des hôtes avec + Watch (utilise l'hôte/le port courant) 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 re-vérification dans le panneau ; la liste affiche le statut de chaque entrée (✓ / ⚠ / EXPIRÉ) avec code couleur

v1.4.1 — 2026-06-14

  • macOS — IP Scanner : correction de la recherche d'adresse MAC, du fabricant et de l'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 se remplissent désormais correctement 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 la résolution DNS inverse multiplateforme ; la recherche de nom d'hôte fonctionne désormais nativement sur macOS sans outil supplémentaire
  • macOS — Navigateur SMB : passage de smbclient (nécessite samba via Homebrew) à smbutil view (outil macOS intégré) ; le listage des partages SMB fonctionne désormais sur macOS sans aucune installation
  • macOS — Navigateur NFS : showmount est intégré à macOS mais ne prend pas en charge --no-headers ; option retiré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 n'est pas trouvé, repli sur le schéma d'URL open rdp:// ; ouvre Microsoft Remote Desktop (App Store) s'il est installé, avec hôte, port, nom d'utilisateur et domaine préremplis
  • macOS — VNC : lorsque vncviewer n'est pas trouvé, repli sur le schéma d'URL open vnc:// ; ouvre le Partage d'écran macOS (intégré, zéro installation requise)

v1.3.9 — 2026-06-13

  • Transfert d'agent SSH — nouvelle case à cocher « Transfert d'agent » dans le formulaire de connexion SSH ; ajoute -A à la commande ssh ; permet de sauter 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 instantanée au clavier vers n'importe lequel des 27 modules ; recherche floue sur le nom et les mots-clés (par exemple « firewall », « tls », « ssh key », « scan ») ; flèches Haut/Bas + Entrée ou clic simple pour naviguer ; s'ouvre avec Ctrl+P depuis n'importe où dans l'application

  • Gestionnaire d'exportation — exportez un instantané réseau complet (interfaces, routes, résolveurs DNS) depuis Fichier → Exporter le rapport réseau… en JSON, Markdown, texte brut ou PDF (facultatif : pip install reportlab)
  • Boutons d'exportation au niveau des modules — des boutons Exporter ont été ajoutés aux pages Interfaces, DNS, Pare-feu, Connexions SSH et Gestionnaire de connexions ; chaque page exporte ses données actuelles dans le format choisi avec mise à jour en direct de l'extension de 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 fournies (printer, server, smartphone, cpu, laptop)
  • Topologie — détection mDNS — le type d'appareil est détecté via avahi-browse (facultatif, s'exécute en parallèle avec le scan nmap) ; identifie les imprimantes (_ipp._tcp, PDL Printer), les téléphones et téléviseurs Android (_googlecast._tcp, _androidtvremote2._tcp), les Mac Apple (modèle am=Mac16,x dans le TXT AirPlay), les périphériques NAS (Synology signale model=Xserve), les bureaux KDE Connect ; en cas d'indisponibilité d'avahi, repli sur l'OUI du fournisseur MAC et des heuristiques de nom d'hôte
  • Topologie — panneau de détail affiche la classe d'appareil détectée (Imprimante, Smartphone, NAS…) au lieu de l'étiquette générique « Host » ; i18n dans les 8 langues
  • Traceroute — zoom automatique — la carte du monde zoome et se centre automatiquement sur la boîte englobante des sauts géolocalisés à la fin de chaque itinéraire ; 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 utilise les commandes macOS natives : 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 double prise en charge Linux/macOS : Tableau de bord, Interfaces, Wi-Fi, Topologie, Bande passante, Pare-feu (pf.conf + pfctl), Gestionnaire de connexions, Fichier hosts, MTR
  • Modules inchangés (outils identiques sur les deux plateformes) : DNS, Nmap Scan, SNMP, Whois

v1.3.2 — 2026-06-06

  • i18n étendue à 8 langues — ajout de l'italien, du portugais, 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 Paramètres
  • Aide contextuelle en 8 langues — le panneau à badge ? (description, exemples d'utilisation et commandes CLI équivalentes) couvre désormais les 8 langues pour chaque module ; auparavant, JA et ZH retombaient en anglais
  • Correction de bug — les info-bulles de navigation pour SMB/NFS et Fichier hosts 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 aux 7 blocs de langues non françaises

v1.3.1 — 2026-06-05

  • Gestionnaire de clés SSH — 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 de passe facultative (détection d'incohérence, nom de fichier automatique selon le type) ; copie la clé publique dans le presse-papiers ; déploie vers un serveur distant via ssh-copy-id dans un terminal intégré 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

  • Inspecteur TLS / SSL — inspecte le certificat de n'importe quel serveur : sujet CN, SAN, émetteur, dates de validité (code couleur : vert / orange < 30 jours / rouge expiré), numéro de série, protocole TLS, suite de chiffrement et chaîne de certificats (via openssl s_client) ; fonctionne pour les certificats valides, expirés et auto-signés ; messages d'erreur conviviaux pour les hôtes inaccessibles
  • Navigateur SMB / NFS — liste les partages et exports de n'importe quel serveur ; onglet SMB : smbclient -L avec identifiants facultatifs, affiche nom / type / commentaire du partage ; onglet NFS : showmount -e, affiche le chemin d'export et la liste d'accès ; détecte les outils manquants avec des instructions d'installation spécifiques à la distribution
  • Éditeur de fichier hosts — visualise et modifie /etc/hosts ; tableau avec bascule activer/désactiver, ajouter/modifier/supprimer des entrées via une boîte de dialogue ; filtre par IP ou nom d'hôte ; enregistre via pkexec cp (dialogue d'authentification polkit)
  • install.sh — nouveau script pour Debian / Ubuntu / Linux Mint : crée un venv dans ~/.local/share/nmlinux/venv, installe les dépendances système via apt, crée un lanceur et une entrée .desktop (corrige l'erreur PEP 668 externally-managed-environment)

v1.2.9 — 2026-05-30

  • VNC — nouveau module de gestion des profils de connexion VNC ; groupes/sous-groupes comme SSH et RDP ; lance vncviewer (TigerVNC) ; compatible avec ARD macOS (authentification DH30 gérée nativement par vncviewer) ; mot de passe jamais stocké ; détecte l'absence de vncviewer avec des instructions d'installation spécifiques à la distribution
  • À propos — Outils et services — nouvelle section listant tous les outils tiers et API dont l'application dépend
  • i18n de la barre latérale — les 23 info-bulles de navigation sont désormais traduites en FR/EN/ES/DE (étaient codées en dur en français) ; libellés corrigés : Topologie, Connexions, Sous-réseau

v1.2.8 — 2026-05-30

  • Bureau à distance (RDP) — nouveau module de gestion des profils de connexion RDP Windows ; groupes/sous-groupes comme SSH ; lance xfreerdp en tant que processus externe ; mot de passe demandé à la connexion, jamais stocké ; champs : hôte, port, nom d'utilisateur, domaine, résolution, plein écran ; détecte l'absence de xfreerdp avec des instructions d'installation spécifiques à la distribution (Arch / Debian / Fedora)

v1.2.7 — 2026-05-26

  • Icônes Lucide fournies — 21 icônes SVG de Lucide (MIT) sont désormais incluses dans assets/icons/ ; rendues à l'exécution via QSvgRenderer ; colorées #60a5fa ; l'application ne nécessite plus aucun thème d'icônes système (Breeze, Adwaita, Papirus…)

v1.2.6 — 2026-05-24

  • Compatibilité GNOME / Adwaita — correction des icônes sur les bureaux non-KDE : main.py détecte désormais automatiquement le thème d'icônes GTK via gsettings et l'applique à Qt ; chaînes de repli étendues pour Wi-Fi, Traceroute, Test de vitesse, Interfaces, Scanner de ports, Pare-feu, MTR ; themed_icon() valide désormais qu'un vrai pixmap existe avant d'accepter une icône de thème
  • Compatibilité NixOS / KDE — correction de toutes les icônes sous NixOS : Breeze 6.x fournit des icônes SVGZ uniquement ; le wrapper Nix ajoute désormais qt6.qtsvg à QT_PLUGIN_PATH pour que Qt puisse rendre les icônes SVG ; themed_icon() essaie les tailles 22/24/16/32/48 (Breeze utilise 22 px, pas 24) ; le thème est forcé à breeze lorsque le jeu d'icônes Nix est détecté ; vérifie également /etc/xdg/kdeglobals pour la configuration KDE à l'échelle du système

v1.2.5 — 2026-05-23

  • MTR — My Traceroute intégré : exécute mtr --report, analyse la sortie texte, affiche un tableau en direct avec % de perte, RTT Dernier/Moy/Meilleur/Pire/Gigue par saut, code couleur selon la gravité des pertes ; mode continu ; export CSV + TXT
  • Test de vitesse — test de vitesse sans dépendance via curl + Cloudflare (speed.cloudflare.com) : téléchargement (25 Mo), téléversement (10 Mo), ping vers 1.1.1.1 ; jusqu'à 5 exécutions conservées en JSON ; graphique historique en courbes (Téléchargement/Téléversement)
  • Visionneuse de pare-feu — visionneuse de règles en lecture seule : analyse /etc/nftables.conf et /etc/iptables/*.rules sans root ; règles en direct via pkexec nft list ruleset ; colonnes : Table / Chaîne / Règle / Port / Action / Commentaire ; actions codées par couleur ; filtre en direct
  • Indications de la barre latérale — chaque entrée de navigation affiche désormais un badge ? discret ; le survol affiche une info-bulle décrivant ce que fait le module ; séparateur vertical ajouté entre la barre latérale et la zone de contenu
  • i18n — tous les nouveaux modules traduits en français, anglais et espagnol

v1.2.0 — 2026-05-22

  • Adaptation de thème — prise en charge complète du basculement clair/sombre à l'exécution sur toutes les pages ; nouveau core/theme.py avec is_dark(), color_ok(), color_err() ; les widgets de dessin personnalisés (_Graph, _MapWidget) lisent la palette au moment du dessin ; toutes les couleurs Catppuccin Mocha codées en dur sont remplacées par des rôles de palette Qt sémantiques
  • Masque de sous-réseau — les pages Dashboard, Interfaces et Connexions affichent désormais le masque de sous-réseau en notation décimale pointée (par exemple 255.255.255.0) dérivé du préfixe CIDR
  • Moniteur de bande passante — un bouton Démarrer/Arrêter explicite remplace le démarrage automatique peu fiable au chargement de la page
  • Exportation CSV/TXT — les pages Nmap et Traceroute proposent désormais des boutons Exporter CSV et Exporter TXT (apparaissent après la fin du scan / du traceroute)
  • i18n — nouvelles clés de traduction pour toutes les fonctionnalités ci-dessus (fr/en/es/de)

v1.1.1 — 2026-05-16

  • Terminal SSH — réécriture complète avec pyte (émulateur VT100/xterm) + rendu QPainter ; défilement arrière de 2000 lignes, curseur clignotant, prise en charge de 256 couleurs
  • Traceroute visuel — carte du monde (Natural Earth 110m), géolocalisation en direct par saut (ip-api.com), zoom/pan interactifs, double analyseur (traceroute / repli tracepath)
  • Moniteur de bande passante — débit en temps réel par interface, graphique glissant de 60 s, vitesses en direct, totaux de session et pics
  • Wake on LAN — paquet magique en pur Python (diffusion UDP), registre d'hôtes persistant (JSON)
  • Scanner IP — résolution de noms d'hôte via getent/avahi/nmblookup ; adresse MAC, fournisseur (IEEE OUI 39K entrées), colonnes d'interface ; export CSV/TXT mis à jour
  • i18n — traduction complète fr/en/es/de pour toutes les nouvelles pages

v1.0.0 — 2026-05-14

Première version publique — 13 modules : Tableau de bord, Interfaces, Wi-Fi, Calculateur de sous-réseau, Recherche DNS, Moniteur Ping, Scanner IP, Scanner de ports, Nmap, Whois, SNMP, SNTP/NTP, SSH.


Fonctionnalités

ModuleDescription
Tableau de bordInformations sur la machine locale, passerelle, IP publique, géolocalisation, résolveurs DNS
Gestionnaire de connexionsProfils NetworkManager via nmcli : lister, filtrer, connecter/déconnecter/modifier/supprimer
InterfacesTable des interfaces réseau avec détail par interface (ip + nmcli)
Wi-FiRéseaux disponibles, barres de signal, sécurité, réseau connecté mis en évidence
Calculateur de sous-réseauPlage réseau/broadcast/hôtes à partir du CIDR, table d'hôtes jusqu'à 4096 entrées
Recherche DNSRecherche basée sur dig pour A, AAAA, MX, TXT, NS, CNAME, PTR, SOA, ANY
Moniteur PingPing continu vers plusieurs hôtes, statistiques RTT, % de perte de paquets
Scanner IPScan ping CIDR/plage, 50 threads, nom d'hôte (DNS/mDNS/NetBIOS), adresse MAC, fournisseur (OUI), interface, export CSV + TXT
Scanner de portsScan de connexion TCP, 200 threads, préréglages de services, export CSV + TXT
Nmap7 modes de scan, analyse de la sortie XML, table Hôte/Port/Protocole/État/Service, export CSV + TXT
WhoisSortie whois brute en monospace
SNMPsnmpwalk/snmpget, v1/v2c, 10 préréglages OID, table de résultats
SNTP / NTPClient UDP RFC 4330 en pur Python, offset/délai/stratum/référence
SSHTerminal PTY intégré (pyte/VT100), connexions enregistrées (JSON), authentification par clé, défilement arrière
Bureau à distanceProfils de connexion RDP (groupes/sous-groupes) ; lance xfreerdp ; mot de passe jamais stocké
VNCProfils de connexion VNC (groupes/sous-groupes) ; lance vncviewer (TigerVNC) ; compatible ARD macOS ; mot de passe jamais stocké
Gestionnaire de clés SSHListe les paires de clés ~/.ssh/ (type, bits, empreinte) ; génère Ed25519/RSA 4096 ; copie la clé publique ; déploie vers un serveur via ssh-copy-id ; supprime les paires avec confirmation
Inspecteur TLSDétails du certificat : CN, SAN, émetteur, validité + compte à rebours d'expiration, numéro de série, protocole, chiffrement, chaîne ; Watchlist avec surveillance d'expiration en arrière-plan et pastille de couleur dans la barre latérale
SMB / NFSListe les partages SMB (smbclient) et les exports NFS (showmount) depuis n'importe quel serveur ou NAS ; identifiants facultatifs pour SMB
Fichier hostsAfficher/modifier /etc/hosts : ajouter, supprimer, activer/désactiver des entrées ; filtrer ; enregistrer via pkexec
Traceroute visuelRoute saut par saut sur une carte du monde, géolocalisation en direct (ip-api.com), zoom et panoramique, export CSV + TXT
MTRMy Traceroute intégré : % de perte, RTT Dernier/Moy/Meilleur/Pire/Gigue par saut, code couleur, export CSV + TXT
Visionneuse de pare-feuJeu de règles nftables + iptables/ip6tables en lecture seule (sans root) ; en direct via pkexec ; filtre par table/chaîne/action
Test de vitesseTéléchargement/téléversement/ping via Cloudflare ; aucun outil externe au-delà de curl ; graphique d'historique (5 dernières exécutions)
Bande passanteDébit en temps réel par interface : graphique glissant de 60 s, vitesses en direct, totaux de session, pic
Wake on LANPaquet magique en pur Python (diffusion UDP), registre d'hôtes persistant, aucun outil externe requis
Carte de topologieDécouverte automatique des appareils LAN via nmap -sn ; graphe interactif avec nœuds déplaçables, zoom/panoramique, panneau de détail
ParamètresSélection de la langue (FR / EN / ES / DE / IT / PT / JA / ZH), persistante ; redémarrage requis après modification
Palette de commandesSuperposition Ctrl+P : recherche floue dans les 29 modules par nom ou mot-clé
Transfert de fichiersServeur TFTP ou HTTP à la demande ; port et répertoire racine configurables ; IP locales comme boutons de copie ; table de journal en direct (nom de fichier, IP client, direction ↑/↓, taille) ; liste des répertoires HTTP + GET/POST/PUT ; TFTP GET + PUT ; le port 69 demande pkexec
ExportFichier → Exporter le rapport réseau (JSON/Markdown/Text/PDF) ; export par module sur Interfaces, DNS, Pare-feu, SSH, Connexions

Prérequis

Outils système

Linux — la plupart sont déjà présents sur une installation standard :```bash

Arch / EndeavourOS

sudo pacman -S iproute2 networkmanager bind-tools nmap whois net-snmp iputils mtr curl

Debian / Ubuntu

sudo apt install iproute2 network-manager dnsutils nmap whois snmp mtr-tiny curl

Fedora

sudo dnf install iproute NetworkManager bind-utils nmap whois net-snmp-utils mtr curl

**macOS** — installation via [Homebrew](https://brew.sh) :```bash
# Required
brew install nmap mtr curl

# Optional — enable additional modules
brew install whois          # WHOIS page
brew install net-snmp       # SNMP page (snmpwalk / snmpget)
brew install samba          # SMB scan with credentials (smbclient)

macOS fournit ping, dig, traceroute, netstat, ifconfig, smbutil et route nativement. networksetup et scutil sont des outils intégrés à macOS, aucune installation requise. La recherche de fabricant OUI dans IP Scanner ne nécessite aucune installation non plus — la base de données manuf de Wireshark est téléchargée automatiquement en arrière-plan lors de la première utilisation et mise en cache localement.

Outils optionnels

OutilFonctionnalitéLinuxmacOS
xfreerdp / xfreerdp3Bureau à distance (RDP)Arch: freerdp · Ubuntu ≤24.04: freerdp2-x11 · Ubuntu 26.04+: freerdp3-x11optionnel — utilise Microsoft Remote Desktop en secours (open rdp://)
vncviewerVNCArch: tigervnc · Debian: tigervnc-vieweroptionnel — utilise le Partage d'écran de macOS en secours (open vnc://, intégré)
nm-connection-editorModifier les connexions depuis le Gestionnaire de connexionsArch: nm-connection-editor— (les Préférences Système s'ouvrent à la place)
tracerouteAlternative à Traceroute (tracepath utilisé par défaut)Arch: tracerouteintégré
mount.cifs (cifs-utils)Monter les partages SMB depuis le menu contextuelArch/Debian: cifs-utilsintégré (mount_smbfs)
iperf3Test de vitesse — onglet LANArch: iperf3 · Debian/Ubuntu: iperf3brew install iperf3

Python

  • Python 3.11+
  • PySide6 6.6+
  • ptyprocess 0.7+
  • pyte 0.8+ (pip install pyte ou sudo pacman -S python-pyte)
  • tftpy 0.8+ (pip install tftpy ou sudo pacman -S python-tftpy) — module de transfert de fichiers

Installation

Option 1 — Arch Linux / Manjaro / EndeavourOS (AUR)```bash

yay -S nmlinux

Toutes les dépendances (PySide6, ptyprocess, pyte, nmcli, …) sont gérées automatiquement.

### Option 2 — NixOS / Nix

Exécutez directement avec le `flake.nix` fourni — aucune installation globale requise :```bash
git clone https://github.com/thongor77/nmlinux.git
cd nmlinux
nix run .

Ou entrez dans un shell de développement :```bash nix develop python3 -m nmlinux.main

Toutes les dépendances Python (PySide6, ptyprocess, pyte, tftpy) et les outils système (nmcli, nmap, freerdp, vncviewer, mtr, avahi-browse…) sont fournis automatiquement via le wrapper Nix.

### Option 4 — AppImage (toute distribution Linux, sans installation)

Téléchargez `NMLinux-x.y.z-x86_64.AppImage` depuis la [dernière version](https://github.com/thongor77/nmlinux/releases/latest) :```bash
chmod +x NMLinux-*.AppImage
./NMLinux-*.AppImage

No installation required — Python, Qt and all NMLinux modules are bundled in a single file.
Works on any x86_64 Linux with glibc 2.17+ (Ubuntu 16.04+, Fedora 26+, Arch, Mint, etc.).

System network tools (nmap, whois, mtr…) are not bundled — install them via your package manager for the corresponding modules to work. See Prérequis below.

Option 5 — macOS

Quickest way — one-liner bootstrap. Works on a completely bare Mac: installs Xcode Command Line Tools, Homebrew, all system tools, then NMLinux itself. Safe to re-run (updates instead of reinstalling):```bash curl -fsSL https://raw.githubusercontent.com/thongor77/nmlinux/main/packaging/bootstrap_macos.sh -o /tmp/bootstrap_macos.sh && bash /tmp/bootstrap_macos.sh

Installer à l'échelle du système (`/Applications`) au lieu de `~/Applications`:```bash
curl -fsSL https://raw.githubusercontent.com/thongor77/nmlinux/main/packaging/bootstrap_macos.sh -o /tmp/bootstrap_macos.sh && bash /tmp/bootstrap_macos.sh --system

Aucun compte développeur Apple ni notarisation payante requis — c'est le même script open-source install_macos_app.sh sous le capot, simplement récupéré et exécuté pour vous. Le script est du bash simple et lisible ; n'hésitez pas à ouvrir /tmp/bootstrap_macos.sh et à le lire avant de l'exécuter, ou consultez-le directement ici : packaging/bootstrap_macos.sh.

Le téléchargement puis l'exécution (plutôt que le pipe direct dans bash) est intentionnel : sur un Mac neuf, le script déclenche des étapes interactives imbriquées (l'installateur des outils en ligne de commande Xcode, l'installateur de Homebrew lui-même demandant votre mot de passe sudo) qui lisent depuis le terminal — le fait de rediriger le script directement dans bash peut faire interférer ces invites imbriquées avec le flux d'entrée du script et l'arrêter en cours de route. L'exécution depuis un fichier téléchargé évite complètement ce problème.

Installation manuelle — si vous préférez exécuter chaque étape vous-même, ou si vous avez déjà Homebrew :```bash

1. Install Homebrew system tools (see Requirements above)

brew install nmap mtr curl

2. Clone and install

git clone https://github.com/thongor77/nmlinux.git cd nmlinux bash packaging/install_macos_app.sh

To update: `git pull && bash packaging/install_macos_app.sh`  
To uninstall: `bash packaging/uninstall_macos.sh`  
To install system-wide (`/Applications`): `bash packaging/install_macos_app.sh --system`

Le script installe automatiquement les paquets Python suivants dans l'environnement virtuel (venv) :
- `PySide6`, `ptyprocess`, `pyte`, `tftpy`
- `pyobjc-framework-Cocoa` — barre de menu macOS, boîtes de dialogue natives
- `pyobjc-framework-CoreWLAN` — scan des SSID Wi-Fi
- `pyobjc-framework-CoreLocation` — autorisation des services de localisation pour les noms Wi-Fi

**Wi-Fi sur macOS 26 (Tahoe) :** au premier lancement, macOS demandera l'autorisation des services de localisation — accordez-la pour afficher les noms des réseaux Wi-Fi. L'autorisation se trouve sous *Réglages Système › Confidentialité et sécurité › Services de localisation*.

> La plupart des modules fonctionnent sur macOS sans modification. RDP utilise le protocole de secours `open rdp://` (Microsoft Remote Desktop), VNC utilise `open vnc://` (Partage d'écran intégré). Le gestionnaire de connexions a des fonctionnalités réduites sur macOS (`nmcli` n'est pas disponible).

### Option 6 — Debian / Ubuntu / Linux Mint (script d'installation)

> **Note pour les utilisateurs de Linux Mint / Ubuntu :** `pip install` est bloqué à l'échelle du système sur Python 3.12+ (PEP 668 — `externally-managed-environment`). Utilisez le script d'installation fourni — il crée un environnement virtuel automatiquement et installe une entrée `.desktop`.```bash
git clone https://github.com/thongor77/nmlinux.git
cd nmlinux
bash install.sh

Le script va :

  • Installer les dépendances système via apt (libgl1, python3-venv, freerdp, tigervnc…)
  • Créer un environnement virtuel dans ~/.local/share/nmlinux/venv
  • Installer NMLinux et ses dépendances Python dans le venv
  • Créer un lanceur dans ~/.local/bin/nmlinux
  • Ajouter une entrée .desktop pour que NMLinux apparaisse dans votre menu d'applications

Après l'installation, exécutez nmlinux depuis un terminal ou lancez-le depuis le menu d'applications.

Option 7 — Wheel (toutes les distributions / macOS)

Téléchargez le .whl depuis la dernière version et installez-le :```bash

Arch / Fedora / macOS — no pip restrictions

pip install nmlinux-1.5.3-py3-none-any.whl

Debian / Ubuntu / Mint — install system libs first, then use pipx

Ubuntu ≤24.04:

sudo apt install libgl1 libglib2.0-0 libdbus-1-3 freerdp2-x11 tigervnc-viewer

Ubuntu 26.04+:

sudo apt install libgl1 libglib2.0-0 libdbus-1-3 freerdp3-x11 tigervnc-viewer

pipx install nmlinux-1.5.3-py3-none-any.whl

> **Note pour Ubuntu 26.04+ :** `pipx` nécessite que les bibliothèques système (libGL, etc.) soient installées d'abord — les commandes ci-dessus les couvrent. Si `pipx install` échoue en raison d'une erreur de compilation PySide6, utilisez **Option 4** (script d'installation) à la place, qui gère tout automatiquement.

### Option 8 — À partir des sources (Arch / Fedora / macOS)```bash
git clone https://github.com/thongor77/nmlinux.git
cd nmlinux
pip install PySide6 ptyprocess pyte tftpy
python3 -m nmlinux.main

Option 9 — Entrée de bureau (KDE / GNOME / etc.)

Copiez le fichier .desktop pour que NMLinux apparaisse dans votre lanceur d'applications :```bash cp data/nmlinux.desktop ~/.local/share/applications/ update-desktop-database ~/.local/share/applications/

Ensuite, modifiez le chemin `Exec=` dans le fichier si nécessaire.

---

## Exécution```bash
./nmlinux.sh
# or, after pip install:
nmlinux
# or directly:
python3 -m nmlinux.main

Structure du projet```

nmlinux/ core/ i18n.py — Translation system (8 languages: fr/en/es/de/it/pt/ja/zh), tr(key) function icons.py — themed_icon(): 21 bundled Lucide SVG icons via QSvgRenderer theme.py — is_dark(), color_ok(), color_err(): runtime light/dark helpers settings.py — AppSettings dataclass, JSON persistence ssh.py — SshConnection dataclass, SshStore rdp.py — RdpConnection dataclass, RdpStore, find_xfreerdp() vnc.py — VncConnection dataclass, VncStore, find_vncviewer() terminal.py — SshWorker (QThread) + PTY via ptyprocess, emits raw bytes tls_watchlist.py — TlsWatchlist: background cert expiry checker, JSON persistence http_server.py — ThreadedHTTPServer: directory listing, GET/PUT/POST, port binding tftp_helper.py — TftpServerThread: tftpy wrapper, configurable port and root help_content.py — Module contextual help strings (all 8 languages) cli_bar.py — CliBar singleton: pedagogical CLI equivalent bar export_dialog.py — open_export_dialog(): QFileDialog with live extension update command_palette.py — CommandPalette (Ctrl+P): fuzzy search across 29 modules export_manager.py — collect_snapshot(), to_json/text/markdown/pdf, save_export() pages/ about.py — About page (credits, tools & services) bandwidth.py — Bandwidth Monitor: per-interface 60s graph, live stats connection_manager.py — Connection Manager: nmcli profiles, connect/disconnect/edit dashboard.py — Dashboard dns.py — DNS Lookup file_transfer.py — File Transfer: TFTP + HTTP server, live log, pkexec for port 69 firewall.py — Firewall Viewer: nftables + iptables parser, live via pkexec help_page.py — Contextual help overlay hosts.py — Hosts File: view/edit /etc/hosts, toggle entries, save via pkexec interfaces.py — Network Interfaces ip_scanner.py — IP Scanner mtr.py — MTR: mtr --report parser, live hop stats table, export nmap_scan.py — Nmap ping.py — Ping Monitor port_scanner.py — Port Scanner rdp.py — Remote Desktop: RDP profiles, launches xfreerdp settings.py — Settings page smb_nfs.py — SMB/NFS Browser: smbclient + showmount snmp.py — SNMP sntp.py — SNTP / NTP speedtest.py — Speed Test: curl + Cloudflare, history graph ssh.py — SSH page (connection manager + terminal) ssh_keys.py — SSH Key Manager: list/generate/deploy/delete key pairs subnet.py — Subnet Calculator terminal_view.py — TerminalView: pyte VT100 emulator + QPainter renderer tls.py — TLS Inspector + TLS Watchlist: cert details, background expiry monitor topology.py — Topology Map: nmap -sn, interactive graph, zoom/pan traceroute.py — Visual Traceroute: world map, geolocation, zoom/pan vnc.py — VNC: connection profiles, launches vncviewer whois.py — Whois wifi.py — Wi-Fi wol.py — Wake on LAN: magic packet, persistent host book assets/ icons/ — 21 bundled Lucide SVG icons (#60a5fa) world.geojson — Natural Earth 110m countries (map background) window.py — MainWindow (sidebar + QStackedWidget) main.py — Entry point

---

## Compatibilité avec les environnements de bureau

Depuis la v1.2.7, NMLinux utilise 21 icônes SVG [Lucide](https://lucide.dev) fournies en bundle, rendues au moment de l'exécution via `QSvgRenderer`. L'application ne dépend plus d'aucun thème d'icônes système (Breeze, Adwaita, Papirus…) et s'affiche correctement sur KDE, GNOME, XFCE et autres. Le style Qt s'adapte automatiquement à l'environnement de bureau actif.

---

## Limitations

### Linux
Prise en charge complète — les 29 modules sont disponibles.

### macOS
La plupart des modules fonctionnent immédiatement, car ils s'appuient sur des outils disponibles sur les deux plateformes (`ssh`, `dig`, `ping`, `curl`, `nmap`, `openssl`…).

**9 modules ont nécessité une adaptation explicite pour macOS** (deux chemins de code détectant la plateforme au démarrage) : Dashboard, Interfaces, Wi-Fi, Topology, Bandwidth, Firewall, Connection Manager, Hosts File, MTR — ceux-ci utilisent des commandes macOS natives (`ifconfig`, `networksetup`, `scutil`, `pfctl`, `system_profiler`…) au lieu de leurs équivalents Linux.

**Modules avec une prise en charge macOS limitée ou inexistante :**

| Module | Statut | Notes |
|--------|--------|-------|
| **RDP** | ✓ macOS | Repli sur `open rdp://` → Microsoft Remote Desktop (App Store) |
| **VNC** | ✓ macOS | Repli sur `open vnc://` → Partage d'écran (intégré, aucune installation) |
| **IP Scanner** | ✓ macOS | Utilise `socket.gethostbyaddr()` — Python natif, aucun outil supplémentaire |
| **SMB** | ✓ macOS | Utilise `smbutil view` (intégré) au lieu de `smbclient` |
| **NFS** | ✓ macOS | `showmount` intégré ; analyse des en-têtes adaptée |
| **Connection Manager** | ⚠ Réduit | L'édition/suppression nécessitent `nmcli` (Linux uniquement) ; la vue liste fonctionne |

### Général
- Pas d'intégration root/polkit — les outils nécessitant des privilèges élevés (certains modes Nmap, sockets brutes) doivent être exécutés avec `sudo` ; sur macOS, l'élévation de privilèges utilise `osascript` + `administrator privileges`
- Le forwarding de l'agent SSH nécessite un agent SSH actif (`SSH_AUTH_SOCK`) ; sur macOS, cela est géré automatiquement par le système, aucune configuration manuelle n'est nécessaire

---

## Crédits et remerciements

- **[Anthropic](https://www.anthropic.com)** — Claude Code, l'assistant IA utilisé pour construire ce projet
- L'auteur, pour la vision, les tests et l'orientation

---

## Soutenir le projet

Si NMLinux vous est utile, envisagez de soutenir son développement :

- **PayPal** — [Faire un don via PayPal](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&currency_code=EUR)
- **Bitcoin** — `bc1qspe0tky7552qas72wgn8w9dswr0dxlv24w39t6ztjqk3nz6kc5tqv753a4`

---

## Licence

GPL-2.0 — voir [LICENSE](https://github.com/thongor77/nmlinux/blob/HEAD/LICENSE).

Ce projet est une réimplémentation indépendante. Aucun code de NETworkManager n'a été utilisé ni traduit.

Catégories