Torna agli aggiornamenti
New releaseAug 3, 2026

nmlinux v1.7.11

Unified network toolkit for Linux — Python 3 + PySide6

Condividi

NMLinux · v1.7.12

Version Python License: GPL-2.0 Platform Languages Donate Bitcoin

Un toolkit di rete unificato per Linux e macOS: ispeziona, connettiti, diagnostica.

NMLinux è un'unica GUI unificata che riunisce 29 moduli di rete in una finestra: monitoraggio interfacce, Wi-Fi, DNS, terminale SSH, visualizzatore firewall, mappa topologica, traceroute e altro. Sviluppato da zero in Python e PySide6 (Qt 6), con 8 lingue dell'interfaccia e nessuna dipendenza esterna oltre agli strumenti di sistema standard.

[!NOTE] NMLinux non è correlato al daemon di sistema Linux /usr/bin/NetworkManager (NetworkManager di Red Hat/GNOME). NMLinux è un progetto autonomo sviluppato da zero in Python e PySide6.

Sviluppato con Claude Code (Anthropic) e il contributo del suo autore.


Processo di sviluppo

NMLinux è sviluppato con l'assistenza dell'IA — nello specifico Claude Code — e questo non è nascosto da nessuna parte in questo repository. Quasi ogni progetto software serio oggi usa l'IA da qualche parte nel proprio processo, che lo dichiari o meno. Quindi "se l'IA fosse coinvolta" non è la domanda interessante. La domanda interessante è: c'è qualcosa che intercetta gli errori dell'IA?

Ecco cosa lo fa, se preferisci verificare piuttosto che prendere la mia parola:

  • 162 testpytest tests/ -v. Pura logica più una manciata di veri test dei widget Qt (menu, tabelle), senza simulare le parti interessanti.
  • docs/Decisions-Techniques.md — ogni scelta tecnica non ovvia, le alternative scartate e i bug (inclusi quelli introdotti dall'IA) trovati e corretti, con il ragionamento documentato.
  • docs/Architecture.md e docs/Carte-des-Modules.md — la struttura reale del codice, mantenuta sincronizzata con ciò che viene distribuito.
  • Un controllo di coerenza i18n eseguito prima di ogni release per individuare chiavi di traduzione mancanti nelle 8 lingue supportate.

Nessuna di queste cose esiste perché l'IA non è affidabile. Esistono perché nulla dovrebbe essere distribuito senza un processo che lo verifichi — codice scritto a mano incluso. Giudica il risultato e come viene verificato, non lo strumento che ha aiutato a scriverlo.

Hai trovato comunque un bug? È utile, non imbarazzante — apri una segnalazione.


Comunità

Le discussioni su GitHub sono aperte — condividi feedback, segnala idee, fai domande o semplicemente saluta. L'autore ha oltre 30 anni di esperienza in infrastrutture e operazioni e ha creato questo strumento perché anche per Linux dovrebbe esistere software buono, gratuito e semplice.


Screenshot

Screenshot Linux dalla v1.2.7 — screenshot macOS dalla v1.3.5. L'app ora ha 29 moduli e 8 lingue dell'interfaccia (FR/EN/ES/DE/IT/PT/JA/ZH).

Linux (KDE)

DashboardTopology
DashboardTopology
TracerouteWi-Fi
TracerouteWi-Fi

macOS

DashboardTraceroute
macOS DashboardmacOS Traceroute

Registro delle modifiche

v1.7.12 — 2026-08-12

  • Traceroute — correzione: in Flatpak (v1.7.11, vedi sotto — ora rimosso), traceroute veniva sempre risolto su PATH tramite lo shim dell'host anche quando sull'host non era installato un vero binario traceroute, quindi il worker non ripiegava mai su tracepath e la traccia terminava all'istante senza hop e senza errori mostrati. Ora ripiega su tracepath ogni volta che traceroute non produce alcun output analizzabile, indipendentemente dal motivo del fallimento.
  • Terminale SSH — correzione askpass: quando DISPLAY/WAYLAND_DISPLAY sono impostati (qualsiasi sessione GUI) e ssh non ha una tty pulita, può provare a usare $SSH_ASKPASS per la richiesta della password invece del terminale integrato — facendo fallire silenziosamente l'autenticazione se non è installato un helper askpass. SSH_ASKPASS_REQUIRE=never ora impone che le richieste di password passino sempre dal terminale stesso.
  • Packaging Flatpak rimosso: il manifest locale KDE Linux distribuito nella v1.7.11 è stato interrotto. L'indagine sul bug della richiesta password SSH sopra ha portato alla luce una limitazione a livello di kernel: un processo inoltrato tramite flatpak-spawn --host non può mai diventare il proprietario del terminale di controllo della pty inoltrata (TIOCSCTTY rifiutato con EPERM — una sessione diversa e non correlata la possiede già; questo è un confine di sicurezza intenzionale del kernel, non un bug). L'unica soluzione alternativa (script, che alloca una nuova pty) risolve la richiesta della password ma rompe la propagazione live del ridimensionamento del terminale per quella sessione — ritenuta una scelta peggiore rispetto a non distribuire affatto Flatpak. AUR e AppImage sono i percorsi di installazione Linux supportati d'ora in poi.

v1.7.11 — 2026-08-03

  • Packaging Flatpak (KDE Linux): un manifest di build locale in packaging/flatpak/ è destinato a KDE Linux e ad altre distribuzioni solo-Flatpak. Gli strumenti CLI dell'host a cui nmlinux delega l'esecuzione (nmcli, pkexec, mount.cifs, ssh, nmap, …) vengono collegati tramite shim flatpak-spawn --host su PATH invece di mettere in sandbox ciascuno singolarmente; PySide6 proviene dal io.qt.PySide.BaseApp di Flathub piuttosto che dalla wheel PyPI. Non pubblicato su Flathub — un singolo bundle .flatpak viene creato con packaging/flatpak/build-bundle.sh e allegato a ogni release, esattamente come già avviene per l'AppImage. Interrotto nella v1.7.12 — vedi sopra.

v1.7.10 — 2026-08-03

  • Terminale SSH — correzione: risolta una race condition per cui la PTY poteva avviarsi con dimensioni errate (predefinite 24×80) se le dimensioni effettive del widget terminale non erano ancora note all'avvio della sessione, scartando silenziosamente la richiesta di ridimensionamento. Questo desincronizzava le app remote a schermo intero (es. Claude Code CLI, htop, vim) dalle dimensioni reali della finestra, causando testo obsoleto/residuo nella parte inferiore dello schermo che si cancellava solo quando il nuovo output scorreva oltre. Segnalato dall'utente; riprodotto con una sessione interattiva reale

v1.7.9 — 2026-08-02

  • Terminale SSH — copia/incolla: seleziona il testo con il mouse (clic e trascinamento, evidenziato), copia con Ctrl+Shift+C o con il menu del tasto destro; incolla con Ctrl+Shift+V (già esistente). Prima la copia era impossibile — non esisteva alcuna selezione del testo
  • Terminale SSH — sessioni simultanee multiple: la pagina SSH ora apre ogni connessione nella propria scheda invece di una singola sessione condivisa. Riconnettersi a una connessione salvata — anche la stessa due volte — prima uccideva la sessione attiva senza aprire una sostituzione funzionante; ora ogni azione di connessione apre una nuova scheda indipendente

v1.7.8 — 2026-07-14

  • Speed Test — nuova scheda LAN (iperf3): accanto al test di velocità internet esistente, una nuova scheda esegue test iperf3 solo-client verso una lista pubblica di server inclusa (26 paesi) o un server personalizzato salvato (es. un server interno dell'organizzazione). Supporta TCP/UDP, IPv4/IPv6/auto e direzione inversa (download), con jitter/perdita mostrati per i test UDP. Suggerito da issue #6
  • Nuova dipendenza opzionale: iperf3 — installalo per abilitare la scheda LAN; la scheda mostra un banner e rimane disabilitata altrimenti

v1.7.6 — 2026-07-05

  • Asset Inventory — aggiornamento con tasto destro: fai clic con il tasto destro su una o più righe già scansionate (selezione multipla supportata) e scegli "Aggiorna selezionati" per riscansionare solo quegli host sul posto, invece di rieseguire una scansione completa della rete
  • Asset Inventory — feedback di autenticazione SSH fallita: un accesso SSH rifiutato ora mostra "Autenticazione SSH fallita" invece di fallire in silenzio, senza perdere la baseline hostname/OS rilevata da Nmap — confermato su un vero NAS Synology dove l'Auto Block di DSM ha rifiutato una password corretta dopo che erano stati provati prima altri set di credenziali configurati

v1.7.5 — 2026-07-04

  • Ping Monitor — elenco di destinazioni salvate: un nuovo pannello a sinistra consente di salvare le destinazioni ping (nome, host, intervallo) in un elenco persistente, così gli host monitorati sopravvivono al riavvio dell'app invece di dover essere riscritti. Un pulsante ★ su ogni riga monitorata attivamente salva quell'host nell'elenco in qualsiasi momento della sessione — non serve aver pianificato in anticipo prima che l'app si chiuda inaspettatamente
  • Ping Monitor — "Avvia monitoraggio": seleziona una destinazione salvata e avvia il monitoraggio con un clic, riutilizzando l'intervallo salvato

v1.7.4 — 2026-07-04

  • Asset Inventory — corretti risultati di scansione incoerenti: il controllo di attività inviava un singolo ping con timeout di 1 secondo e senza nuovi tentativi, che poteva escludere un dispositivo reale sotto il carico concorrente dello scanner (fino a 40 host sondati contemporaneamente) o quando un host Wi-Fi era brevemente in standby tra i beacon — confermato dal vivo su una sottorete reale che restituiva conteggi di dispositivi diversi tra esecuzioni ripetute dello stesso intervallo. Il controllo ora ritenta il ping prima di ripiegare sulla sonda della porta TCP
  • Asset Inventory — nuovo pulsante "Aggiorna vuoti": dopo una scansione, riscansiona solo gli IP che non hanno restituito dati invece dell'intero intervallo; gli host appena trovati vengono uniti ai risultati esistenti

v1.7.3 — 2026-07-03

  • SMB — monta le condivisioni dal menu del tasto destro: fai clic con il tasto destro su una condivisione nella scheda SMB e scegli Monta/Smonta per montarla in un percorso locale stabile (~/mnt/<host>_<share>), utilizzabile dal terminale e da qualsiasi altra app — non una vista di navigazione temporanea. Solo per la sessione (nessuna persistenza fstab/systemd), credenziali riutilizzate dai campi utente/password esistenti. Su Linux usa pkexec mount -t cifs con un file di credenziali a permessi ristretti (mai esposto via ps); su macOS usa mount_smbfs direttamente. Riprova automaticamente con un dialetto SMB più vecchio (vers=2.0) quando un server rifiuta la negoziazione predefinita (comune con i NAS più datati) — entrambi i tentativi avvengono sotto un'unica richiesta di autenticazione tramite un processo helper dedicato
  • Nuova dipendenza opzionale: cifs-utils (Linux) per il montaggio SMB; integrata in macOS

v1.7.2 — 2026-07-03

  • Installazione macOS — corretti due bug di bootstrap trovati su un Mac pulito: bootstrap_macos.sh non forza più NONINTERACTIVE=1 sull'installer di Homebrew, che si interrompeva immediatamente su qualsiasi account amministratore nuovo invece di chiedere la password sudo; il comando one-liner documentato ora scarica prima lo script invece di passarlo direttamente a bash, poiché i passaggi interattivi annidati (installer Xcode CLT, il prompt sudo di Homebrew stesso) potevano interferire con il flusso di input dello script esterno quando veniva passato tramite pipe
  • Menu universale del tasto destro — aggiunto SMB: SmbNfsPage era l'unica pagina di destinazione mancante dal sistema inter-modulo del tasto destro introdotto nella v1.7.0; facendo clic con il tasto destro su un host e scegliendo SMB ora il campo host viene precompilato e la scansione parte immediatamente, in grassetto nel menu quando la porta 445 viene rilevata aperta
  • i18n — tradotte le restanti stringhe della Dashboard: l'etichetta della latenza del gateway, il titolo della scheda TLS Watchlist e la relativa riga di stato erano ancora codificati in francese; ora sono tradotti in tutte le 8 lingue dell'interfaccia

v1.7.1 — 2026-07-02

  • macOS 26 (Tahoe) — correzioni SSID Wi-Fi: passato da system_profiler (che restituisce <redacted> senza i Servizi di localizzazione) a CoreWLAN come fonte dati primaria; l'app ora richiede il permesso dei Servizi di localizzazione al primo avvio; la pagina Wi-Fi mostra tutte le reti con i nomi reali una volta concesso
  • macOS — Connection Manager: l'SSID connesso ora viene letto tramite CoreWLAN, con system_profiler per la modalità di sicurezza
  • macOS — SMB: messaggio chiaro "autenticazione richiesta" quando il NAS richiede credenziali; corretto un falso avviso smb.conf da Homebrew smbclient
  • macOS — Corretto un potenziale crash alla chiusura dopo la prima finestra di dialogo del permesso per i Servizi di localizzazione

v1.7.0 — 2026-07-02

  • Menu contestuale universale del tasto destro su ogni tabella che contiene IP o hostname — naviga direttamente tra i moduli senza copia-incolla: fai clic con il tasto destro su qualsiasi host rilevato e scegli Ping, Scansione porte, Whois, DNS, Traceroute, MTR, SSH, RDP, VNC, Visualizza nella Topology o Aggiungi a Inventory. Le voci di menu SSH/RDP/VNC appaiono in grassetto quando la porta corrispondente viene rilevata aperta. Le etichette sono completamente tradotte in tutte le 8 lingue dell'interfaccia.
  • Pagine sorgente (emettono azioni del tasto destro): IP Scanner, Nmap, Ping, Port Scanner, Traceroute, MTR, Topology (tasto destro sul nodo)
  • Pagine di destinazione (ricevono l'host e precompilano): Whois (set_target + query automatica), DNS (set_target solo precompilazione), Ping (set_target + avvio automatico), Traceroute (set_target + avvio automatico), MTR (set_target + avvio automatico), Port Scanner (set_target + focus), SSH / RDP / VNC (set_target apre il modulo di nuova connessione precompilato), Topology (load_hosts inietta i nodi dalla scansione IP Scanner/Nmap senza riscansionare — gateway rilevato automaticamente, archi disegnati, nodo di origine evidenziato in rosso), Asset Inventory (prefill_hosts avvia la scansione delle credenziali direttamente sugli host rilevati, salta la fase di scoperta ICMP)
  • Dashboard — grafico ping del gateway: sparkline della latenza in tempo reale aggiornata ogni 2 secondi; codificata a colori (<20 ms verde / 20–100 ms arancione / >100 ms rosso / timeout rosso)
  • Dashboard — riepilogo TLS Watchlist: la scheda di stato nella Dashboard riflette automaticamente lo stato della TLS Watchlist (OK / in scadenza / allarme) senza nuove query
  • Dashboard — ridimensionamento mappa geo: la mappa del mondo ora si espande orizzontalmente quando la finestra viene ridimensionata

v1.6.4 — 2026-06-28

  • macOS: la barra dei menu ora mostra NMLinux invece di Python — causa principale: dopo l'exec() in Python, NSBundle.mainBundle() risolve nel bundle Python.framework (CFBundleName = "Python") che Qt legge durante la costruzione di QApplication; corretto applicando una patch a infoDictionary() del bundle e rinominando le voci di menu native tramite AppKit prima che venga creato il menu dell'applicazione

v1.6.3 — 2026-06-28

  • macOS: primo tentativo di correggere la barra dei menu usando NSProcessInfo.setProcessName_ tramite pyobjc-framework-Cocoa (sostituito dalla v1.6.4)

v1.6.2 — 2026-06-28

  • macOS: sostituito lo script di avvio bash con uno stub C compilato in install_macos_app.sh in modo che macOS associ correttamente il bundle .app al processo in esecuzione; aggiunti l'override di setprogname e sys.argv[0] come fallback

v1.6.1 — 2026-06-25

  • Terminale SSH — corretto l'echo remoto: i tasti digitati nel terminale SSH integrato venivano inviati alla shell remota ma non venivano mai restituiti in echo (la tastiera sembrava "morta" dopo il login). nmlinux forzava l'echo locale della PTY a disattivato e ssh propagava quel "nessun echo" alla pty remota tramite le sue modalità di terminale (pty-req), quindi la shell remota smetteva di restituire l'input. Riprodotto su una VM Ubuntu 26.04 appena creata (le versioni recenti di OpenSSH applicano fedelmente queste modalità). Il terminale ora mantiene la PTY in modalità normale e lascia che sia ssh a gestire l'echo, come fanno i veri emulatori di terminale.

v1.6.0 — 2026-06-24

  • Asset Inventory — WinRM Windows (completo): rilevamento host tramite sonda sulla porta TCP quando ICMP è bloccato da Windows Firewall; PowerShell ora usa il percorso assoluto completo + EncodedCommand (base64) per impedire a cmd.exe di interpretare le pipe |; catena di fallback completa senza diritti di amministratore: OS tramite ver, CPU tramite registro, RAM tramite systeminfo, disco tramite wmicfsutil (consapevole delle impostazioni locali: virgola EN / spazio FR) → dir /-C
  • Asset Inventory — SSH multi-credenziali: supportati più set di credenziali SSH; corretto il percorso del disco macOS (/System/Volumes/Data), fallback CPU Apple Silicon (hw.model), Synology (/volume1), Unraid (/mnt/user)
  • Correzioni di bug: gli errori WinRM ora vengono mostrati nella tabella invece del fallback silenzioso; il rilevamento host WinRM/SNMP non è più bloccato dalla presenza di credenziali SSH; corretto il timeout di pywinrm

v1.5.3 — 2026-06-24

  • macOS .app — rilevamento strumenti Homebrew: sshpass, nmap e snmpget installati tramite Homebrew ora vengono trovati e chiamati usando il loro percorso assoluto; i bundle .app su macOS non ereditano il PATH di Homebrew (/opt/homebrew/bin, /usr/local/bin), quindi gli strumenti precedentemente installati venivano ignorati in silenzio
  • Percorso di aggiornamento macOS: eseguire git pull && bash packaging/install_macos_app.sh dalla radice del repository è ora il metodo di aggiornamento documentato; lo script gestisce il proprio venv (~/.local/share/nmlinux/venv) e non richiede pip o pipx a livello di sistema

v1.5.2 — 2026-06-24

  • Asset Inventory — nuovo modulo (il 29°); scansiona un intervallo CIDR e raccoglie OS, CPU, RAM, disco e uptime da ciascun host tramite SSH, WinRM, SNMP o Nmap; supporta più set di credenziali per protocollo (li prova tutti in ordine); politica di zero conservazione: le credenziali non vengono mai scritte su disco e vengono cancellate dalla memoria dopo la scansione; esporta i risultati in JSON, CSV o Markdown; aggiunta una mappa geo animata alla sezione IP Geolocation della Dashboard
  • Correzioni raccolta SSH: corretto l'errore di quoting awk nel comando disco; free -h sostituito con free compatibile BusyBox; il percorso codice macOS ora usa sw_vers per il nome dell'OS, fallback hw.model per la CPU Apple Silicon, /System/Volumes/Data per il volume dati utente APFS; i volumi Synology/Unraid (/volume1, /mnt/user) rilevati prima della root; il pattern di falso successo df | tail -1 || … corretto con guardie test -d; output di lsb_release ripulito dalle virgolette circostanti; supportati più set di credenziali SSH/WinRM (li prova tutti in ordine per host)

v1.5.0 — 2026-06-17

  • File Transfer Server — nuovo modulo per avviare/fermare un server TFTP o HTTP leggero direttamente dall'app; caso d'uso classico: backup e ripristino delle configurazioni di router, switch o stampanti; un solo server attivo alla volta (TFTP o HTTP), porta e directory root configurabili, IP locali mostrati come pulsanti copia-negli-appunti; HTTP include elenco directory (sfoglia da qualsiasi browser sulla LAN), GET (download) e POST/PUT (upload); TFTP supporta GET e PUT (bidirezionale), la porta 69 richiede i privilegi di root — l'app mostra un pulsante "Avvia come root (pkexec)" in caso di errore di permessi; tabella live del registro trasferimenti (timestamp, nome file, IP client, direzione ↑/↓, dimensione); protezione dal port traversal; 8 lingue dell'interfaccia; nuova dipendenza: tftpy

v1.4.3 — 2026-06-14

  • Correzioni TLS Watchlist: i certificati autofirmati e non attendibili ora vengono mostrati correttamente come "⚠ Certificato non valido / non attendibile" (arancione) invece che verde; la cattura delle eccezioni SSL è stata ampliata per coprire tutte le sottoclassi di ssl.SSLError; le voci ora mostrano "… (verifica in corso)" mentre il controllo in background è in esecuzione e "— (non raggiungibile)" quando l'host non può essere raggiunto

v1.4.2 — 2026-06-14

  • TLS Watchlist — elenco persistente di hostname di cui monitorare la scadenza dei certificati; aggiungi host con + Watch (usa host/porta correnti) o manualmente nel pannello; il controllo in background viene eseguito automaticamente 2 secondi dopo l'avvio; la voce laterale "TLS Inspector" mostra un punto colorato: rosso se un certificato è scaduto, arancione se un certificato scade entro 30 giorni; pulsante di ricontrollo nel pannello; l'elenco mostra lo stato per voce (✓ / ⚠ / SCADUTO) con codifica a colori

v1.4.1 — 2026-06-14

  • macOS — IP Scanner: corretti la ricerca di indirizzo MAC, vendor e interfaccia su macOS; _arp_entry() ora chiama arp -n <ip> su macOS e analizza il suo formato di output (? (IP) at AA:BB:CC on en0) invece di leggere /proc/net/arp (solo Linux); tutte e quattro le colonne dello scanner ora si popolano correttamente su macOS
  • Aiuto VNC: aggiunta una nota in tutte le 8 lingue che chiarisce che Linux non ha un server VNC predefinito ed elenca le opzioni comuni da installare (x11vnc, tigervnc-server, wayvnc)

v1.4.0 — 2026-06-14- macOS — IP Scanner: sostituito getent (solo Linux) con socket.gethostbyaddr() di Python per una risoluzione DNS inversa multipiattaforma; la risoluzione dei nomi host ora funziona nativamente su macOS senza strumenti aggiuntivi

  • macOS — SMB Browser: passato da smbclient (richiede Homebrew samba) a smbutil view (strumento integrato in macOS); l'elenco delle condivisioni SMB ora funziona su macOS senza installazioni
  • macOS — NFS Browser: showmount è integrato in macOS ma non supporta --no-headers; il flag è stato rimosso su macOS e la riga di intestazione viene saltata nel parser; l'elenco delle esportazioni NFS ora funziona nativamente
  • macOS — RDP: quando xfreerdp non viene trovato, ripiega sullo schema URL open rdp://; apre Microsoft Remote Desktop (App Store) se installato, con host, porta, nome utente e dominio precompilati
  • macOS — VNC: quando vncviewer non viene trovato, ripiega sullo schema URL open vnc://; apre la Condivisione schermo di macOS (integrata, nessuna installazione richiesta)

v1.3.9 — 2026-06-13

  • Inoltro agente SSH — nuova casella "Agent forwarding" nel modulo di connessione SSH; aggiunge -A al comando ssh; consente di saltare tra server senza copiare la propria chiave privata (PC → A → B); richiede un agente SSH attivo (SSH_AUTH_SOCK); guida contestuale aggiornata in tutte le 8 lingue

v1.3.8 — 2026-06-13

  • Riquadro comandi (Ctrl+P) — navigazione immediata da tastiera verso uno qualsiasi dei 27 moduli; ricerca fuzzy su nome e parole chiave (es. "firewall", "tls", "ssh key", "scan"); frecce Su/Giù + Invio o clic singolo per navigare; si apre con Ctrl+P da qualsiasi punto dell'app
  • Gestione esportazioni — esporta un'istantanea completa della rete (interfacce, route, resolver DNS) da File → Export Network Report… in JSON, Markdown, testo semplice o PDF (opzionale: pip install reportlab)
  • Pulsanti di esportazione a livello di modulo — pulsanti di esportazione aggiunti alle pagine Interfacce, DNS, Firewall, Connessioni SSH e Connection Manager; ogni pagina esporta i propri dati correnti nel formato scelto, con estensione del file aggiornata dinamicamente quando il filtro del formato cambia

v1.3.6 — 2026-06-12

  • Topologia — icone dei dispositivi — ogni nodo ora mostra un'icona SVG Lucide corrispondente al tipo di dispositivo (router/wi-fi, computer/portatile, stampante, NAS/server, smartphone, switch di rete, Raspberry Pi) invece di un cerchio generico; 5 nuove icone SVG incluse (printer, server, smartphone, cpu, laptop)
  • Topologia — rilevamento mDNS — il tipo di dispositivo viene rilevato tramite avahi-browse (opzionale, eseguito in parallelo alla scansione nmap); identifica stampanti (_ipp._tcp, PDL Printer), smartphone e TV Android (_googlecast._tcp, _androidtvremote2._tcp), Mac Apple (am=Mac16,x model nel TXT AirPlay), dispositivi NAS (Synology riporta model=Xserve), desktop KDE Connect; in assenza di avahi ripiega su OUI del vendor MAC ed euristiche sul nome host
  • Topologia — pannello dei dettagli mostra la classe di dispositivo rilevata (Stampante, Smartphone, NAS…) invece dell'etichetta generica "Host"; i18n in tutte le 8 lingue
  • Traceroute — zoom automatico — la mappa del mondo si ingrandisce e si centra automaticamente sul bounding box dei salti geolocalizzati al termine di ogni percorso; si disattiva quando l'utente esegue pan o zoom manuale; si ripristina al traceroute successivo; il clic destro ripristina la vista mondiale completa

v1.3.5 — 2026-06-06

  • Compatibilità macOS — tutti i 9 moduli di rete ora funzionano su macOS senza alterare il comportamento su Linux; ogni modulo rileva la piattaforma all'avvio (_IS_MACOS) e si dirama verso i comandi macOS nativi: route -n get default, ifconfig, scutil --dns, networksetup, system_profiler SPAirPortDataType, pfctl, netstat -ib; l'elevazione dei privilegi usa osascript + with administrator privileges invece di pkexec; il font monospace usa Menlo invece di Monospace
  • Moduli con doppio percorso Linux/macOS: Dashboard, Interfacce, Wi-Fi, Topologia, Larghezza di banda, Firewall (pf.conf + pfctl), Connection Manager, File Hosts, MTR
  • Moduli invariati (strumenti identici su entrambe le piattaforme): DNS, Scansione Nmap, SNMP, Whois

v1.3.2 — 2026-06-06

  • i18n estesa a 8 lingue — aggiunte Italiano, Português, 日本語 (giapponese) e 中文 (cinese semplificato); l'intera interfaccia (tutti i 27 moduli, ~720 chiavi di traduzione) è ora disponibile in FR / EN / ES / DE / IT / PT / JA / ZH; dopo aver cambiato lingua nelle Impostazioni appare un prompt di riavvio
  • Guida contestuale in 8 lingue — il pannello del badge ? (descrizione, esempi d'uso e comandi CLI equivalenti) ora copre tutte le 8 lingue per ogni modulo; in precedenza JA e ZH ripiegavano sull'inglese
  • Correzione bug — i tooltip di navigazione per SMB/NFS e File Hosts venivano visualizzati in francese indipendentemente dalla lingua selezionata; aggiunte le chiavi mancanti nav_hint_smb_nfs e nav_hint_hosts a tutti i 7 blocchi linguistici non francesi

v1.3.1 — 2026-06-05

  • SSH Key Manager — elenca tutte le coppie di chiavi in ~/.ssh/ (file, tipo, bit, commento, impronta SHA256); genera chiavi Ed25519 o RSA 4096 con passphrase opzionale (rilevamento di mancata corrispondenza, nome file automatico in base al tipo); copia la chiave pubblica negli appunti; distribuisce su un server remoto tramite ssh-copy-id in un terminale integrato con supporto stdin per i prompt di password; elimina le coppie di chiavi con conferma; crea automaticamente ~/.ssh/ se mancante; i18n: fr / en / es / de

v1.3.0 — 2026-06-03

  • TLS / SSL Inspector — ispeziona il certificato di qualsiasi server: CN del soggetto, SAN, emittente, date di validità (codificate a colori: verde / arancione < 30 giorni / rosso scaduto), numero di serie, protocollo TLS, cipher suite e catena di certificati (tramite openssl s_client); funziona per certificati validi, scaduti e autofirmati; messaggi di errore chiari per host non raggiungibili
  • SMB / NFS Browser — elenca condivisioni ed esportazioni da qualsiasi server; scheda SMB: smbclient -L con credenziali opzionali, mostra nome condivisione / tipo / commento; scheda NFS: showmount -e, mostra percorso di esportazione ed elenco accessi; rileva gli strumenti mancanti con istruzioni di installazione specifiche per distribuzione
  • File Hosts Editor — visualizza e modifica /etc/hosts; tabella con interruttore attiva/disattiva, aggiungi/modifica/elimina voci tramite finestra di dialogo; filtro per IP o nome host; salvataggio tramite pkexec cp (finestra di autenticazione polkit)
  • install.sh — nuovo script per Debian / Ubuntu / Linux Mint: crea un venv in ~/.local/share/nmlinux/venv, installa le dipendenze di sistema tramite apt, crea il launcher e la voce .desktop (risolve l'errore PEP 668 externally-managed-environment)

v1.2.9 — 2026-05-30

  • VNC — nuovo modulo per la gestione dei profili di connessione VNC; gruppi/sottogruppi come SSH e RDP; avvia vncviewer (TigerVNC); compatibile con macOS ARD (l'autenticazione DH30 è gestita nativamente da vncviewer); la password non viene mai salvata; rileva vncviewer mancante con istruzioni di installazione specifiche per distribuzione
  • Informazioni — Strumenti e servizi — nuova sezione che elenca tutti gli strumenti e le API di terze parti da cui l'app dipende
  • i18n della barra laterale — tutti i 23 tooltip di navigazione ora tradotti in FR/EN/ES/DE (prima erano codificati in francese); etichette corrette: Topologia, Connessioni, Sottorete

v1.2.8 — 2026-05-30

  • Desktop remoto (RDP) — nuovo modulo per la gestione dei profili di connessione RDP di Windows; gruppi/sottogruppi come SSH; avvia xfreerdp come processo esterno; la password viene richiesta al momento della connessione e non viene mai salvata; campi: host, porta, nome utente, dominio, risoluzione, schermo intero; rileva xfreerdp mancante con istruzioni di installazione specifiche per distribuzione (Arch / Debian / Fedora)

v1.2.7 — 2026-05-26

  • Icone Lucide incluse — 21 icone SVG di Lucide (MIT) sono ora incluse in assets/icons/; renderizzate a runtime tramite QSvgRenderer; colorate #60a5fa; l'app non richiede più alcun tema di icone di sistema (Breeze, Adwaita, Papirus…)

v1.2.6 — 2026-05-24

  • Compatibilità GNOME / Adwaita — icone corrette su desktop non KDE: main.py ora rileva automaticamente il tema icone GTK tramite gsettings e lo applica a Qt; estese le catene di fallback per Wi-Fi, Traceroute, Speed Test, Interfacce, Port Scanner, Firewall, MTR; themed_icon() ora verifica che esista una pixmap reale prima di accettare un'icona del tema
  • Compatibilità NixOS / KDE — corrette tutte le icone su NixOS: Breeze 6.x include solo icone SVGZ; il wrapper Nix ora aggiunge qt6.qtsvg a QT_PLUGIN_PATH così Qt può renderizzare le icone SVG; themed_icon() prova le dimensioni 22/24/16/32/48 (Breeze usa 22 px, non 24); il tema viene forzato a breeze quando viene rilevato il set di icone incluso nel bundle Nix; controlla anche /etc/xdg/kdeglobals per la configurazione KDE a livello di sistema

v1.2.5 — 2026-05-23

  • MTR — My Traceroute integrato: esegue mtr --report, analizza l'output testuale, mostra una tabella live con Perdita %, RTT Ultimo/Media/Migliore/Peggiore/Jitter per ogni salto, colorata in base alla gravità della perdita; modalità continua; esportazione CSV + TXT
  • Speed Test — speed test senza dipendenze tramite curl + Cloudflare (speed.cloudflare.com): download (25 MB), upload (10 MB), ping verso 1.1.1.1; fino a 5 esecuzioni salvate in JSON; grafico a linee storico (Download/Upload)
  • Firewall Viewer — visualizzatore di regole in sola lettura: analizza /etc/nftables.conf e /etc/iptables/*.rules senza root; ruleset live tramite pkexec nft list ruleset; colonne: Tabella / Catena / Regola / Porta / Azione / Commento; azioni codificate a colori; filtro live
  • Suggerimenti nella barra laterale — ogni voce di navigazione ora mostra un badge ? discreto; al passaggio del mouse viene visualizzato un tooltip che descrive cosa fa il modulo; aggiunto un separatore verticale tra barra laterale e area contenuto
  • i18n — tutti i nuovi moduli tradotti in francese, inglese e spagnolo

v1.2.0 — 2026-05-22

  • Adattamento del tema — supporto completo di commutazione runtime chiaro/scuro su tutte le pagine; nuovo core/theme.py con is_dark(), color_ok(), color_err(); i widget painter personalizzati (_Graph, _MapWidget) leggono la palette al momento del painting; tutti i colori hardcoded Catppuccin Mocha sostituiti con ruoli semantici della palette Qt
  • Maschera di sottorete — le pagine Dashboard, Interfacce e Connessioni ora mostrano la maschera di sottorete in notazione decimale puntata (es. 255.255.255.0) derivata dal prefisso CIDR
  • Bandwidth Monitor — pulsante Start/Stop esplicito che sostituisce l'avvio automatico inaffidabile al caricamento della pagina
  • Esportazione CSV/TXT — le pagine Nmap e Traceroute ora offrono pulsanti Esporta CSV ed Esporta TXT (appaiono dopo il completamento di scansione/traceroute)
  • i18n — nuove chiavi di traduzione per tutte le funzionalità sopra (fr/en/es/de)

v1.1.1 — 2026-05-16

  • Terminale SSH — riscrittura completa con pyte (emulatore VT100/xterm) + renderer QPainter; scrollback di 2000 righe, cursore lampeggiante, supporto 256 colori
  • Visual Traceroute — mappa del mondo (Natural Earth 110m), geolocalizzazione live per ogni salto (ip-api.com), zoom/pan interattivi, doppio parser (traceroute / fallback tracepath)
  • Bandwidth Monitor — throughput in tempo reale per interfaccia, grafico scorrevole di 60 secondi, velocità live, totali di sessione e picchi
  • Wake on LAN — magic packet in puro Python (broadcast UDP), rubrica host persistente (JSON)
  • IP Scanner — risoluzione nomi host tramite getent/avahi/nmblookup; indirizzo MAC, vendor (IEEE OUI 39K voci), colonna interfaccia; esportazione CSV/TXT aggiornata
  • i18n — traduzione completa fr/en/es/de per tutte le nuove pagine

v1.0.0 — 2026-05-14

Rilascio iniziale pubblico — 13 moduli: Dashboard, Interfacce, Wi-Fi, Calcolatore di sottorete, DNS Lookup, Ping Monitor, IP Scanner, Port Scanner, Nmap, Whois, SNMP, SNTP/NTP, SSH.


Funzionalità

ModuleDescrizione
DashboardInformazioni sulla macchina locale, gateway, IP pubblico, geolocalizzazione, resolver DNS
Connection ManagerProfili NetworkManager tramite nmcli: elenco, filtro, connetti/disconnetti/modifica/elimina
InterfacceTabella delle interfacce di rete con dettaglio per interfaccia (ip + nmcli)
Wi-FiReti disponibili, barre del segnale, sicurezza, rete connessa evidenziata
Calcolatore di sottoreteIntervallo di rete/broadcast/host da CIDR, tabella host fino a 4096 voci
DNS LookupRicerca basata su dig per A, AAAA, MX, TXT, NS, CNAME, PTR, SOA, ANY
Ping MonitorPing continuo verso più host, statistiche RTT, percentuale di perdita pacchetti
IP ScannerScansione ping CIDR/intervallo, 50 thread, nome host (DNS/mDNS/NetBIOS), indirizzo MAC, vendor (OUI), interfaccia, esportazione CSV + TXT
Port ScannerScansione TCP connect, 200 thread, preset di servizi, esportazione CSV + TXT
Nmap7 modalità di scansione, parsing dell'output XML, tabella Host/Porta/Protocollo/Stato/Servizio, esportazione CSV + TXT
WhoisOutput whois grezzo in monospace
SNMPsnmpwalk/snmpget, v1/v2c, 10 preset OID, tabella dei risultati
SNTP / NTPClient UDP RFC 4330 in puro Python, offset/delay/stratum/reference
SSHTerminale PTY integrato (pyte/VT100), connessioni salvate (JSON), autenticazione con chiave, scrollback
Desktop remotoProfili connessione RDP (gruppi/sottogruppi); avvia xfreerdp; password mai salvata
VNCProfili connessione VNC (gruppi/sottogruppi); avvia vncviewer (TigerVNC); compatibile macOS ARD; password mai salvata
SSH Key ManagerElenca le coppie di chiavi in ~/.ssh/ (tipo, bit, impronta); genera Ed25519/RSA 4096; copia la chiave pubblica; distribuisce al server tramite ssh-copy-id; elimina le coppie con conferma
TLS InspectorDettagli del certificato: CN, SAN, emittente, validità + conto alla rovescia scadenza, seriale, protocollo, cipher, catena; Watchlist con monitoraggio scadenza in background e pallino colorato nella barra laterale
SMB / NFSElenca condivisioni SMB (smbclient) ed esportazioni NFS (showmount) da qualsiasi server o NAS; credenziali opzionali per SMB
File HostsVisualizza/modifica /etc/hosts: aggiungi, elimina, attiva/disattiva voci; filtro; salvataggio tramite pkexec
Visual TraceroutePercorso salto per salto su una mappa del mondo, geolocalizzazione live (ip-api.com), zoom e pan, esportazione CSV + TXT
MTRMy Traceroute integrato: perdita %, RTT Ultimo/Media/Migliore/Peggiore/Jitter per ogni salto, colorato, esportazione CSV + TXT
Firewall ViewerRuleset nftables + iptables/ip6tables in sola lettura (senza root); live tramite pkexec; filtro per tabella/catena/azione
Speed TestDownload/upload/ping tramite Cloudflare; nessuno strumento esterno oltre a curl; grafico storico (ultime 5 esecuzioni)
Larghezza di bandaThroughput in tempo reale per interfaccia: grafico scorrevole di 60 secondi, velocità live, totali di sessione, picco
Wake on LANMagic packet in puro Python (broadcast UDP), rubrica host persistente, nessuno strumento esterno richiesto
Topology MapRileva automaticamente i dispositivi LAN tramite nmap -sn; grafico interattivo con nodi trascinabili, zoom/pan, pannello dei dettagli
ImpostazioniSelezione lingua (FR / EN / ES / DE / IT / PT / JA / ZH), persistente; riavvio richiesto dopo la modifica
Riquadro comandiSovrapposizione Ctrl+P: ricerca fuzzy su tutti i 29 moduli per nome o parola chiave
Trasferimento fileServer TFTP o HTTP on-demand; porta e directory root configurabili; IP locali come pulsanti di copia; tabella log live (nome file, IP client, direzione ↑/↓, dimensione); elenco directory HTTP + GET/POST/PUT; TFTP GET + PUT; la porta 69 richiede pkexec
EsportazioneFile → Export Network Report (JSON/Markdown/Text/PDF); esportazione per modulo su Interfacce, DNS, Firewall, SSH, Connessioni

Requisiti

Strumenti di sistema

Linux — la maggior parte sono già presenti in un'installazione 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** — installa tramite [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 include nativamente ping, dig, traceroute, netstat, ifconfig, smbutil e route. networksetup e scutil sono strumenti integrati di macOS, non serve installarli. La ricerca del vendor OUI in IP Scanner non richiede installazione — il database manuf di Wireshark viene scaricato automaticamente in background al primo utilizzo e memorizzato in cache localmente.

Strumenti opzionali

StrumentoFunzionalitàLinuxmacOS
xfreerdp / xfreerdp3Desktop remoto (RDP)Arch: freerdp · Ubuntu ≤24.04: freerdp2-x11 · Ubuntu 26.04+: freerdp3-x11facoltativo — ripiega su Microsoft Remote Desktop (open rdp://)
vncviewerVNCArch: tigervnc · Debian: tigervnc-viewerfacoltativo — ripiega su Condivisione schermo di macOS (open vnc://, integrato)
nm-connection-editorModifica le connessioni da Connection ManagerArch: nm-connection-editor— (si apre invece Preferenze di Sistema)
tracerouteAlternativa a traceroute (per impostazione predefinita viene usato tracepath)Arch: tracerouteintegrato
mount.cifs (cifs-utils)Monta le condivisioni SMB dal menu contestualeArch/Debian: cifs-utilsintegrato (mount_smbfs)
iperf3Speed Test — scheda LANArch: iperf3 · Debian/Ubuntu: iperf3brew install iperf3

Python

  • Python 3.11+
  • PySide6 6.6+
  • ptyprocess 0.7+
  • pyte 0.8+ (pip install pyte o sudo pacman -S python-pyte)
  • tftpy 0.8+ (pip install tftpy o sudo pacman -S python-tftpy) — modulo File Transfer

Installazione

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

yay -S nmlinux

Tutte le dipendenze (PySide6, ptyprocess, pyte, nmcli, …) vengono gestite automaticamente.

### Opzione 2 — NixOS / Nix

Esegui direttamente con il `flake.nix` incluso — non è necessaria alcuna installazione a livello di sistema:```bash
git clone https://github.com/thongor77/nmlinux.git
cd nmlinux
nix run .

Oppure entra in una shell di sviluppo:```bash nix develop python3 -m nmlinux.main

Tutte le dipendenze Python (PySide6, ptyprocess, pyte, tftpy) e gli strumenti di sistema (nmcli, nmap, freerdp, vncviewer, mtr, avahi-browse…) sono forniti automaticamente tramite il wrapper Nix.

### Opzione 4 — AppImage (qualsiasi distribuzione Linux, nessuna installazione)

Scarica `NMLinux-x.y.z-x86_64.AppImage` dall'[ultima release](https://github.com/thongor77/nmlinux/releases/latest):```bash
chmod +x NMLinux-*.AppImage
./NMLinux-*.AppImage

Nessuna installazione richiesta — Python, Qt e tutti i moduli NMLinux sono inclusi in un singolo file.
Funziona su qualsiasi Linux x86_64 con glibc 2.17+ (Ubuntu 16.04+, Fedora 26+, Arch, Mint, ecc.).

Gli strumenti di rete di sistema (nmap, whois, mtr…) non sono inclusi — installali tramite il tuo gestore di pacchetti affinché i moduli corrispondenti funzionino. Vedi Requisiti di seguito.

Opzione 5 — macOS

Il modo più rapido — bootstrap in una sola riga. Funziona su un Mac completamente vergine: installa Xcode Command Line Tools, Homebrew, tutti gli strumenti di sistema e poi NMLinux stesso. Sicuro da rieseguire (aggiorna invece di reinstallare):```bash curl -fsSL https://raw.githubusercontent.com/thongor77/nmlinux/main/packaging/bootstrap_macos.sh -o /tmp/bootstrap_macos.sh && bash /tmp/bootstrap_macos.sh

Installa a livello di sistema (`/Applications`) invece di `~/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

Nessun account Apple Developer o notarizzazione a pagamento coinvolti — alla base c'è sempre lo stesso script open-source install_macos_app.sh, semplicemente scaricato ed eseguito per te. Lo script è bash semplice e leggibile; sentiti libero di aprire /tmp/bootstrap_macos.sh e leggerlo prima di eseguirlo, oppure consultalo direttamente qui: packaging/bootstrap_macos.sh.

Il modello scarica-e-poi-esegui (piuttosto che usare un pipe diretto in bash) è intenzionale: su un Mac nuovo, lo script attiva passaggi interattivi annidati (installer di Xcode Command Line Tools, installer di Homebrew che chiede la password sudo) che leggono dal terminale — fare un pipe diretto dello script in bash può far sì che questi prompt annidati interferiscano con il flusso di input dello script stesso e lo blocchino a metà. Eseguire da un file scaricato evita completamente il problema.

Installazione manuale — se preferisci eseguire ogni passaggio da solo, o hai già 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

Per aggiornare: `git pull && bash packaging/install_macos_app.sh`  
Per disinstallare: `bash packaging/uninstall_macos.sh`  
Per installare a livello di sistema (`/Applications`): `bash packaging/install_macos_app.sh --system`

Lo script installa automaticamente i seguenti pacchetti Python nel venv:
- `PySide6`, `ptyprocess`, `pyte`, `tftpy`
- `pyobjc-framework-Cocoa` — barra dei menu macOS, dialoghi nativi
- `pyobjc-framework-CoreWLAN` — scansione SSID Wi-Fi
- `pyobjc-framework-CoreLocation` — permesso dei Servizi di localizzazione per i nomi Wi-Fi

**Wi-Fi su macOS 26 (Tahoe):** al primo avvio, macOS chiederà il permesso per i Servizi di localizzazione — concedilo per visualizzare i nomi delle reti Wi-Fi. Il permesso si trova in *Impostazioni di Sistema › Privacy e sicurezza › Servizi di localizzazione*.

> La maggior parte dei moduli funziona su macOS senza modifiche. RDP ricade su `open rdp://` (Microsoft Remote Desktop), VNC ricade su `open vnc://` (Condivisione schermo integrata). Connection Manager ha funzionalità ridotte su macOS (`nmcli` non disponibile).

### Opzione 6 — Debian / Ubuntu / Linux Mint (script di installazione)

> **Nota per gli utenti di Linux Mint / Ubuntu:** `pip install` è bloccato a livello di sistema su Python 3.12+ (PEP 668 — `externally-managed-environment`). Usa lo script di installazione fornito — crea automaticamente un ambiente virtuale e installa una voce `.desktop`.```bash
git clone https://github.com/thongor77/nmlinux.git
cd nmlinux
bash install.sh

Lo script:

  • Installa le dipendenze di sistema tramite apt (libgl1, python3-venv, freerdp, tigervnc…)
  • Crea un ambiente virtuale in ~/.local/share/nmlinux/venv
  • Installa NMLinux e le sue dipendenze Python all'interno del venv
  • Crea un launcher in ~/.local/bin/nmlinux
  • Aggiunge una voce .desktop in modo che NMLinux appaia nel menu delle applicazioni

Dopo l'installazione, esegui nmlinux da un terminale o avvialo dal menu delle applicazioni.

Opzione 7 — Wheel (tutte le distro / macOS)

Scarica il .whl dall'ultima release e installalo:```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

> **Nota per Ubuntu 26.04+:** `pipx` richiede l'installazione preliminare delle librerie di sistema (libGL, ecc.) — i comandi sopra le coprono. Se `pipx install` fallisce a causa di un errore di build di PySide6, usa l'**Opzione 4** (script di installazione), che gestisce tutto automaticamente.

### Opzione 8 — Da sorgente (Arch / Fedora / macOS)```bash
git clone https://github.com/thongor77/nmlinux.git
cd nmlinux
pip install PySide6 ptyprocess pyte tftpy
python3 -m nmlinux.main

Opzione 9 — Voce desktop (KDE / GNOME / ecc.)

Copia il file .desktop per far apparire NMLinux nel launcher delle applicazioni:```bash cp data/nmlinux.desktop ~/.local/share/applications/ update-desktop-database ~/.local/share/applications/

Quindi modifica il percorso `Exec=` nel file se necessario.

---

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

Struttura del progetto```

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à con gli ambienti desktop

Dalla v1.2.7, NMLinux utilizza 21 icone SVG [Lucide](https://lucide.dev) incluse nel pacchetto e renderizzate a runtime tramite `QSvgRenderer`. L'app non dipende più da alcun tema di icone di sistema (Breeze, Adwaita, Papirus…) e viene visualizzata correttamente su KDE, GNOME, XFCE e altri. Lo stile Qt si adatta automaticamente all'ambiente desktop in esecuzione.

---

## Limitazioni

### Linux
Supporto completo — tutti i 29 moduli disponibili.

### macOS
La maggior parte dei moduli funziona senza configurazione aggiuntiva poiché si basa su strumenti disponibili su entrambe le piattaforme (`ssh`, `dig`, `ping`, `curl`, `nmap`, `openssl`…).

**9 moduli richiedono un adattamento esplicito per macOS** (doppio percorso di codice che rileva la piattaforma all'avvio): Dashboard, Interfaces, Wi-Fi, Topology, Bandwidth, Firewall, Connection Manager, Hosts File, MTR — questi usano comandi macOS nativi (`ifconfig`, `networksetup`, `scutil`, `pfctl`, `system_profiler`…) invece dei loro equivalenti Linux.

**Moduli con supporto macOS limitato o assente:**

| Module | Status | Notes |
|--------|--------|-------|
| **RDP** | ✓ macOS | Ripiega su `open rdp://` → Microsoft Remote Desktop (App Store) |
| **VNC** | ✓ macOS | Ripiega su `open vnc://` → Condivisione schermo (integrata, nessuna installazione) |
| **IP Scanner** | ✓ macOS | Usa `socket.gethostbyaddr()` — Python nativo, nessuno strumento aggiuntivo |
| **SMB** | ✓ macOS | Usa `smbutil view` (integrato) invece di `smbclient` |
| **NFS** | ✓ macOS | `showmount` integrato; parsing dell'header adattato |
| **Connection Manager** | ⚠ Ridotto | Modifica/eliminazione richiedono `nmcli` (solo Linux); la visualizzazione elenco funziona |

### Generale
- Nessuna integrazione root/polkit — gli strumenti che richiedono privilegi elevati (alcune modalità Nmap, socket raw) devono essere eseguiti con `sudo`; su macOS, l'elevazione dei privilegi usa `osascript` + `administrator privileges`
- Il forwarding dell'agente SSH richiede un agente SSH attivo (`SSH_AUTH_SOCK`); su macOS viene gestito automaticamente dal sistema, nessuna configurazione manuale necessaria

---

## Crediti e ringraziamenti

- **[Anthropic](https://www.anthropic.com)** — Claude Code, l'assistente AI usato per realizzare questo progetto
- L'autore, per la visione, i test e la direzione

---

## Supporta il progetto

Se NMLinux ti è utile, valuta di supportarne lo sviluppo:

- **PayPal** — [Dona tramite 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`

---

## Licenza

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

Questo progetto è una reimplementazione indipendente. Nessun codice da NETworkManager è stato usato o tradotto.

Categorie