
nmlinux v1.7.11
Toolkit de rede unificado para Linux — Python 3 + PySide6
NMLinux · v1.7.11
Um kit de ferramentas de rede unificado para Linux e macOS — inspecione, conecte, diagnostique.
NMLinux é uma interface gráfica única e unificada que reúne 29 módulos de rede em uma 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 nenhuma dependência externa 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 de seu autor.
Processo de desenvolvimento
O NMLinux é construído com assistência de IA — especificamente Claude Code — e isso não está escondido em lugar nenhum deste repositório. Quase todo projeto de software sério hoje usa IA em algum lugar do seu fluxo de trabalho, diga isso ou não. Portanto, "a IA esteve envolvida?" não é a pergunta interessante. A pergunta interessante é: algo detecta quando a IA comete um erro?
Eis o que faz isso, se você preferir verificar em vez de confiar na minha palavra:
- 162 testes —
pytest tests/ -v. Lógica pura mais um punhado de testes reais de widgets Qt (menus, tabelas), sem mocks que escondam as partes interessantes. docs/Decisions-Techniques.md— todas as decisões técnicas não óbvias, as alternativas rejeitadas e os bugs (incluindo os introduzidos por IA) encontrados e corrigidos, com a justificativa registrada.docs/Architecture.mdedocs/Carte-des-Modules.md— a estrutura real do código, mantida em sincronia com o que é entregue.- Uma verificação de consistência i18n executada antes de cada lançamento para detectar chaves de tradução ausentes nos 8 idiomas suportados.
Nada disso existe porque não se pode confiar na IA. Existe porque nada deveria ser lançado sem um processo que o verifique — inclusive código escrito à mão. 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 vergonhoso — abra uma issue.
Comunidade
As discussões do GitHub estão abertas — compartilhe feedback, relate ideias, faça perguntas ou apenas diga olá. O autor tem mais de 30 anos em infraestrutura e operações, e criou esta ferramenta porque software bom, gratuito e simples também deveria existir para Linux.
Capturas de tela
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)
| Painel | Topologia |
|---|---|
![]() | ![]() |
| Traceroute | Wi-Fi |
|---|---|
![]() | ![]() |
macOS
| Painel | Traceroute |
|---|---|
![]() | ![]() |
Histórico de alterações
v1.7.11 — 2026-08-03
- Empacotamento Flatpak (KDE Linux): um manifesto de build local em
packaging/flatpak/tem como alvo o KDE Linux e outras distribuições somente Flatpak. As ferramentas CLI do host que o nmlinux invoca (nmcli,pkexec,mount.cifs,ssh,nmap, …) são integradas via shimsflatpak-spawn --hostnoPATH, em vez de cada uma ser isolada separadamente; o PySide6 vem doio.qt.PySide.BaseAppdo Flathub, em vez do wheel do PyPI. Não publicado no Flathub — um único pacote.flatpaké gerado compackaging/flatpak/build-bundle.she anexado a cada lançamento, da mesma forma que o AppImage já é.
v1.7.10 — 2026-08-03
- Terminal SSH — correção: corrigida uma condição de corrida em que o PTY podia iniciar com o tamanho errado (padrão 24×80) se o tamanho real do widget do terminal ainda não fosse conhecido quando a sessão iniciava, descartando silenciosamente a solicitação de redimensionamento. Isso dessincronizava aplicativos remotos em tela cheia (por exemplo, Claude Code CLI, htop, vim) do tamanho real da janela, causando texto obsoleto/residual na parte inferior da tela que só era limpo conforme nova saída passava. Reportado pelo usuário; reproduzido com uma sessão interativa real.
v1.7.9 — 2026-08-02
- Terminal SSH — copiar/colar: selecione texto com o mouse (clique e arraste, destacado), copie com
Ctrl+Shift+Cou pelo menu do botão direito; cole comCtrl+Shift+V(já existente). Copiar era anteriormente impossível — não havia seleção de texto alguma. - Terminal SSH — múltiplas sessões simultâneas: a página SSH agora abre cada conexão em sua própria aba, em vez de uma única sessão compartilhada. Reconectar a uma conexão salva — até a mesma duas vezes — costumava encerrar a sessão ativa sem abrir um substituto funcional; agora cada ação de conectar abre uma nova aba independente.
v1.7.8 — 2026-07-14
- Teste de velocidade — nova aba LAN (iperf3): além do teste de velocidade de internet já existente, uma nova aba executa testes
iperf3somente cliente contra uma lista pública de servidores incluída (26 países) ou um servidor personalizado salvo (por exemplo, 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 #6. - Nova dependência opcional:
iperf3— instale para habilitar a aba LAN; caso contrário, a aba mostra um aviso e permanece desabilitada.
v1.7.6 — 2026-07-05
- Inventário de Ativos — atualização via botão direito: clique com o botão direito em uma ou mais linhas já escaneadas (seleção múltipla suportada) e escolha "Atualizar selecionados" para reescaneá-las no lugar, em vez de executar novamente uma varredura completa de rede.
- Inventário de Ativos — feedback de falha de autenticação SSH: um login SSH rejeitado agora mostra "Falha na autenticação SSH" em vez de falhar silenciosamente, sem perder o hostname/SO de base detectados pelo Nmap — confirmado contra um NAS Synology real, onde o Auto Block do DSM rejeitou uma senha correta depois que outras configurações de credenciais foram tentadas primeiro.
v1.7.5 — 2026-07-04
- Monitor de ping — diretório de alvos salvos: um novo painel à esquerda permite salvar alvos de ping (nome, host, intervalo) em uma lista persistente, para que os hosts monitorados sobrevivam a uma reinicialização do aplicativo em vez de precisarem ser digitados novamente. Um botão ★ em cada linha monitorada ativamente salva esse host no diretório a qualquer momento da sessão — sem necessidade de planejar com antecedência antes de o aplicativo fechar inesperadamente.
- Monitor de ping — "Iniciar monitoramento": selecione um alvo salvo e comece a monitorá-lo com um clique, reutilizando o intervalo salvo.
v1.7.4 — 2026-07-04
- Inventário de Ativos — corrigidos resultados de varredura inconsistentes: a verificação de atividade enviava um único ping com timeout de 1 segundo e sem repetição, o que podia descartar um dispositivo real sob a carga concorrente do próprio scanner (até 40 hosts sondados ao mesmo tempo) ou quando um host Wi-Fi ficava brevemente adormecido entre beacons — confirmado ao vivo contra uma sub-rede real que retornava contagens de dispositivos diferentes em execuções repetidas do mesmo intervalo. A verificação agora repete o ping antes de recorrer à sondagem de porta TCP.
- Inventário de Ativos — novo botão "Atualizar vazios": após uma varredura, reescaneie apenas os IPs que não retornaram dados, em vez de todo o intervalo novamente; hosts recém-encontrados são mesclados aos resultados existentes.
v1.7.3 — 2026-07-03
- SMB — montar compartilhamentos pelo menu do botão direito: clique com o botão direito em um compartilhamento na aba SMB e escolha Montar/Desmontar para montá-lo em um caminho local estável (
~/mnt/<host>_<share>), utilizável pelo terminal e por qualquer outro aplicativo — não é uma visão de navegação temporária. Somente durante a sessão (sem persistência via fstab/systemd), credenciais reutilizadas dos campos existentes de usuário/senha. O Linux usapkexec mount -t cifscom um arquivo de credenciais de permissões restritas (nunca exposto viaps); o macOS usamount_smbfsdiretamente. Tenta automaticamente novamente com um dialeto SMB mais antigo (vers=2.0) quando um servidor rejeita a negociação padrão (comum em NAS mais antigos) — ambas as tentativas ocorrem sob um único prompt de autenticação por meio de um processo auxiliar dedicado. - Nova dependência opcional:
cifs-utils(Linux) para montagem SMB; integrado ao macOS.
v1.7.2 — 2026-07-03
- Instalação no macOS — corrigidos dois bugs de bootstrap encontrados em um Mac limpo:
bootstrap_macos.shnão força maisNONINTERACTIVE=1no instalador do Homebrew, que abortava imediatamente em qualquer conta de administrador nova em vez de pedir a senha do sudo; o one-liner documentado agora baixa o script primeiro, em vez de canalizá-lo diretamente parabash, pois etapas interativas aninhadas (instalador do Xcode CLT, próprio prompt de sudo do Homebrew) podiam interferir no fluxo de entrada do script externo quando canalizado. - Menu universal de botão direito — SMB adicionado:
SmbNfsPageera a única página alvo ausente do sistema de botão direito entre módulos lançado na v1.7.0; clicar com o botão direito em um host e escolher SMB agora preenche o campo do host e inicia a varredura imediatamente, em negrito no menu quando a porta 445 é detectada como aberta. - i18n — strings restantes do Painel traduzidas: o rótulo de latência do gateway, o título do cartão TLS Watchlist e sua linha de status ainda estavam codificados em francês; agora traduzidos nos 8 idiomas de interface.
v1.7.1 — 2026-07-02
- macOS 26 (Tahoe) — correções de SSID Wi-Fi: mudou de
system_profiler(retorna<redacted>sem os Serviços de Localização) para CoreWLAN como fonte de dados principal; o aplicativo agora solicita permissão de Serviços de Localização no primeiro início; a página Wi-Fi mostra todas as redes com nomes reais após a concessão. - macOS — Gerenciador de Conexões: o SSID conectado agora é lido via CoreWLAN, com
system_profilerpara o modo de segurança. - macOS — SMB: mensagem clara de "autenticação necessária" quando o NAS exige credenciais; corrigido aviso espúrio do smb.conf vindo do smbclient do Homebrew.
- macOS — Corrigida possível falha ao sair após o primeiro diálogo de permissão dos Serviços de Localização.
v1.7.0 — 2026-07-02
- Menu de contexto universal de botão direito em todas as tabelas que contêm IPs ou hostnames — navegue diretamente entre módulos sem copiar e colar: clique com o botão direito em qualquer host descoberto e escolha Ping, Escanear portas, Whois, DNS, Traceroute, MTR, SSH, RDP, VNC, Ver na Topologia ou Adicionar ao Inventário. Os itens de menu SSH/RDP/VNC aparecem em negrito quando a porta correspondente é detectada como aberta. Os rótulos são totalmente traduzidos nos 8 idiomas de interface.
- Páginas de origem (emitem ações de botão direito): Scanner de IP, Nmap, Ping, Scanner de portas, Traceroute, MTR, Topologia (botão direito no nó)
- Páginas de destino (recebem o host e pré-preenchem): Whois (
set_target+ consulta automática), DNS (set_targetsomente pré-preenchimento), Ping (set_target+ início automático), Traceroute (set_target+ início automático), MTR (set_target+ início automático), Scanner de portas (set_target+ foco), SSH / RDP / VNC (set_targetabre formulário de nova conexão pré-preenchido), Topologia (load_hostsinjeta nós da varredura Scanner de IP/Nmap sem reescanear — gateway detectado automaticamente, arestas desenhadas, nó de origem destacado em vermelho), Inventário de Ativos (prefill_hostsinicia varredura de credenciais diretamente nos hosts descobertos, pula a fase de descoberta ICMP) - Painel — gráfico de ping do gateway: sparkline de latência ao vivo atualizado a cada 2 segundos; com código de cores (verde <20 ms / laranja 20–100 ms / vermelho >100 ms / timeout vermelho)
- Painel — resumo da TLS Watchlist: o cartão de status no Painel reflete automaticamente o estado da TLS Watchlist (OK / expirando / alerta) sem nova consulta
- Painel — redimensionamento do mapa geográfico: o mapa-múndi agora se expande horizontalmente quando a janela é redimensionada
v1.6.4 — 2026-06-28
- macOS: a barra de menu agora mostra NMLinux em vez de Python — causa raiz: após
exec()para Python,NSBundle.mainBundle()resolve para o bundlePython.framework(CFBundleName = "Python") que o Qt lê durante a construção do QApplication; corrigido aplicando patch noinfoDictionary()do bundle e renomeando os itens de menu nativos via AppKit antes de o menu do aplicativo ser criado.
v1.6.3 — 2026-06-28
- macOS: primeira tentativa de corrigir a barra de menu usando
NSProcessInfo.setProcessName_viapyobjc-framework-Cocoa(substituída pela v1.6.4).
v1.6.2 — 2026-06-28
- macOS: substituiu o script de inicialização bash por um stub C compilado em
install_macos_app.shpara que o macOS associe corretamente o bundle.appao processo em execução; adicionousetprognamee a substituição desys.argv[0]como fallbacks.
v1.6.1 — 2026-06-25
- Terminal SSH — corrigido eco remoto: teclas digitadas no terminal SSH embutido eram enviadas ao shell remoto, mas nunca ecoadas de volta (o teclado parecia "morto" após o login). O nmlinux forçava o eco do PTY local a ficar desligado, e o ssh propagava esse "sem eco" ao pty remoto por meio de seus modos de terminal (pty-req), fazendo com que o shell remoto parasse de ecoar a entrada. Reproduzido em uma VM Ubuntu 26.04 limpa (o OpenSSH recente aplica esses modos fielmente). O terminal agora mantém o PTY em modo normal e deixa o ssh gerenciar o eco, como em emuladores de terminal reais.
v1.6.0 — 2026-06-24
- Inventário de Ativos — WinRM Windows (completo): detecção de host via sondagem de porta TCP quando o ICMP é bloqueado pelo Firewall do Windows; o PowerShell agora usa caminho absoluto completo + EncodedCommand (base64) para impedir que o cmd.exe interprete pipes
|; cadeia completa de fallback sem direitos de administrador: SO viaver, CPU via registro, RAM viasysteminfo, disco viawmic→fsutil(sensível a locale, EN vírgula / FR espaço) →dir /-C. - Inventário de Ativos — SSH multi-credenciais: suporte a múltiplos conjuntos de credenciais SSH; disco do macOS corrigido (
/System/Volumes/Data), fallback de CPU Apple Silicon (hw.model), Synology (/volume1), Unraid (/mnt/user). - Correções de bugs: erros do WinRM agora exibidos na tabela em vez de fallback silencioso; detecção de host WinRM/SNMP não é mais bloqueada pela presença de credenciais SSH; timeout do pywinrm corrigido.
v1.5.3 — 2026-06-24
- macOS .app — detecção de ferramentas Homebrew:
sshpass,nmapesnmpgetinstalados via Homebrew agora são encontrados e chamados usando seu caminho absoluto; bundles.appno macOS não herdam o PATH do Homebrew (/opt/homebrew/bin,/usr/local/bin), então ferramentas instaladas anteriormente eram silenciosamente ignoradas. - Caminho de atualização no macOS: executar
git pull && bash packaging/install_macos_app.sha 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 requerpipoupipxa nível de sistema.
v1.5.2 — 2026-06-24
- Inventário de Ativos — novo módulo (29º); escaneia um intervalo CIDR e coleta SO, CPU, RAM, disco e uptime de cada host via SSH, WinRM, SNMP ou Nmap; suporta múltiplos conjuntos de credenciais por protocolo (tenta cada um em ordem); política de retenção zero: credenciais nunca gravadas em disco, limpas da memória após a varredura; exporta resultados como JSON, CSV ou Markdown; mapa geo animado adicionado à seção de Geolocalização de IP do Painel.
- Correções na coleta SSH: corrigido erro de aspas no comando awk do disco;
free -hsubstituído porfreecompatível com BusyBox; o caminho de código do macOS agora usasw_verspara o nome do SO, fallbackhw.modelpara CPU Apple Silicon,/System/Volumes/Datapara o volume de dados do usuário APFS; volumes Synology/Unraid (/volume1,/mnt/user) detectados antes da raiz; padrão de falso sucessodf | tail -1 || …corrigido com guardastest -d; saída dolsb_releaseremovida das aspas circundantes; suporte a múltiplos conjuntos de credenciais SSH/WinRM (tenta cada um em ordem por host).
v1.5.0 — 2026-06-17
- Servidor de Transferência de Arquivos — novo módulo para iniciar/parar um servidor TFTP ou HTTP leve diretamente do aplicativo; caso de uso clássico: backup e restauração de configurações de roteadores, switches ou impressoras; apenas um servidor ativo por vez (TFTP ou HTTP), porta e diretório raiz configuráveis, IPs locais exibidos como botões de copiar para a área de transferência; HTTP inclui listagem de diretório (navegável a partir de qualquer navegador na LAN), GET (download) e POST/PUT (upload); TFTP suporta GET e PUT (bidirecional), a porta 69 exige root — o aplicativo mostra um botão "Iniciar como root (pkexec)" em erro de permissão; tabela de log de transferência ao vivo (timestamp, nome do arquivo, IP do cliente, direção ↑/↓, tamanho); proteção contra travessia de diretórios; 8 idiomas de interface; nova dependência:
tftpy.
v1.4.3 — 2026-06-14
- Correções na TLS Watchlist: certificados autoassinados e não confiáveis agora são exibidos corretamente como "⚠ Certificado inválido / não confiável" (laranja) em vez de verde; a captura de exceções SSL foi ampliada para cobrir todas as subclasses de
ssl.SSLError; as entradas agora mostram "… (verificando)" enquanto a verificação em segundo plano é executada e "— (inalcançável)" quando o host não pode ser alcançado.
v1.4.2 — 2026-06-14
- TLS Watchlist — lista persistente de hostnames para monitorar a expiração de certificados; adicione hosts com
+ Watch(usa host/porta atuais) ou manualmente no painel; a verificação em segundo plano é executada automaticamente 2 segundos após o início; a entrada "TLS Inspector" na barra lateral mostra um ponto colorido: vermelho se algum certificado expirou, laranja se algum certificado expira em até 30 dias; botão de reverificação no painel; a lista mostra o status por entrada (✓ / ⚠ / EXPIRED) com código de cores.
v1.4.1 — 2026-06-14
- macOS — Scanner de IP: corrigidas a consulta de endereço MAC, fabricante e interface no macOS;
_arp_entry()agora chamaarp -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(apenas Linux); todas as quatro colunas do scanner agora são preenchidas corretamente no macOS. - Ajuda do VNC: adicionada uma nota nos 8 idiomas esclarecendo que o Linux não tem servidor VNC por padrão e listando opções comuns para instalar (x11vnc, tigervnc-server, wayvnc).
v1.4.0 — 2026-06-14
- macOS — Scanner de IP: substituído
getent(apenas Linux) pelosocket.gethostbyaddr()do Python para resolução reversa de DNS multiplataforma; a consulta de hostname agora funciona nativamente no macOS sem nenhuma ferramenta extra. - macOS — Navegador SMB: mudou de
smbclient(exige samba do Homebrew) parasmbutil view(ferramenta integrada do macOS); a listagem de compartilhamentos SMB agora funciona no macOS sem nenhuma instalação. - macOS — Navegador NFS:
showmounté 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 nativamente. - macOS — RDP: quando
xfreerdpnão é encontrado, usa como fallback o esquema de URLopen rdp://; abre o Microsoft Remote Desktop (App Store) se instalado, com host, porta, usuário e domínio pré-preenchidos. - macOS — VNC: quando
vncviewernão é encontrado, usa como fallback o esquema de URLopen vnc://; abre o Compartilhamento de Tela do macOS (integrado, zero instalação necessária).
v1.3.9 — 2026-06-13
- Encaminhamento de agente SSH — nova caixa de seleção "Agent forwarding" no formulário de conexão SSH; adiciona
-Aao comandossh; permite saltar entre servidores sem copiar sua chave privada (PC → A → B); exige um agente SSH ativo (SSH_AUTH_SOCK); ajuda contextual atualizada nos 8 idiomas.
v1.3.8 — 2026-06-13- Paleta de Comandos (Ctrl+P) — navegação instantânea por teclado para qualquer um dos 27 módulos; pesquisa difusa por nome e palavras-chave (por exemplo, "firewall", "tls", "ssh key", "scan"); setas para cima/baixo + Enter ou clique único para navegar; abre com Ctrl+P de qualquer lugar do aplicativo
- Gerenciador de Exportação — exporta um instantâneo completo da rede (interfaces, rotas, resolvedores DNS) em Arquivo → Exportar Relatório de Rede… em JSON, Markdown, texto simples ou PDF (opcional:
pip install reportlab) - Botões de exportação por módulo — botões Exportar adicionados às páginas Interfaces, DNS, Firewall, Conexões SSH e Gerenciador de Conexões; cada página exporta seus dados atuais no formato escolhido, com atualização em tempo real da extensão do nome do arquivo quando o filtro de formato é alterado
v1.3.6 — 2026-06-12
- Topologia — ícones de dispositivos — cada nó agora exibe um ícone SVG Lucide correspondente ao tipo de dispositivo (roteador/wifi, computador/notebook, impressora, NAS/servidor, smartphone, switch de rede, Raspberry Pi) em vez de um círculo genérico; 5 novos ícones SVG incluídos (
printer,server,smartphone,cpu,laptop) - Topologia — detecção mDNS — o tipo de dispositivo é detectado via
avahi-browse(opcional, executa em paralelo com a varredura nmap); identifica impressoras (_ipp._tcp,PDL Printer), celulares e TVs Android (_googlecast._tcp,_androidtvremote2._tcp), Macs da Apple (am=Mac16,xmodelo no TXT do AirPlay), dispositivos NAS (Synology relatamodel=Xserve), desktops KDE Connect; recorre à OUI do fornecedor MAC e heurísticas de hostname quando avahi não está disponível - Topologia — painel de detalhes mostra a classe de dispositivo detectada (Impressora, Smartphone, NAS…) em vez do rótulo genérico "Host"; i18n em todos os 8 idiomas
v1.3.5 — 2026-06-06
- Compatibilidade com macOS — todos os 9 módulos de rede agora funcionam no macOS sem quebrar o comportamento no Linux; cada módulo detecta a plataforma na inicialização (
_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 usaosascript+with administrator privilegesem vez depkexec; a fonte monoespaçada usaMenloem vez deMonospace - Módulos com caminhos duplos Linux/macOS: Painel, Interfaces, Wi-Fi, Topologia, Largura de Banda, Firewall (pf.conf + pfctl), Gerenciador de Conexões, Arquivo Hosts, MTR
- Módulos inalterados (ferramentas idênticas em ambas as plataformas): DNS, Nmap Scan, SNMP, Whois
v1.3.2 — 2026-06-06
- i18n estendido para 8 idiomas — adicionados Italiano, Português, 日本語 (japonês) e 中文 (chinês simplificado); toda a interface (todos os 27 módulos, ~720 chaves de tradução) agora está disponível em FR / EN / ES / DE / IT / PT / JA / ZH; um aviso de reinicialização aparece após alterar o idioma em Configurações
- Ajuda contextual em 8 idiomas — o painel de selo
?(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ês - Correção de bug — dicas de navegação de SMB/NFS e Arquivo Hosts estavam sendo exibidas em francês independentemente do idioma selecionado; as chaves ausentes
nav_hint_smb_nfsenav_hint_hostsforam adicionadas a todos os 7 blocos de idiomas não franceses
v1.3.1 — 2026-06-05
- Gerenciador de Chaves SSH — lista todos os pares de chaves em
~/.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 automático de arquivo por tipo); copia a chave pública para a área de transferência; implanta em um servidor remoto viassh-copy-idem um terminal embutido com suporte a stdin para prompts de senha; exclui pares de chaves com confirmação; cria~/.ssh/automaticamente se estiver ausente; i18n: fr / en / es / de
v1.3.0 — 2026-06-03
- Inspetor TLS / SSL — inspeciona o certificado de qualquer servidor: CN do assunto, SANs, emissor, datas de validade (codificadas por cores: verde / laranja < 30 dias / vermelho expirado), número de série, protocolo TLS, conjunto de cifras e cadeia de certificados (via
openssl s_client); funciona para certificados válidos, expirados e autoassinados; mensagens de erro amigáveis para hosts inalcançáveis - Navegador SMB / NFS — lista compartilhamentos e exportações de qualquer servidor; aba SMB:
smbclient -Lcom credenciais opcionais, mostra nome / tipo / comentário do compartilhamento; aba NFS:showmount -e, mostra o caminho da exportação e a lista de acesso; detecta ferramentas ausentes com instruções de instalação específicas por distribuição - Editor do Arquivo Hosts — visualiza e edita
/etc/hosts; tabela com alternância ativar/desativar, adicionar/editar/excluir entradas via diálogo; filtrar por IP ou hostname; salva viapkexec cp(diálogo de autenticação polkit) - install.sh — novo script para Debian / Ubuntu / Linux Mint: cria um venv em
~/.local/share/nmlinux/venv, instala dependências do sistema via apt, cria lançador e entrada.desktop(corrige o erro PEP 668externally-managed-environment)
v1.2.9 — 2026-05-30
- VNC — novo módulo para gerenciar perfis de conexão VNC; grupos/subgrupos como SSH e RDP; inicia
vncviewer(TigerVNC); compatível com macOS ARD (autenticação DH30 tratada nativamente pelo vncviewer); a senha nunca é armazenada; detectavncviewerausente com instruções de instalação específicas por distribuição - Sobre — Ferramentas e serviços — nova seção listando todas as ferramentas de terceiros e APIs das quais o aplicativo depende
- i18n da barra lateral — todas as 23 dicas de navegação agora estão traduzidas para FR/EN/ES/DE (eram codificadas em francês); rótulos corrigidos: Topologia, Conexões, Sub-rede
v1.2.8 — 2026-05-30
- Área de Trabalho Remota (RDP) — novo módulo para gerenciar perfis de conexão RDP do Windows; grupos/subgrupos como SSH; inicia
xfreerdpcomo um processo externo; a senha é solicitada no momento da conexão e nunca é armazenada; campos: host, porta, usuário, domínio, resolução, tela cheia; detectaxfreerdpausente com instruções de instalação específicas por distribuição (Arch / Debian / Fedora)
v1.2.7 — 2026-05-26
- Ícones Lucide incluídos — 21 ícones SVG do Lucide (MIT) agora estão incluídos em
assets/icons/; renderizados em tempo de execução viaQSvgRenderer; coloridos#60a5fa; o aplicativo não requer mais nenhum tema de ícones do sistema (Breeze, Adwaita, Papirus…)
v1.2.6 — 2026-05-24
- Compatibilidade GNOME / Adwaita — corrigidos os ícones em desktops não KDE:
main.pyagora detecta automaticamente o tema de ícones GTK viagsettingse o aplica ao Qt; cadeias de fallback estendidas para Wi-Fi, Traceroute, Teste de Velocidade, Interfaces, Scanner de Portas, Firewall, MTR;themed_icon()agora valida se um pixmap real existe antes de aceitar um ícone de tema - Compatibilidade NixOS / KDE — corrigidos todos os ícones no NixOS: Breeze 6.x inclui apenas ícones SVGZ; o wrapper Nix agora adiciona
qt6.qtsvgaQT_PLUGIN_PATHpara que o Qt possa renderizar ícones SVG;themed_icon()tenta os tamanhos 22/24/16/32/48 (o Breeze usa 22 px, não 24); o tema é forçado parabreezequando o conjunto de ícones incluído na Nix é detectado; também verifica/etc/xdg/kdeglobalspara configuração KDE em todo o sistema
v1.2.5 — 2026-05-23
- MTR — Meu Traceroute embutido: executa
mtr --report, analisa a saída de texto, exibe uma tabela em tempo real com Perda %, RTT Última/Média/Melhor/Pior/Jitter por salto, codificado por cores conforme a gravidade da perda; modo contínuo; exportação CSV + TXT - Teste de Velocidade — teste de velocidade sem dependências via
curl+ Cloudflare (speed.cloudflare.com): download (25 MB), upload (10 MB), ping para1.1.1.1; até 5 execuções persistidas em JSON; gráfico de linhas histórico (Download/Upload) - Visualizador de Firewall — visualizador somente leitura de conjunto de regras: analisa
/etc/nftables.confe/etc/iptables/*.rulessem root; conjunto de regras ao vivo viapkexec nft list ruleset; colunas: Tabela / Cadeia / Regra / Porta / Ação / Comentário; ações codificadas por cores; filtro ao vivo - Dicas na barra lateral — cada item de navegação agora mostra um selo
?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údo - i18n — todos os novos módulos traduzidos em francês, inglês e espanhol
v1.2.0 — 2026-05-22
- Adaptação de tema — suporte completo a alternância claro/escuro em tempo de execução em todas as páginas; novo
core/theme.pycomis_dark(),color_ok(),color_err(); widgets de pintura personalizados (_Graph,_MapWidget) leem a paleta no momento da pintura; todas as cores Catppuccin Mocha codificadas foram substituídas por papéis semânticos da paleta Qt - Máscara de sub-rede — as páginas Painel, Interfaces e Conexões agora exibem a máscara de sub-rede em formato decimal pontilhado (por exemplo,
255.255.255.0) derivada do prefixo CIDR - Monitor de Largura de Banda — botão explícito Iniciar/Parar substitui o início automático não confiável ao carregar a página
- Exportar CSV/TXT — as páginas Nmap e Traceroute agora oferecem botões Exportar CSV e Exportar TXT (aparecem após a conclusão da varredura/rastreamento)
- i18n — novas chaves de tradução para todos os recursos acima (fr/en/es/de)
v1.1.1 — 2026-05-16
- Terminal SSH — reescrita completa com pyte (emulador VT100/xterm) + renderizador QPainter; buffer de rolagem de 2000 linhas, cursor piscante, suporte a 256 cores
- Traceroute Visual — mapa-múndi (Natural Earth 110m), geolocalização ao vivo por salto (ip-api.com), zoom/pan interativos, parser duplo (
traceroute/ fallbacktracepath) - Monitor de Largura de Banda — throughput em tempo real por interface, gráfico deslizante de 60s, velocidades ao vivo, totais e picos da sessão
- Wake on LAN — pacote mágico em Python puro (broadcast UDP), livro de hosts persistente (JSON)
- Scanner de IP — resolução de hostname via
getent/avahi/nmblookup; endereço MAC, fornecedor (IEEE OUI com 39K entradas), colunas de interface; exportação CSV/TXT atualizada - i18n — tradução completa fr/en/es/de para todas as novas páginas
v1.0.0 — 2026-05-14
Primeira versão pública — 13 módulos: Painel, Interfaces, Wi-Fi, Calculadora de Sub-rede, Consulta de DNS, Monitor de Ping, Scanner de IP, Scanner de Portas, Nmap, Whois, SNMP, SNTP/NTP, SSH.
Recursos
| Módulo | Descrição |
|---|---|
| Painel | Informações da máquina local, gateway, IP público, geolocalização, resolvedores DNS |
| Gerenciador de Conexões | Perfis do 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 em destaque |
| Calculadora de Sub-rede | Rede/broadcast/intervalo de hosts a partir do CIDR, tabela de hosts com até 4096 entradas |
| Consulta de DNS | Consulta baseada em dig para A, AAAA, MX, TXT, NS, CNAME, PTR, SOA, ANY |
| Monitor de Ping | Ping contínuo para vários hosts, estatísticas de RTT, perda de pacotes % |
| Scanner de IP | Varredura de ping por CIDR/intervalo, 50 threads, hostname (DNS/mDNS/NetBIOS), endereço MAC, fornecedor (OUI), interface, exportação CSV + TXT |
| Scanner de Portas | Varredura TCP connect, 200 threads, predefinições de serviços, exportação CSV + TXT |
| Nmap | 7 modos de varredura, análise de saída XML, tabela Host/Porta/Protocolo/Estado/Serviço, exportação CSV + TXT |
| Whois | Saída whois bruta em fonte 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/atraso/stratum/referência |
| SSH | Terminal PTY embutido (pyte/VT100), conexões salvas (JSON), autenticação por chave, buffer de rolagem |
| Área de Trabalho Remota | Perfis de conexão RDP (grupos/subgrupos); inicia xfreerdp; a senha nunca é armazenada |
| VNC | Perfis de conexão VNC (grupos/subgrupos); inicia vncviewer (TigerVNC); compatível com macOS ARD; a senha nunca é armazenada |
| Gerenciador de Chaves SSH | Lista pares de chaves em ~/.ssh/ (tipo, bits, impressão digital); gera Ed25519/RSA 4096; copia a 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 colorido 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 | Visualiza/edita /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 | Meu Traceroute embutido: perda %, RTT Última/Média/Melhor/Pior/Jitter por salto, codificado por cores, 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 |
| Teste de Velocidade | 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 em tempo real por interface: 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 | Autodetecta dispositivos da LAN via nmap -sn; grafo 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 a alteração |
| Paleta de Comandos | Sobreposição Ctrl+P: pesquisa 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; a 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 |
Requisitos
Ferramentas do sistema
Linux — a maioria já está presente em uma instalação padrão:```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** — 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 do fornecedor OUI no IP Scanner também não requer instalação — a base de dadosmanufdo Wireshark é transferida automaticamente em segundo plano na primeira utilização e guardada em cache localmente.
Ferramentas opcionais
| Ferramenta | Recurso | Linux | macOS |
|---|---|---|---|
xfreerdp / xfreerdp3 | Área de Trabalho Remota (RDP) | Arch: freerdp · Ubuntu ≤24.04: freerdp2-x11 · Ubuntu 26.04+: freerdp3-x11 | opcional — recorre ao Microsoft Remote Desktop (open rdp://) |
vncviewer | VNC | Arch: tigervnc · Debian: tigervnc-viewer | opcional — recorre à Partilha de Ecrã do macOS (open vnc://, integrado) |
nm-connection-editor | Editar ligações a partir do Gestor de Ligações | Arch: nm-connection-editor | — (abre as Preferências do Sistema em vez disso) |
traceroute | Alternativa ao Traceroute (o tracepath é utilizado por predefinição) | Arch: traceroute | integrado |
mount.cifs (cifs-utils) | Montar partilhas SMB a partir do menu de contexto | Arch/Debian: cifs-utils | integrado (mount_smbfs) |
iperf3 | Teste de Velocidade — separador LAN | Arch: iperf3 · Debian/Ubuntu: iperf3 | brew install iperf3 |
Python
- Python 3.11+
- PySide6 6.6+
- ptyprocess 0.7+
- pyte 0.8+ (
pip install pyteousudo pacman -S python-pyte) - tftpy 0.8+ (
pip install tftpyousudo pacman -S python-tftpy) — módulo de Transferência de Ficheiros
Instalação
Opção 1 — Arch Linux / Manjaro / EndeavourOS (AUR)```bash
yay -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 .
Ou entre em um 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 pelo wrapper Nix.
### Opção 4 — AppImage (qualquer distribuição Linux, sem instalação)
Baixe `NMLinux-x.y.z-x86_64.AppImage` do [último lançamento](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 empacotados 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 incluídas — instale-as pelo seu gerenciador de pacotes para que os módulos correspondentes funcionem. Veja Requisitos abaixo.
Opção 5 — macOS
Forma mais rápida — bootstrap de uma linha. Funciona em um Mac completamente limpo: instala Xcode Command Line Tools, Homebrew, todas as ferramentas do sistema e, em seguida, o próprio NMLinux. Seguro para executar novamente (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
Não é necessária conta de desenvolvedor Apple nem notarização paga — é o mesmo
install_macos_app.shde código aberto nos bastidores, 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 depois executar (em vez de canalizar diretamente para
bash) é intencional: em um Mac recém-configurado, o script aciona etapas interativas aninhadas (instalador das Ferramentas de Linha de Comando do Xcode, o próprio instalador do Homebrew pedindo sua senha desudo) que leem do terminal — canalizar o script diretamente parabashpode fazer essas solicitações aninhadas 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á tem o 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
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` — digitalização de SSID Wi-Fi
- `pyobjc-framework-CoreLocation` — permissão dos Serviços de Localização para nomes de Wi-Fi
**Wi-Fi no macOS 26 (Tahoe):** na primeira execução, o macOS solicitará a permissão dos 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 `open rdp://` como fallback (Microsoft Remote Desktop), o VNC usa `open vnc://` como fallback (Compartilhamento de Tela integrado). O Connection Manager tem funcionalidade reduzida no macOS (`nmcli` não 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á:
- Instalar dependências do sistema via
apt(libgl1, python3-venv, freerdp, tigervnc…) - Criar um ambiente virtual em
~/.local/share/nmlinux/venv - Instalar o NMLinux e suas dependências Python dentro do venv
- Criar um lançador em
~/.local/bin/nmlinux - Adicionar uma entrada
.desktoppara que o NMLinux apareça no menu de aplicativos
Após a instalação, execute nmlinux a partir de um terminal ou inicie-o pelo menu de aplicativos.
Opção 7 — Wheel (todas as distros / macOS)
Baixe o .whl da última versão e instale-o:```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 para Ubuntu 26.04+:** o `pipx` requer que as bibliotecas do sistema (libGL, etc.) sejam instaladas primeiro — os comandos acima dão conta delas. Se `pipx install` falhar devido a um erro de compilação 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
Opção 9 — Entrada de área de trabalho (KDE / GNOME / etc.)
Copie o arquivo .desktop para fazer o NMLinux aparecer no seu lançador de aplicativos:```bash
cp data/nmlinux.desktop ~/.local/share/applications/
update-desktop-database ~/.local/share/applications/
Em seguida, 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
Estrutura do projeto```
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 [Lucide](https://lucide.dev) incluídos, 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 ambiente de 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 dependem de ferramentas disponíveis em ambas as plataformas (`ssh`, `dig`, `ping`, `curl`, `nmap`, `openssl`…).
**Nove módulos exigem adaptação explícita para macOS** (caminhos de código duplos que detectam a plataforma na inicialização): Dashboard, Interfaces, Wi-Fi, Topology, Bandwidth, Firewall, Connection Manager, Hosts File, MTR — esses usam comandos nativos do macOS (`ifconfig`, `networksetup`, `scutil`, `pfctl`, `system_profiler`…) em vez dos equivalentes no Linux.
**Módulos com suporte limitado ou sem suporte no macOS:**
| Módulo | Status | Notas |
|--------|--------|-------|
| **RDP** | ✓ macOS | Recorre a `open rdp://` → Microsoft Remote Desktop (App Store) |
| **VNC** | ✓ macOS | Recorre a `open vnc://` → Screen Sharing (integrado, sem instalação) |
| **IP Scanner** | ✓ macOS | Usa `socket.gethostbyaddr()` — Python nativo, sem ferramenta adicional |
| **SMB** | ✓ macOS | Usa `smbutil view` (integrado) em vez de `smbclient` |
| **NFS** | ✓ macOS | `showmount` integrado; análise de cabeçalho adaptada |
| **Connection Manager** | ⚠ Reduzido | Editar/excluir exige `nmcli` (somente Linux); a exibição em 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 requer 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 desenvolver 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/HEAD/LICENSE).
Este projeto é uma reimplementação independente. Nenhum código do NETworkManager foi usado ou traduzido.





