
nmlinux v1.7.11
Unified network toolkit for Linux — Python 3 + PySide6
NMLinux · v1.7.12
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 test —
pytest 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.mdedocs/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)
| Dashboard | Topology |
|---|---|
![]() | ![]() |
| Traceroute | Wi-Fi |
|---|---|
![]() | ![]() |
macOS
| Dashboard | Traceroute |
|---|---|
![]() | ![]() |
Registro delle modifiche
v1.7.12 — 2026-08-12
- Traceroute — correzione: in Flatpak (v1.7.11, vedi sotto — ora rimosso),
tracerouteveniva sempre risolto suPATHtramite lo shim dell'host anche quando sull'host non era installato un vero binariotraceroute, quindi il worker non ripiegava mai sutracepathe la traccia terminava all'istante senza hop e senza errori mostrati. Ora ripiega sutracepathogni volta chetraceroutenon produce alcun output analizzabile, indipendentemente dal motivo del fallimento. - Terminale SSH — correzione askpass: quando
DISPLAY/WAYLAND_DISPLAYsono impostati (qualsiasi sessione GUI) e ssh non ha una tty pulita, può provare a usare$SSH_ASKPASSper la richiesta della password invece del terminale integrato — facendo fallire silenziosamente l'autenticazione se non è installato un helper askpass.SSH_ASKPASS_REQUIRE=neverora 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 --hostnon può mai diventare il proprietario del terminale di controllo della pty inoltrata (TIOCSCTTYrifiutato conEPERM— 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 shimflatpak-spawn --hostsuPATHinvece di mettere in sandbox ciascuno singolarmente; PySide6 proviene dalio.qt.PySide.BaseAppdi Flathub piuttosto che dalla wheel PyPI. Non pubblicato su Flathub — un singolo bundle.flatpakviene creato conpackaging/flatpak/build-bundle.she 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+Co con il menu del tasto destro; incolla conCtrl+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
iperf3solo-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 usapkexec mount -t cifscon un file di credenziali a permessi ristretti (mai esposto viaps); su macOS usamount_smbfsdirettamente. 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.shnon forza piùNONINTERACTIVE=1sull'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 abash, 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:
SmbNfsPageera 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_profilerper 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_targetsolo 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_targetapre il modulo di nuova connessione precompilato), Topology (load_hostsinietta i nodi dalla scansione IP Scanner/Nmap senza riscansionare — gateway rilevato automaticamente, archi disegnati, nodo di origine evidenziato in rosso), Asset Inventory (prefill_hostsavvia 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 bundlePython.framework(CFBundleName = "Python") che Qt legge durante la costruzione di QApplication; corretto applicando una patch ainfoDictionary()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_tramitepyobjc-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.shin modo che macOS associ correttamente il bundle.appal processo in esecuzione; aggiunti l'override disetprognameesys.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 tramitever, CPU tramite registro, RAM tramitesysteminfo, disco tramitewmic→fsutil(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,nmapesnmpgetinstallati tramite Homebrew ora vengono trovati e chiamati usando il loro percorso assoluto; i bundle.appsu 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.shdalla radice del repository è ora il metodo di aggiornamento documentato; lo script gestisce il proprio venv (~/.local/share/nmlinux/venv) e non richiedepipopipxa 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 -hsostituito confreecompatibile BusyBox; il percorso codice macOS ora usasw_versper il nome dell'OS, fallbackhw.modelper la CPU Apple Silicon,/System/Volumes/Dataper il volume dati utente APFS; i volumi Synology/Unraid (/volume1,/mnt/user) rilevati prima della root; il pattern di falso successodf | tail -1 || …corretto con guardietest -d; output dilsb_releaseripulito 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 chiamaarp -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) asmbutil 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
xfreerdpnon viene trovato, ripiega sullo schema URLopen rdp://; apre Microsoft Remote Desktop (App Store) se installato, con host, porta, nome utente e dominio precompilati - macOS — VNC: quando
vncviewernon viene trovato, ripiega sullo schema URLopen 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
-Aal comandossh; 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,xmodel nel TXT AirPlay), dispositivi NAS (Synology riportamodel=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 usaosascript+with administrator privilegesinvece dipkexec; il font monospace usaMenloinvece diMonospace - 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_nfsenav_hint_hostsa 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 tramitessh-copy-idin 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 -Lcon 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 tramitepkexec 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 668externally-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; rilevavncviewermancante 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
xfreerdpcome processo esterno; la password viene richiesta al momento della connessione e non viene mai salvata; campi: host, porta, nome utente, dominio, risoluzione, schermo intero; rilevaxfreerdpmancante 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 tramiteQSvgRenderer; 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.pyora rileva automaticamente il tema icone GTK tramitegsettingse 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.qtsvgaQT_PLUGIN_PATHcosì 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 abreezequando viene rilevato il set di icone incluso nel bundle Nix; controlla anche/etc/xdg/kdeglobalsper 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 verso1.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.confe/etc/iptables/*.rulessenza root; ruleset live tramitepkexec 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.pyconis_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/ fallbacktracepath) - 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à
| Module | Descrizione |
|---|---|
| Dashboard | Informazioni sulla macchina locale, gateway, IP pubblico, geolocalizzazione, resolver DNS |
| Connection Manager | Profili NetworkManager tramite nmcli: elenco, filtro, connetti/disconnetti/modifica/elimina |
| Interfacce | Tabella delle interfacce di rete con dettaglio per interfaccia (ip + nmcli) |
| Wi-Fi | Reti disponibili, barre del segnale, sicurezza, rete connessa evidenziata |
| Calcolatore di sottorete | Intervallo di rete/broadcast/host da CIDR, tabella host fino a 4096 voci |
| DNS Lookup | Ricerca basata su dig per A, AAAA, MX, TXT, NS, CNAME, PTR, SOA, ANY |
| Ping Monitor | Ping continuo verso più host, statistiche RTT, percentuale di perdita pacchetti |
| IP Scanner | Scansione ping CIDR/intervallo, 50 thread, nome host (DNS/mDNS/NetBIOS), indirizzo MAC, vendor (OUI), interfaccia, esportazione CSV + TXT |
| Port Scanner | Scansione TCP connect, 200 thread, preset di servizi, esportazione CSV + TXT |
| Nmap | 7 modalità di scansione, parsing dell'output XML, tabella Host/Porta/Protocollo/Stato/Servizio, esportazione CSV + TXT |
| Whois | Output whois grezzo in monospace |
| SNMP | snmpwalk/snmpget, v1/v2c, 10 preset OID, tabella dei risultati |
| SNTP / NTP | Client UDP RFC 4330 in puro Python, offset/delay/stratum/reference |
| SSH | Terminale PTY integrato (pyte/VT100), connessioni salvate (JSON), autenticazione con chiave, scrollback |
| Desktop remoto | Profili connessione RDP (gruppi/sottogruppi); avvia xfreerdp; password mai salvata |
| VNC | Profili connessione VNC (gruppi/sottogruppi); avvia vncviewer (TigerVNC); compatibile macOS ARD; password mai salvata |
| SSH Key Manager | Elenca 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 Inspector | Dettagli 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 / NFS | Elenca condivisioni SMB (smbclient) ed esportazioni NFS (showmount) da qualsiasi server o NAS; credenziali opzionali per SMB |
| File Hosts | Visualizza/modifica /etc/hosts: aggiungi, elimina, attiva/disattiva voci; filtro; salvataggio tramite pkexec |
| Visual Traceroute | Percorso salto per salto su una mappa del mondo, geolocalizzazione live (ip-api.com), zoom e pan, esportazione CSV + TXT |
| MTR | My Traceroute integrato: perdita %, RTT Ultimo/Media/Migliore/Peggiore/Jitter per ogni salto, colorato, esportazione CSV + TXT |
| Firewall Viewer | Ruleset nftables + iptables/ip6tables in sola lettura (senza root); live tramite pkexec; filtro per tabella/catena/azione |
| Speed Test | Download/upload/ping tramite Cloudflare; nessuno strumento esterno oltre a curl; grafico storico (ultime 5 esecuzioni) |
| Larghezza di banda | Throughput in tempo reale per interfaccia: grafico scorrevole di 60 secondi, velocità live, totali di sessione, picco |
| Wake on LAN | Magic packet in puro Python (broadcast UDP), rubrica host persistente, nessuno strumento esterno richiesto |
| Topology Map | Rileva automaticamente i dispositivi LAN tramite nmap -sn; grafico interattivo con nodi trascinabili, zoom/pan, pannello dei dettagli |
| Impostazioni | Selezione lingua (FR / EN / ES / DE / IT / PT / JA / ZH), persistente; riavvio richiesto dopo la modifica |
| Riquadro comandi | Sovrapposizione Ctrl+P: ricerca fuzzy su tutti i 29 moduli per nome o parola chiave |
| Trasferimento file | Server 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 |
| Esportazione | File → 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,smbutileroute.networksetupescutilsono strumenti integrati di macOS, non serve installarli. La ricerca del vendor OUI in IP Scanner non richiede installazione — il databasemanufdi Wireshark viene scaricato automaticamente in background al primo utilizzo e memorizzato in cache localmente.
Strumenti opzionali
| Strumento | Funzionalità | Linux | macOS |
|---|---|---|---|
xfreerdp / xfreerdp3 | Desktop remoto (RDP) | Arch: freerdp · Ubuntu ≤24.04: freerdp2-x11 · Ubuntu 26.04+: freerdp3-x11 | facoltativo — ripiega su Microsoft Remote Desktop (open rdp://) |
vncviewer | VNC | Arch: tigervnc · Debian: tigervnc-viewer | facoltativo — ripiega su Condivisione schermo di macOS (open vnc://, integrato) |
nm-connection-editor | Modifica le connessioni da Connection Manager | Arch: nm-connection-editor | — (si apre invece Preferenze di Sistema) |
traceroute | Alternativa a traceroute (per impostazione predefinita viene usato tracepath) | Arch: traceroute | integrato |
mount.cifs (cifs-utils) | Monta le condivisioni SMB dal menu contestuale | Arch/Debian: cifs-utils | integrato (mount_smbfs) |
iperf3 | Speed Test — scheda LAN | Arch: iperf3 · Debian/Ubuntu: iperf3 | brew install iperf3 |
Python
- Python 3.11+
- PySide6 6.6+
- ptyprocess 0.7+
- pyte 0.8+ (
pip install pyteosudo pacman -S python-pyte) - tftpy 0.8+ (
pip install tftpyosudo 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.she 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 passwordsudo) che leggono dal terminale — fare un pipe diretto dello script inbashpuò 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
.desktopin 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¤cy_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.





