
Toolkit de rede unificado para Linux — Python 3 + PySide6
Um kit de ferramentas de rede unificado para Linux e macOS — inspecione, conecte, diagnostique.
O NMLinux é uma GUI única e unificada que reúne 29 módulos de rede em uma única janela: monitoramento de interfaces, Wi-Fi, DNS, terminal SSH, visualizador de firewall, mapa de topologia, traceroute e muito mais. Construído do zero em Python e PySide6 (Qt 6), com 8 idiomas de interface e sem dependências externas além das ferramentas padrão do sistema.
[!NOTE] O NMLinux não está relacionado ao daemon do sistema Linux
/usr/bin/NetworkManager(NetworkManager da Red Hat/GNOME). O NMLinux é um projeto independente construído do zero em Python e PySide6.
Construído com Claude Code (Anthropic) e a contribuição do seu autor.
O NMLinux é construído com assistência de IA — Claude Code, especificamente — e isso não está escondido em nenhum lugar deste repositório. Quase todo projeto de software sério hoje usa IA em algum lugar do seu pipeline, quer diga ou não. Portanto, "a IA esteve envolvida" não é a pergunta interessante. A pergunta interessante é: existe algo que detecte quando a IA erra?
Aqui está o que faz isso, se preferir verificar em vez de aceitar minha palavra:
pytest tests/ -v. Lógica pura mais um punhado de testes reais de widgets Qt (menus, tabelas), sem simular as partes interessantes.docs/Decisions-Techniques.md — cada decisão técnica não óbvia, as alternativas que foram rejeitadas e os bugs (incluindo os introduzidos por IA) que foram encontrados e corrigidos, com o raciocínio documentado.docs/Architecture.md e docs/Carte-des-Modules.md — a estrutura real do código, mantida em sincronia com o que é distribuído.Nada disso existe porque a IA não pode ser confiável. Existe porque nada deveria ser lançado sem um processo que o verifique — código escrito à mão incluído. Julgue o resultado e como ele é verificado, não a ferramenta que ajudou a escrevê-lo.
Encontrou um bug mesmo assim? Isso é útil, não embaraçoso — abra uma issue.
GitHub Discussions estão abertos — compartilhe feedback, relate ideias, faça perguntas ou apenas diga olá. O autor tem mais de 30 anos em infraestrutura e operações, e construiu esta ferramenta porque software bom, gratuito e simples também deveria existir para Linux.
Capturas de tela do Linux da v1.2.7 — capturas de tela do macOS da v1.3.5. O aplicativo agora tem 29 módulos e 8 idiomas de interface (FR/EN/ES/DE/IT/PT/JA/ZH).
Linux (KDE)
| Dashboard | Topologia |
|---|---|
![]() | ![]() |
| Traceroute | Wi-Fi |
|---|---|
![]() | ![]() |
macOS
| Dashboard | Traceroute |
|---|---|
![]() | ![]() |
traceroute sempre resolvia no PATH via o shim do host mesmo quando o host não tinha um binário real de traceroute instalado, então o worker nunca recorria ao tracepath e o trace terminava instantaneamente sem hops e sem erro exibido. Agora ele recorre ao tracepath sempre que traceroute não produz nenhuma saída analisável, independentemente do motivo da falha.DISPLAY/WAYLAND_DISPLAY estão definidos (qualquer sessão GUI) e o ssh não tem um tty limpo, ele pode tentar $SSH_ASKPASS para o prompt de senha em vez do terminal embutido — falhando silenciosamente na autenticação se nenhum helper askpass estiver instalado. SSH_ASKPASS_REQUIRE=never agora força os prompts de senha a sempre passarem pelo próprio terminal.packaging/flatpak/ tem como alvo KDE Linux e outras distros somente Flatpak. As ferramentas CLI do host que o nmlinux invoca (nmcli, pkexec, mount.cifs, ssh, nmap, …) são conectadas via shims flatpak-spawn --host no PATH em vez de sandboxar cada uma individualmente; o PySide6 vem do io.qt.PySide.BaseApp do Flathub em vez da wheel do PyPI. Não publicado no Flathub — um único bundle .flatpak é construído com packaging/flatpak/build-bundle.sh e anexado a cada lançamento, da mesma forma que o AppImage já é. Descontinuado na v1.7.12 — veja acima.Ctrl+Shift+C ou o menu de clique direito; cole com Ctrl+Shift+V (existente). Copiar era anteriormente impossível — não existia seleção de texto algumaiperf3 somente cliente contra uma lista de servidores públicos integrada (26 países) ou um servidor personalizado salvo (ex.: um servidor interno da organização). Suporta TCP/UDP, IPv4/IPv6/automático e direção reversa (download), com jitter/perda exibidos para testes UDP. Sugerido pela issue #6iperf3 — instale para habilitar a aba LAN; a aba mostra um banner e permanece desabilitada caso contrário~/mnt/<host>_<share>), utilizável pelo terminal e qualquer outro aplicativo — não uma visão de navegação transitória. Somente sessão (sem persistência fstab/systemd), credenciais reutilizadas dos campos existentes de usuário/senha. O Linux usa pkexec mount -t cifs com um arquivo de credenciais de permissões restritas (nunca exposto via ps); o macOS usa mount_smbfs diretamente. Tenta automaticamente novamente com um dialeto SMB mais antigo (vers=2.0) quando um servidor rejeita a negociação padrão (comum com NAS mais antigos) — ambas as tentativas ocorrem sob um único prompt de autenticação via um processo helper dedicadocifs-utils (Linux) para montagem SMB; integrado ao macOSbootstrap_macos.sh não força mais NONINTERACTIVE=1 no instalador do Homebrew, que abortava imediatamente em qualquer conta de administrador nova em vez de solicitar a senha do sudo; o one-liner documentado agora baixa o script primeiro em vez de canalizá-lo diretamente para bash, já que etapas interativas aninhadas (instalador do Xcode CLT, próprio prompt sudo do Homebrew) podiam interferir no fluxo de entrada do script externo quando canalizadasSmbNfsPage era a única página alvo ausente do sistema de clique direito entre módulos distribuído na v1.7.0; clicar com o botão direito em um host e escolher SMB agora pré-preenche o campo de host e lança a varredura imediatamente, em negrito no menu quando a porta 445 é detectada como abertasystem_profiler (retorna <redacted> sem Location Services) para CoreWLAN como fonte de dados primária; o aplicativo agora solicita permissão de Location Services no primeiro lançamento; a página Wi-Fi mostra todas as redes com nomes reais uma vez concedidasystem_profiler para o modo de segurançaset_target + consulta automática), DNS (set_target apenas pré-preenchimento), Ping (set_target + início automático), Traceroute (set_target + início automático), MTR (set_target + início automático), Port Scanner (set_target + foco), SSH / RDP / VNC (set_target abre formulário de nova conexão pré-preenchido), Topologia (load_hosts injeta nós da varredura IP Scanner/Nmap sem reescanear — gateway detectado automaticamente, arestas desenhadas, nó de origem destacado em vermelho), Inventário de Ativos (prefill_hosts inicia varredura de credenciais diretamente nos hosts descobertos, pula a fase de descoberta ICMP)exec() no Python, NSBundle.mainBundle() resolve para o bundle Python.framework (CFBundleName = "Python") que o Qt lê durante a construção do QApplication; corrigido ao aplicar patch no infoDictionary() do bundle e renomear itens de menu nativos via AppKit antes que o menu do aplicativo seja criadoNSProcessInfo.setProcessName_ via pyobjc-framework-Cocoa (substituída pela v1.6.4)install_macos_app.sh para que o macOS associe corretamente o bundle .app ao processo em execução; adicionados setprogname e override de sys.argv[0] como fallbacks|; cadeia de fallback completa sem direitos de administrador: OS via ver, CPU via registro, RAM via systeminfo, disco via wmic → fsutil (ciente de localidade EN vírgula / FR espaço) → dir /-C/System/Volumes/Data), fallback de CPU Apple Silicon (hw.model), Synology (/volume1), Unraid (/mnt/user)sshpass, nmap e snmpget instalados via Homebrew agora são encontrados e chamados usando seu caminho absoluto; bundles .app no macOS não herdam o PATH do Homebrew (/opt/homebrew/bin, /usr/local/bin), então ferramentas previamente instaladas eram silenciosamente ignoradasgit pull && bash packaging/install_macos_app.sh a partir da raiz do repositório agora é o método de atualização documentado; o script gerencia seu próprio venv (~/.local/share/nmlinux/venv) e não requer pip ou pipx em nível de sistemafree -h substituído por free compatível com BusyBox; caminho de código macOS agora usa sw_vers para o nome do OS, fallback hw.model para CPU Apple Silicon, /System/Volumes/Data para o volume de dados do usuário APFS; volumes Synology/Unraid (/volume1, /mnt/user) detectados antes da raiz; padrão de falso sucesso df | tail -1 || … corrigido com guardas test -d; saída de lsb_release sem aspas ao redor; múltiplos conjuntos de credenciais SSH/WinRM suportados (tenta cada um em ordem por host)tftpyssl.SSLError; entradas agora mostram "… (verificando)" enquanto a verificação em segundo plano é executada e "— (inalcançável)" quando o host não pode ser alcançado+ Watch (usa host/porta atuais) ou manualmente no painel; verificação em segundo plano é executada automaticamente 2 segundos após o lançamento; entrada da barra lateral "TLS Inspector" mostra um ponto colorido: vermelho se qualquer certificado estiver expirado, laranja se qualquer certificado expirar em 30 dias; botão de reverificação no painel; lista mostra status por entrada (✓ / ⚠ / EXPIRADO) com codificação por cores_arp_entry() agora chama arp -n <ip> no macOS e analisa seu formato de saída (? (IP) at AA:BB:CC on en0) em vez de ler /proc/net/arp (somente Linux); todas as quatro colunas do scanner agora são preenchidas corretamente no macOSgetent (apenas Linux) pelo socket.gethostbyaddr() do Python para resolução reversa de DNS multiplataforma; a pesquisa de hostname agora funciona nativamente no macOS sem qualquer ferramenta extrasmbclient (requer samba via Homebrew) para smbutil view (ferramenta integrada do macOS); a listagem de compartilhamentos SMB agora funciona no macOS sem qualquer instalaçãoshowmount é integrado no macOS, mas não suporta --no-headers; a flag foi removida no macOS e a linha de cabeçalho é ignorada no parser; a listagem de exportações NFS agora funciona nativamentexfreerdp não é encontrado, recorre ao esquema de URL open rdp://; abre o Microsoft Remote Desktop (App Store) se instalado, com host, porta, usuário e domínio pré-preenchidosvncviewer não é encontrado, recorre ao esquema de URL open vnc://; abre o Compartilhamento de Tela do macOS (integrado, zero instalação necessária)-A ao comando ssh; permite saltar entre servidores sem copiar sua chave privada (PC → A → B); requer um agente SSH ativo (SSH_AUTH_SOCK); ajuda contextual atualizada em todos os 8 idiomaspip install reportlab)printer, server, smartphone, cpu, laptop)avahi-browse (opcional, executa em paralelo com o scan nmap); identifica impressoras (_ipp._tcp, PDL Printer), celulares e TVs Android (_googlecast._tcp, _androidtvremote2._tcp), Macs Apple (modelo am=Mac16,x no TXT do AirPlay), dispositivos NAS (Synology reporta model=Xserve), desktops KDE Connect; recorre ao OUI do fabricante MAC e heurísticas de hostname quando o avahi não está disponível_IS_MACOS) e ramifica para comandos nativos do macOS: route -n get default, ifconfig, scutil --dns, networksetup, system_profiler SPAirPortDataType, pfctl, netstat -ib; a elevação de privilégios usa osascript + with administrator privileges em vez de pkexec; a fonte monoespaçada usa Menlo em vez de Monospace? (descrição, exemplos de uso e comandos CLI equivalentes) agora cobre todos os 8 idiomas para cada módulo; anteriormente, JA e ZH recorriam ao inglêsnav_hint_smb_nfs e nav_hint_hosts adicionadas a todos os 7 blocos de idioma não francês~/.ssh/ (arquivo, tipo, bits, comentário, impressão digital SHA256); gera chaves Ed25519 ou RSA 4096 com frase secreta opcional (detecção de incompatibilidade, nome de arquivo automático por tipo); copia chave pública para a área de transferência; implanta em um servidor remoto via ssh-copy-id em um terminal inline com suporte a stdin para prompts de senha; exclui pares de chaves com confirmação; cria automaticamente ~/.ssh/ se ausente; i18n: fr / en / es / deopenssl s_client); funciona para certificados válidos, expirados e autoassinados; mensagens de erro amigáveis para hosts inacessíveissmbclient -L com credenciais opcionais, mostra nome do compartilhamento / tipo / comentário; aba NFS: showmount -e, mostra caminho de exportação e lista de acesso; detecta ferramentas ausentes com instruções de instalação específicas por distribuição/etc/hosts; tabela com alternância ativar/desativar, adicionar/editar/excluir entradas via diálogo; filtra por IP ou hostname; salva via pkexec cp (diálogo de autenticação polkit)~/.local/share/nmlinux/venv, instala dependências do sistema via apt, cria lançador e entrada .desktop (corrige o erro PEP 668 externally-managed-environment)vncviewer (TigerVNC); compatível com macOS ARD (autenticação DH30 tratada nativamente pelo vncviewer); senha nunca armazenada; detecta vncviewer ausente com instruções de instalação específicas por distribuiçãoxfreerdp como processo externo; senha solicitada no momento da conexão, nunca armazenada; campos: host, porta, usuário, domínio, resolução, tela cheia; detecta xfreerdp ausente com instruções de instalação específicas por distribuição (Arch / Debian / Fedora)assets/icons/; renderizados em tempo de execução via QSvgRenderer; coloridos #60a5fa; o aplicativo não requer mais nenhum tema de ícones do sistema (Breeze, Adwaita, Papirus…)main.py agora detecta automaticamente o tema de ícones GTK via gsettings e o aplica ao Qt; cadeias de fallback estendidas para Wi-Fi, Traceroute, Speed Test, Interfaces, Port Scanner, Firewall, MTR; themed_icon() agora valida que um pixmap real existe antes de aceitar um ícone de temaqt6.qtsvg a QT_PLUGIN_PATH para que o Qt possa renderizar ícones SVG; themed_icon() tenta tamanhos 22/24/16/32/48 (Breeze usa 22 px, não 24); tema forçado para breeze quando o conjunto de ícones incluído no Nix é detectado; também verifica /etc/xdg/kdeglobals para configuração KDE em todo o sistemamtr --report, analisa a saída de texto, exibe uma tabela ao vivo com Perda %, RTT Último/Médio/Melhor/Pior/Jitter por salto, codificada por cor conforme a gravidade da perda; modo contínuo; exportação CSV + TXTcurl + Cloudflare (speed.cloudflare.com): download (25 MB), upload (10 MB), ping para 1.1.1.1; até 5 execuções persistidas em JSON; gráfico de linhas histórico (Download/Upload)/etc/nftables.conf e /etc/iptables/*.rules sem root; regras ao vivo via pkexec nft list ruleset; colunas: Tabela / Cadeia / Regra / Porta / Ação / Comentário; ações codificadas por cor; filtro ao vivo? sutil; passar o mouse exibe uma dica descrevendo o que o módulo faz; separador vertical adicionado entre a barra lateral e a área de conteúdocore/theme.py com is_dark(), color_ok(), color_err(); widgets de pintura personalizados (_Graph, _MapWidget) leem a paleta no momento da pintura; todas as cores Catppuccin Mocha codificadas substituídas por papéis semânticos da paleta Qt255.255.255.0) derivada do prefixo CIDRtraceroute / fallback tracepath)getent/avahi/nmblookup; endereço MAC, fabricante (IEEE OUI 39K entradas), colunas de interface; exportação CSV/TXT atualizadaLançamento público inicial — 13 módulos: Dashboard, Interfaces, Wi-Fi, Calculadora de Sub-rede, DNS Lookup, Monitor de Ping, IP Scanner, Port Scanner, Nmap, Whois, SNMP, SNTP/NTP, SSH.
Linux — a maioria já está presente em uma instalação padrão:```bash
sudo pacman -S iproute2 networkmanager bind-tools nmap whois net-snmp iputils mtr curl
sudo apt install iproute2 network-manager dnsutils nmap whois snmp mtr-tiny curl
sudo dnf install iproute NetworkManager bind-utils nmap whois net-snmp-utils mtr curl
**macOS** — instale via [Homebrew](https://brew.sh):```bash
# Required
brew install nmap mtr curl
# Optional — enable additional modules
brew install whois # WHOIS page
brew install net-snmp # SNMP page (snmpwalk / snmpget)
brew install samba # SMB scan with credentials (smbclient)
O macOS inclui
ping,dig,traceroute,netstat,ifconfig,smbutileroutenativamente.networksetupescutilsão ferramentas integradas do macOS, sem necessidade de instalação. A consulta de fornecedores OUI no IP Scanner também não requer instalação — o banco de dadosmanufdo Wireshark é baixado automaticamente em segundo plano no primeiro uso e armazenado em cache localmente.
pip install pyte ou sudo pacman -S python-pyte)pip install tftpy ou sudo pacman -S python-tftpy) — módulo de Transferência de Arquivosyay -S nmlinux
Todas as dependências (PySide6, ptyprocess, pyte, nmcli, …) são tratadas automaticamente.
### Opção 2 — NixOS / Nix
Execute diretamente com o `flake.nix` incluído — não é necessária instalação em todo o sistema:```bash
git clone https://github.com/thongor77/nmlinux.git
cd nmlinux
nix run .
Or entre num shell de desenvolvimento:```bash nix develop python3 -m nmlinux.main
Todas as dependências Python (PySide6, ptyprocess, pyte, tftpy) e ferramentas de sistema (nmcli, nmap, freerdp, vncviewer, mtr, avahi-browse…) são fornecidas automaticamente por meio do wrapper Nix.
### Opção 4 — AppImage (qualquer distribuição Linux, sem instalação)
Baixe `NMLinux-x.y.z-x86_64.AppImage` da [última versão](https://github.com/thongor77/nmlinux/releases/latest):```bash
chmod +x NMLinux-*.AppImage
./NMLinux-*.AppImage
Nenhuma instalação necessária — Python, Qt e todos os módulos NMLinux estão agrupados em um único arquivo.
Funciona em qualquer Linux x86_64 com glibc 2.17+ (Ubuntu 16.04+, Fedora 26+, Arch, Mint, etc.).
As ferramentas de rede do sistema (
nmap,whois,mtr…) não estão agrupadas — instale-as via seu gerenciador de pacotes para que os módulos correspondentes funcionem. Consulte Requisitos abaixo.
Forma mais rápida — bootstrap de uma linha. Funciona em um Mac completamente limpo: instala as Xcode Command Line Tools, Homebrew, todas as ferramentas do sistema e, em seguida, o próprio NMLinux. Seguro para reexecutar (atualiza em vez de reinstalar):```bash curl -fsSL https://raw.githubusercontent.com/thongor77/nmlinux/main/packaging/bootstrap_macos.sh -o /tmp/bootstrap_macos.sh && bash /tmp/bootstrap_macos.sh
Instale em todo o sistema (`/Applications`) em vez de `~/Applications`:```bash
curl -fsSL https://raw.githubusercontent.com/thongor77/nmlinux/main/packaging/bootstrap_macos.sh -o /tmp/bootstrap_macos.sh && bash /tmp/bootstrap_macos.sh --system
Sem conta de desenvolvedor Apple ou notarização paga envolvida — é o mesmo
install_macos_app.shde código aberto por baixo dos panos, apenas baixado e executado para você. O script é bash simples e legível; fique à vontade para abrir/tmp/bootstrap_macos.she lê-lo antes de executar, ou confira-o diretamente aqui:packaging/bootstrap_macos.sh.Baixar-e-executar (em vez de canalizar diretamente para
bash) é intencional: em um Mac novo, o script aciona etapas interativas aninhadas (instalador das Xcode Command Line Tools, o próprio instalador do Homebrew pedindo sua senha desudo) que leem do terminal — canalizar o script diretamente parabashpode fazer esses prompts aninhados interferirem no fluxo de entrada do próprio script e interrompê-lo no meio do caminho. Executar a partir de um arquivo baixado evita isso completamente.
Instalação manual — se você preferir executar cada etapa você mesmo, ou já tiver o Homebrew:```bash
brew install nmap mtr curl
git clone https://github.com/thongor77/nmlinux.git cd nmlinux bash packaging/install_macos_app.sh
Para atualizar: `git pull && bash packaging/install_macos_app.sh`
Para desinstalar: `bash packaging/uninstall_macos.sh`
Para instalar em todo o sistema (`/Applications`): `bash packaging/install_macos_app.sh --system`
O script instala os seguintes pacotes Python no venv automaticamente:
- `PySide6`, `ptyprocess`, `pyte`, `tftpy`
- `pyobjc-framework-Cocoa` — barra de menus do macOS, diálogos nativos
- `pyobjc-framework-CoreWLAN` — varredura de SSID Wi-Fi
- `pyobjc-framework-CoreLocation` — permissão de Serviços de Localização para nomes de Wi-Fi
**Wi-Fi no macOS 26 (Tahoe):** no primeiro lançamento, o macOS solicitará a permissão de Serviços de Localização — conceda-a para exibir os nomes das redes Wi-Fi. A permissão aparece em *Ajustes do Sistema › Privacidade e Segurança › Serviços de Localização*.
> A maioria dos módulos funciona no macOS sem modificação. O RDP usa como fallback `open rdp://` (Microsoft Remote Desktop), o VNC usa como fallback `open vnc://` (Compartilhamento de Tela integrado). O Gerenciador de Conexões tem funcionalidade reduzida no macOS (`nmcli` não está disponível).
### Opção 6 — Debian / Ubuntu / Linux Mint (script de instalação)
> **Nota para usuários de Linux Mint / Ubuntu:** o `pip install` é bloqueado em todo o sistema no Python 3.12+ (PEP 668 — `externally-managed-environment`). Use o script de instalação fornecido — ele cria um ambiente virtual automaticamente e instala uma entrada `.desktop`.```bash
git clone https://github.com/thongor77/nmlinux.git
cd nmlinux
bash install.sh
O script irá:
apt (libgl1, python3-venv, freerdp, tigervnc…)~/.local/share/nmlinux/venv~/.local/bin/nmlinux.desktop para que o NMLinux apareça no seu menu de aplicativosApós a instalação, execute nmlinux a partir de um terminal ou inicie-o pelo menu de aplicativos.
Baixe o .whl da última versão e instale-o:```bash
pip install nmlinux-1.5.3-py3-none-any.whl
sudo apt install libgl1 libglib2.0-0 libdbus-1-3 freerdp2-x11 tigervnc-viewer
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 para Ubuntu 26.04+:** o `pipx` requer que as bibliotecas do sistema (libGL, etc.) sejam instaladas primeiro — os comandos acima cobrem isso. Se a instalação via `pipx install` falhar devido a um erro de build do PySide6, use a **Opção 4** (script de instalação) em vez disso, que lida com tudo automaticamente.
### Opção 8 — A partir do código-fonte (Arch / Fedora / macOS)```bash
git clone https://github.com/thongor77/nmlinux.git
cd nmlinux
pip install PySide6 ptyprocess pyte tftpy
python3 -m nmlinux.main
Copie o ficheiro .desktop para fazer o NMLinux aparecer no seu lançador de aplicações:```bash
cp data/nmlinux.desktop ~/.local/share/applications/
update-desktop-database ~/.local/share/applications/
Então edite o caminho `Exec=` no arquivo, se necessário.
---
## Execução```bash
./nmlinux.sh
# or, after pip install:
nmlinux
# or directly:
python3 -m nmlinux.main
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
---
## Compatibilidade com ambientes de desktop
Desde a v1.2.7, o NMLinux usa 21 ícones SVG do [Lucide](https://lucide.dev) incluídos no pacote, renderizados em tempo de execução via `QSvgRenderer`. O aplicativo não depende mais de nenhum tema de ícones do sistema (Breeze, Adwaita, Papirus…) e é exibido corretamente no KDE, GNOME, XFCE e outros. O estilo Qt se adapta automaticamente ao desktop em execução.
---
## Limitações
### Linux
Suporte completo — todos os 29 módulos disponíveis.
### macOS
A maioria dos módulos funciona de imediato, pois depende de ferramentas disponíveis em ambas as plataformas (`ssh`, `dig`, `ping`, `curl`, `nmap`, `openssl`…).
**9 módulos exigiram adaptação explícita para macOS** (caminhos de código duplos que detectam a plataforma na inicialização): Dashboard, Interfaces, Wi-Fi, Topologia, Largura de banda, Firewall, Gerenciador de conexões, Arquivo de hosts, MTR — estes usam comandos nativos do macOS (`ifconfig`, `networksetup`, `scutil`, `pfctl`, `system_profiler`…) em vez de seus equivalentes no Linux.
**Módulos com suporte limitado ou inexistente no macOS:**
| Módulo | Status | Observações |
|--------|--------|-------|
| **RDP** | ✓ macOS | Recorre a `open rdp://` → Microsoft Remote Desktop (App Store) |
| **VNC** | ✓ macOS | Recorre a `open vnc://` → Compartilhamento de tela (integrado, zero instalação) |
| **IP Scanner** | ✓ macOS | Usa `socket.gethostbyaddr()` — Python nativo, sem ferramenta extra |
| **SMB** | ✓ macOS | Usa `smbutil view` (integrado) em vez de `smbclient` |
| **NFS** | ✓ macOS | `showmount` integrado; análise de cabeçalho adaptada |
| **Gerenciador de conexões** | ⚠ Reduzido | Editar/excluir exige `nmcli` (somente Linux); a visualização de lista funciona |
### Geral
- Sem integração com root/polkit — ferramentas que exigem privilégios elevados (alguns modos do Nmap, sockets brutos) devem ser executadas com `sudo`; no macOS, a elevação de privilégios usa `osascript` + `administrator privileges`
- O encaminhamento do agente SSH exige um agente SSH ativo (`SSH_AUTH_SOCK`); no macOS, isso é tratado automaticamente pelo sistema, sem necessidade de configuração manual
---
## Créditos e agradecimentos
- **[Anthropic](https://www.anthropic.com)** — Claude Code, o assistente de IA usado para construir este projeto
- O autor, pela visão, testes e direção
---
## Apoie o projeto
Se o NMLinux é útil para você, considere apoiar seu desenvolvimento:
- **PayPal** — [Doe via PayPal](https://www.paypal.com/donate/?business=JFQGY7NU3ANCN&no_recurring=0&item_name=Every+donation%2C+no+matter+how+small%2C+helps+me+keep+this+project+alive.+Thank+you%21%0A¤cy_code=EUR)
- **Bitcoin** — `bc1qspe0tky7552qas72wgn8w9dswr0dxlv24w39t6ztjqk3nz6kc5tqv753a4`
---
## Licença
GPL-2.0 — consulte [LICENSE](https://github.com/thongor77/nmlinux/blob/main/LICENSE).
Este projeto é uma reimplementação independente. Nenhum código do NETworkManager foi usado ou traduzido.
flatpak-spawn --hostTIOCSCTTYEPERMscript| Módulo | Descrição |
|---|
| Dashboard | Informações da máquina local, gateway, IP público, geolocalização, resolvedores DNS |
| Gerenciador de Conexões | Perfis NetworkManager via nmcli: listar, filtrar, conectar/desconectar/editar/excluir |
| Interfaces | Tabela de interfaces de rede com detalhes por interface (ip + nmcli) |
| Wi-Fi | Redes disponíveis, barras de sinal, segurança, rede conectada destacada |
| Calculadora de Sub-rede | Faixa de rede/broadcast/hosts a partir de CIDR, tabela de hosts até 4096 entradas |
| DNS Lookup | Consulta baseada em dig para A, AAAA, MX, TXT, NS, CNAME, PTR, SOA, ANY |
| Monitor de Ping | Ping contínuo para múltiplos hosts, estatísticas de RTT, % de perda de pacotes |
| IP Scanner | Scan de ping CIDR/faixa, 50 threads, hostname (DNS/mDNS/NetBIOS), endereço MAC, fabricante (OUI), interface, exportação CSV + TXT |
| Port Scanner | Scan de conexão TCP, 200 threads, predefinições de serviços, exportação CSV + TXT |
| Nmap | 7 modos de scan, análise de saída XML, tabela Host/Porta/Protocolo/Estado/Serviço, exportação CSV + TXT |
| Whois | Saída whois bruta em monoespaçada |
| SNMP | snmpwalk/snmpget, v1/v2c, 10 predefinições de OID, tabela de resultados |
| SNTP / NTP | Cliente UDP RFC 4330 em Python puro, offset/delay/stratum/referência |
| SSH | Terminal PTY incorporado (pyte/VT100), conexões salvas (JSON), autenticação por chave, scrollback |
| Área de Trabalho Remota | Perfis de conexão RDP (grupos/subgrupos); inicia xfreerdp; senha nunca armazenada |
| VNC | Perfis de conexão VNC (grupos/subgrupos); inicia vncviewer (TigerVNC); compatível com macOS ARD; senha nunca armazenada |
| Gerenciador de Chaves SSH | Lista pares de chaves em ~/.ssh/ (tipo, bits, impressão digital); gera Ed25519/RSA 4096; copia chave pública; implanta no servidor via ssh-copy-id; exclui pares com confirmação |
| Inspetor TLS | Detalhes do certificado: CN, SANs, emissor, validade + contagem regressiva de expiração, serial, protocolo, cifra, cadeia; Watchlist com monitor de expiração em segundo plano e ponto de cor na barra lateral |
| SMB / NFS | Lista compartilhamentos SMB (smbclient) e exportações NFS (showmount) de qualquer servidor ou NAS; credenciais opcionais para SMB |
| Arquivo Hosts | Visualizar/editar /etc/hosts: adicionar, excluir, alternar entradas; filtrar; salvar via pkexec |
| Traceroute Visual | Rota salto a salto em um mapa-múndi, geolocalização ao vivo (ip-api.com), zoom e pan, exportação CSV + TXT |
| MTR | My Traceroute incorporado: perda %, RTT Último/Médio/Melhor/Pior/Jitter por salto, codificado por cor, exportação CSV + TXT |
| Visualizador de Firewall | Conjunto de regras nftables + iptables/ip6tables somente leitura (sem root); ao vivo via pkexec; filtrar por tabela/cadeia/ação |
| Speed Test | Download/upload/ping via Cloudflare; nenhuma ferramenta externa além de curl; gráfico de histórico (últimas 5 execuções) |
| Largura de Banda | Throughput por interface em tempo real: gráfico deslizante de 60s, velocidades ao vivo, totais da sessão, pico |
| Wake on LAN | Pacote mágico em Python puro (broadcast UDP), livro de hosts persistente, nenhuma ferramenta externa necessária |
| Mapa de Topologia | Descobre automaticamente dispositivos LAN via nmap -sn; gráfico interativo com nós arrastáveis, zoom/pan, painel de detalhes |
| Configurações | Seleção de idioma (FR / EN / ES / DE / IT / PT / JA / ZH), persistida; reinicialização necessária após alteração |
| Paleta de Comandos | Sobreposição Ctrl+P: busca difusa em todos os 29 módulos por nome ou palavra-chave |
| Transferência de Arquivos | Servidor TFTP ou HTTP sob demanda; porta e diretório raiz configuráveis; IPs locais como botões de cópia; tabela de log ao vivo (nome do arquivo, IP do cliente, direção ↑/↓, tamanho); listagem de diretório HTTP + GET/POST/PUT; TFTP GET + PUT; porta 69 solicita pkexec |
| Exportar | Arquivo → Exportar Relatório de Rede (JSON/Markdown/Texto/PDF); exportação por módulo em Interfaces, DNS, Firewall, SSH, Conexões |
| Ferramenta | Recurso | Linux | macOS |
|---|
xfreerdp / xfreerdp3 | Área de Trabalho Remota (RDP) | Arch: freerdp · Ubuntu ≤24.04: freerdp2-x11 · Ubuntu 26.04+: freerdp3-x11 | opcional — usa como fallback o Microsoft Remote Desktop (open rdp://) |
vncviewer | VNC | Arch: tigervnc · Debian: tigervnc-viewer | opcional — usa como fallback o Compartilhamento de Tela do macOS (open vnc://, integrado) |
nm-connection-editor | Editar conexões no Gerenciador de Conexões | Arch: nm-connection-editor | — (abre as Preferências do Sistema) |
traceroute | Alternativa ao Traceroute (tracepath usado por padrão) | Arch: traceroute | integrado |
mount.cifs (cifs-utils) | Montar compartilhamentos SMB pelo menu de contexto | Arch/Debian: cifs-utils | integrado (mount_smbfs) |
iperf3 | Teste de Velocidade — aba LAN | Arch: iperf3 · Debian/Ubuntu: iperf3 | brew install iperf3 |