
nmlinux v1.7.11
Kit de herramientas de red unificado para Linux — Python 3 + PySide6
NMLinux · v1.7.12
Un kit de herramientas de red unificado para Linux y macOS — inspecciona, conecta, diagnostica.
NMLinux es una interfaz gráfica única y unificada que reúne 29 módulos de red en una sola ventana: monitoreo de interfaces, Wi-Fi, DNS, terminal SSH, visor de firewall, mapa de topología, traceroute y más. Construido desde cero en Python y PySide6 (Qt 6), con 8 idiomas de interfaz y sin dependencias externas más allá de las herramientas estándar del sistema.
[!NOTE] NMLinux no está relacionado con el demonio del sistema Linux
/usr/bin/NetworkManager(NetworkManager de Red Hat/GNOME). NMLinux es un proyecto independiente construido desde cero en Python y PySide6.
Construido con Claude Code (Anthropic) y la contribución de su autor.
Proceso de desarrollo
NMLinux se construye con asistencia de IA — concretamente Claude Code — y eso no se oculta en ningún lugar de este repositorio. Casi todos los proyectos de software serios usan IA en algún punto de su proceso hoy en día, lo digan o no. Así que «¿se usó IA?» no es la pregunta interesante. La pregunta interesante es: ¿hay algo que lo detecte cuando la IA se equivoca?
Esto es lo que lo hace, si prefieres comprobarlo antes que fiarte de mi palabra:
- 162 pruebas —
pytest tests/ -v. Lógica pura más un puñado de pruebas reales de widgets Qt (menús, tablas), sin simular las partes interesantes. docs/Decisions-Techniques.md— cada decisión técnica no obvia, las alternativas rechazadas y los errores (incluidos los introducidos por IA) que se encontraron y corrigieron, con el razonamiento documentado.docs/Architecture.mdydocs/Carte-des-Modules.md— la estructura real del código, mantenida sincronizada con lo que se publica.- Una comprobación de coherencia i18n ejecutada antes de cada lanzamiento para detectar claves de traducción ausentes en los 8 idiomas soportados.
Nada de eso existe porque no se pueda confiar en la IA. Existe porque nada debería publicarse sin un proceso que lo verifique — incluido el código escrito a mano. Juzga el resultado y cómo se verifica, no la herramienta que ayudó a escribirlo.
¿Encontraste un error de todos modos? Eso es útil, no vergonzoso — abre un issue.
Comunidad
GitHub Discussions está abierto — comparte comentarios, reporta ideas, haz preguntas o simplemente saluda. El autor tiene más de 30 años en infraestructura y operaciones, y construyó esta herramienta porque el software bueno, gratuito y sencillo también debería existir para Linux.
Capturas de pantalla
Capturas de Linux de la v1.2.7 — capturas de macOS de la v1.3.5. La aplicación ahora tiene 29 módulos y 8 idiomas de interfaz (FR/EN/ES/DE/IT/PT/JA/ZH).
Linux (KDE)
| Panel | Topología |
|---|---|
![]() | ![]() |
| Traceroute | Wi-Fi |
|---|---|
![]() | ![]() |
macOS
| Panel | Traceroute |
|---|---|
![]() | ![]() |
Registro de cambios
v1.7.12 — 2026-08-12
- Traceroute — corrección: bajo Flatpak (v1.7.11, ver más abajo — ahora eliminado),
traceroutesiempre se resolvía enPATHa través del shim del host incluso cuando el host no tenía un binariotraceroutereal instalado, por lo que el worker nunca recurría atracepathy el trazado terminaba al instante sin saltos y sin mostrar ningún error. Ahora recurre atracepathsiempre quetracerouteno produzca ninguna salida analizable, independientemente del motivo del fallo. - Terminal SSH — corrección de askpass: cuando
DISPLAY/WAYLAND_DISPLAYestán definidas (cualquier sesión gráfica) y ssh no tiene una tty limpia, puede intentar usar$SSH_ASKPASSpara la solicitud de contraseña en lugar de la terminal integrada — fallando silenciosamente la autenticación si no hay ningún helper askpass instalado.SSH_ASKPASS_REQUIRE=neverahora obliga a que las solicitudes de contraseña pasen siempre por la propia terminal. - Empaquetado Flatpak eliminado: el manifiesto local para KDE Linux incluido en la v1.7.11 se ha descontinuado. La investigación del error de solicitud de contraseña SSH mencionado arriba reveló una limitación a nivel de kernel: un proceso redirigido a través de
flatpak-spawn --hostnunca puede convertirse en el propietario de la terminal de control del pty reenviado (TIOCSCTTYrechazado conEPERM— una sesión diferente y no relacionada ya lo posee; se trata de un límite de seguridad intencional del kernel, no de un error). La única alternativa viable (script, asignando un pty nuevo) corrige la solicitud de contraseña pero rompe la propagación del redimensionamiento de la terminal en vivo para esa sesión — considerada un peor equilibrio que no distribuir Flatpak en absoluto. AUR y AppImage son las vías de instalación en Linux compatibles a partir de ahora.
v1.7.11 — 2026-08-03
- Empaquetado Flatpak (KDE Linux): un manifiesto de compilación local en
packaging/flatpak/está dirigido a KDE Linux y otras distribuciones solo-Flatpak. Las herramientas CLI del host a las que nmlinux llama externamente (nmcli,pkexec,mount.cifs,ssh,nmap, …) se conectan a través de shimsflatpak-spawn --hostenPATHen lugar de aislar cada una individualmente; PySide6 proviene deio.qt.PySide.BaseAppde Flathub en lugar del wheel de PyPI. No está publicado en Flathub — se compila un único paquete.flatpakconpackaging/flatpak/build-bundle.shy se adjunta a cada lanzamiento, de la misma manera que ya se hace con AppImage. Descontinuado en la v1.7.12 — ver más arriba.
v1.7.10 — 2026-08-03
- Terminal SSH — corrección: se corrigió una condición de carrera en la que el PTY podía iniciarse con un tamaño incorrecto (24×80 por defecto) si el tamaño real del widget de la terminal aún no se conocía cuando se lanzaba la sesión, descartando silenciosamente la solicitud de redimensionamiento. Esto desincronizaba las aplicaciones remotas de pantalla completa (p. ej. Claude Code CLI, htop, vim) del tamaño real de la ventana, provocando texto obsoleto/sobrante en la parte inferior de la pantalla que solo se limpiaba cuando la nueva salida pasaba por encima. Reportado por el usuario; reproducido con una sesión interactiva real
v1.7.9 — 2026-08-02
- Terminal SSH — copiar/pegar: selecciona texto con el ratón (clic-arrastre, resaltado), copia con
Ctrl+Shift+Co con el menú de clic derecho; pega conCtrl+Shift+V(existente). Copiar era antes imposible — no existía selección de texto en absoluto - Terminal SSH — múltiples sesiones simultáneas: la página SSH ahora abre cada conexión en su propia pestaña en lugar de una única sesión compartida. Reconectarse a una conexión guardada — incluso la misma dos veces — solía matar la sesión activa sin abrir un reemplazo funcional; ahora cada acción de conexión abre una pestaña nueva e independiente
v1.7.8 — 2026-07-14
- Prueba de velocidad — nueva pestaña LAN (iperf3): junto a la prueba de velocidad de internet existente, una nueva pestaña ejecuta pruebas
iperf3solo-cliente contra una lista pública de servidores incluida (26 países) o un servidor personalizado guardado (p. ej. un servidor interno de la organización). Soporta TCP/UDP, IPv4/IPv6/automático y dirección inversa (descarga), con jitter/pérdida mostrados para las pruebas UDP. Sugerido por issue #6 - Nueva dependencia opcional:
iperf3— instálalo para habilitar la pestaña LAN; la pestaña muestra un banner y permanece deshabilitada en caso contrario
v1.7.6 — 2026-07-05
- Inventario de activos — actualización con clic derecho: haz clic derecho en una o más filas ya escaneadas (se admite selección múltiple) y elige «Actualizar seleccionados» para volver a escanear solo esos hosts en su lugar, en lugar de volver a ejecutar un escaneo de red completo
- Inventario de activos — retroalimentación de fallo de autenticación SSH: un inicio de sesión SSH rechazado ahora muestra «Fallo de autenticación SSH» en lugar de fallar silenciosamente, sin perder la línea base de nombre de host/SO detectada por Nmap — confirmado contra un NAS Synology real donde el Auto Block de DSM rechazó una contraseña correcta después de que se probaran primero otros conjuntos de credenciales configurados
v1.7.5 — 2026-07-04
- Monitor de ping — directorio de objetivos guardados: un nuevo panel izquierdo te permite guardar objetivos de ping (nombre, host, intervalo) en una lista persistente, de modo que los hosts en monitoreo sobrevivan a un reinicio de la aplicación en lugar de tener que volver a escribirlos. Un botón ★ en cada fila monitoreada activamente guarda ese host en el directorio en cualquier momento durante la sesión — sin necesidad de haberlo planeado antes de que la aplicación se cierre inesperadamente
- Monitor de ping — «Iniciar monitoreo»: selecciona un objetivo guardado y comienza a monitorearlo con un clic, reutilizando su intervalo guardado
v1.7.4 — 2026-07-04
- Inventario de activos — corregidos resultados de escaneo inconsistentes: la comprobación de actividad enviaba un único ping con tiempo de espera de 1 segundo y sin reintentos, lo que podía omitir un dispositivo real bajo la carga concurrente del propio escáner (hasta 40 hosts sondeados a la vez) o cuando un host Wi-Fi estaba brevemente en reposo entre balizas — confirmado en vivo contra una subred real que devolvía conteos de dispositivos diferentes en ejecuciones repetidas del mismo rango. La comprobación ahora reintenta el ping antes de recurrir a la sonda de puerto TCP
- Inventario de activos — nuevo botón «Actualizar vacíos»: después de un escaneo, vuelve a escanear solo las IPs que no devolvieron datos en lugar de todo el rango de nuevo; los hosts recién encontrados se fusionan con los resultados existentes
v1.7.3 — 2026-07-03
- SMB — montar recursos compartidos desde el menú de clic derecho: haz clic derecho en un recurso compartido de la pestaña SMB y elige Montar/Desmontar para montarlo en una ruta local estable (
~/mnt/<host>_<share>), utilizable desde la terminal y desde cualquier otra aplicación — no una vista de exploración transitoria. Solo para la sesión (sin persistencia en fstab/systemd), las credenciales se reutilizan de los campos existentes de usuario/contraseña. Linux usapkexec mount -t cifscon un archivo de credenciales de permisos restringidos (nunca expuesto a través deps); macOS usamount_smbfsdirectamente. Reintenta automáticamente con un dialecto SMB más antiguo (vers=2.0) cuando un servidor rechaza la negociación predeterminada (común en NAS antiguos) — ambos intentos se realizan bajo una única solicitud de autenticación mediante un proceso helper dedicado - Nueva dependencia opcional:
cifs-utils(Linux) para el montaje SMB; integrado en macOS
v1.7.2 — 2026-07-03
- Instalación en macOS — corregidos dos errores de arranque encontrados en un Mac recién preparado:
bootstrap_macos.shya no fuerzaNONINTERACTIVE=1en el instalador de Homebrew, que abortaba inmediatamente en cualquier cuenta de administrador nueva en lugar de solicitar la contraseña de sudo; el one-liner documentado ahora descarga primero el script en lugar de enviarlo directamente abash, ya que los pasos interactivos anidados (instalador de Xcode CLT, la propia solicitud de sudo de Homebrew) podían interferir con el flujo de entrada del script externo cuando se usaba pipe - Menú universal de clic derecho — SMB añadido:
SmbNfsPageera la única página de destino que faltaba en el sistema de clic derecho entre módulos incluido en la v1.7.0; hacer clic derecho en un host y elegir SMB ahora rellena el campo de host e inicia el escaneo de inmediato, en negrita en el menú cuando se detecta el puerto 445 abierto - i18n — cadenas restantes del Panel traducidas: la etiqueta de latencia de la puerta de enlace, el título de la tarjeta de la Lista de vigilancia TLS y su fila de estado seguían codificados en francés; ahora traducidos a los 8 idiomas de la interfaz
v1.7.1 — 2026-07-02
- macOS 26 (Tahoe) — correcciones de SSID Wi-Fi: se cambió de
system_profiler(devuelve<redacted>sin los Servicios de Localización) a CoreWLAN como fuente de datos principal; la aplicación ahora solicita permiso de Servicios de Localización en el primer lanzamiento; la página Wi-Fi muestra todas las redes con nombres reales una vez concedido - macOS — Administrador de conexiones: el SSID conectado ahora se lee a través de CoreWLAN, con
system_profilerpara el modo de seguridad - macOS — SMB: mensaje claro de «autenticación requerida» cuando el NAS exige credenciales; corregida una advertencia espuria de smb.conf del smbclient de Homebrew
- macOS — Corregido un posible cierre inesperado al salir después del primer diálogo de permiso de Servicios de Localización
v1.7.0 — 2026-07-02
- Menú contextual universal de clic derecho en todas las tablas que contienen IPs o nombres de host — navega directamente entre módulos sin copiar y pegar: haz clic derecho en cualquier host descubierto y elige Ping, Escanear puertos, Whois, DNS, Traceroute, MTR, SSH, RDP, VNC, Ver en Topología o Añadir al inventario. Los elementos del menú SSH/RDP/VNC aparecen en negrita cuando se detecta el puerto correspondiente abierto. Las etiquetas están completamente traducidas a los 8 idiomas de la interfaz.
- Páginas de origen (emiten acciones de clic derecho): Escáner de IPs, Nmap, Ping, Escáner de puertos, Traceroute, MTR, Topología (clic derecho en nodo)
- Páginas de destino (reciben el host y lo rellenan): Whois (
set_target+ consulta automática), DNS (set_targetsolo relleno), Ping (set_target+ inicio automático), Traceroute (set_target+ inicio automático), MTR (set_target+ inicio automático), Escáner de puertos (set_target+ foco), SSH / RDP / VNC (set_targetabre el formulario de nueva conexión rellenado), Topología (load_hostsinyecta nodos desde el escaneo del Escáner de IPs/Nmap sin volver a escanear — la puerta de enlace se detecta automáticamente, se dibujan las aristas, el nodo de origen se resalta en rojo), Inventario de activos (prefill_hostsinicia el escaneo de credenciales directamente sobre los hosts descubiertos, omitiendo la fase de descubrimiento ICMP) - Panel — gráfico de latencia de la puerta de enlace: minigráfico de latencia en vivo actualizado cada 2 segundos; con código de colores (<20 ms verde / 20–100 ms naranja / >100 ms rojo / tiempo de espera agotado rojo)
- Panel — resumen de la Lista de vigilancia TLS: la tarjeta de estado del Panel refleja automáticamente el estado de la Lista de vigilancia TLS (OK / por caducar / alerta) sin volver a consultar
- Panel — redimensionado del mapa geográfico: el mapa mundial ahora se expande horizontalmente cuando se redimensiona la ventana
v1.6.4 — 2026-06-28
- macOS: la barra de menú ahora muestra NMLinux en lugar de Python — causa raíz: después del
exec()en Python,NSBundle.mainBundle()se resuelve al bundlePython.framework(CFBundleName = "Python") que Qt lee durante la construcción de QApplication; corregido parcheando elinfoDictionary()del bundle y renombrando los elementos de menú nativos a través de AppKit antes de que se cree el menú de la aplicación
v1.6.3 — 2026-06-28
- macOS: primer intento de corregir la barra de menú usando
NSProcessInfo.setProcessName_a través depyobjc-framework-Cocoa(superado por la v1.6.4)
v1.6.2 — 2026-06-28
- macOS: se reemplazó el script de lanzamiento bash por un stub C compilado en
install_macos_app.shpara que macOS asocie correctamente el bundle.appcon el proceso en ejecución; se añadieronsetprognamey la sobrescritura desys.argv[0]como respaldos
v1.6.1 — 2026-06-25
- Terminal SSH — corregido el eco remoto: las pulsaciones de teclas escritas en la terminal SSH integrada se enviaban al shell remoto pero nunca se reflejaban de vuelta (el teclado parecía «muerto» después del inicio de sesión). nmlinux forzaba el eco local del PTY a desactivado, y ssh propagaba ese «sin eco» al pty remoto a través de sus modos de terminal (pty-req), por lo que el shell remoto dejaba de reflejar la entrada. Reproducido en una VM limpia de Ubuntu 26.04 (OpenSSH reciente aplica estos modos fielmente). La terminal ahora mantiene el PTY en modo normal y deja que ssh gestione el eco, igual que los emuladores de terminal reales.
v1.6.0 — 2026-06-24
- Inventario de activos — WinRM Windows (completo): detección de hosts mediante sonda de puerto TCP cuando ICMP está bloqueado por el Firewall de Windows; PowerShell ahora usa ruta absoluta completa + EncodedCommand (base64) para evitar que cmd.exe interprete las tuberías
|; cadena de respaldo completa sin derechos de administrador: SO mediantever, CPU mediante registro, RAM mediantesysteminfo, disco mediantewmic→fsutil(coma EN según locale / espacio FR) →dir /-C - Inventario de activos — SSH multi-credenciales: se admiten múltiples conjuntos de credenciales SSH; disco de macOS corregido (
/System/Volumes/Data), respaldo de CPU para Apple Silicon (hw.model), Synology (/volume1), Unraid (/mnt/user) - Correcciones de errores: los errores de WinRM ahora se muestran en la tabla en lugar de un respaldo silencioso; la detección de hosts por WinRM/SNMP ya no se bloquea por la presencia de credenciales SSH; corregido el tiempo de espera de pywinrm
v1.5.3 — 2026-06-24
- macOS .app — detección de herramientas de Homebrew:
sshpass,nmapysnmpgetinstalados a través de Homebrew ahora se encuentran y se llaman usando su ruta absoluta; los bundles.appen macOS no heredan el PATH de Homebrew (/opt/homebrew/bin,/usr/local/bin), por lo que las herramientas previamente instaladas se ignoraban silenciosamente - Ruta de actualización en macOS: ejecutar
git pull && bash packaging/install_macos_app.shdesde la raíz del repositorio ahora es el método de actualización documentado; el script gestiona su propio venv (~/.local/share/nmlinux/venv) y no requierepipnipipxa nivel de sistema
v1.5.2 — 2026-06-24
- Inventario de activos — nuevo módulo (29º); escanea un rango CIDR y recopila SO, CPU, RAM, disco y tiempo de actividad de cada host mediante SSH, WinRM, SNMP o Nmap; admite múltiples conjuntos de credenciales por protocolo (prueba cada uno en orden); política de retención cero: las credenciales nunca se escriben en disco y se eliminan de la memoria después del escaneo; exporta resultados como JSON, CSV o Markdown; se añadió un mapa geográfico animado a la sección Geolocalización de IPs del Panel
- Correcciones de recopilación SSH: corregido el error de comillas en awk del comando de disco;
free -hreemplazado porfreecompatible con BusyBox; la ruta de código de macOS ahora usasw_verspara el nombre del SO, respaldohw.modelpara CPU de Apple Silicon,/System/Volumes/Datapara el volumen de datos de usuario APFS; los volúmenes de Synology/Unraid (/volume1,/mnt/user) se detectan antes que la raíz; el patrón de falso éxitodf | tail -1 || …se corrigió con guardastest -d; la salida delsb_releasese limpia de comillas circundantes; se admiten múltiples conjuntos de credenciales SSH/WinRM (prueba cada uno en orden por host)
v1.5.0 — 2026-06-17
- Servidor de transferencia de archivos — nuevo módulo para iniciar/detener un servidor TFTP o HTTP ligero directamente desde la aplicación; caso de uso clásico: respaldo y restauración de configuraciones de routers, switches o impresoras; un solo servidor activo a la vez (TFTP o HTTP), puerto y directorio raíz configurables, IPs locales mostradas como botones de copiar al portapapeles; HTTP incluye listado de directorios (navega desde cualquier navegador en la LAN), GET (descarga) y POST/PUT (subida); TFTP admite GET y PUT (bidireccional), el puerto 69 requiere root — la aplicación muestra un botón «Iniciar como root (pkexec)» en caso de error de permisos; tabla de registro de transferencias en vivo (marca de tiempo, nombre de archivo, IP del cliente, dirección ↑/↓, tamaño); protección contra recorrido de puertos; 8 idiomas de interfaz; nueva dependencia:
tftpy
v1.4.3 — 2026-06-14
- Correcciones de la Lista de vigilancia TLS: los certificados autofirmados y no confiables ahora se muestran correctamente como «⚠ Certificado inválido / no confiable» (naranja) en lugar de verde; la captura de excepciones SSL se amplió para cubrir todas las subclases de
ssl.SSLError; las entradas ahora muestran «… (comprobando)» mientras se ejecuta la comprobación en segundo plano y «— (inalcanzable)» cuando no se puede acceder al host
v1.4.2 — 2026-06-14
- Lista de vigilancia TLS — lista persistente de nombres de host para monitorear la caducidad de certificados; añade hosts con
+ Vigilar(usa el host/puerto actual) o manualmente en el panel; la comprobación en segundo plano se ejecuta automáticamente 2 segundos después del lanzamiento; la entrada lateral «Inspector TLS» muestra un punto de color: rojo si algún certificado está caducado, naranja si algún certificado caduca dentro de 30 días; botón de re-comprobación en el panel; la lista muestra estado por entrada (✓ / ⚠ / CADUCADO) con código de colores
v1.4.1 — 2026-06-14
- macOS — Escáner de IPs: corregida la consulta de dirección MAC, proveedor e interfaz en macOS;
_arp_entry()ahora llama aarp -n <ip>en macOS y analiza su formato de salida (? (IP) at AA:BB:CC on en0) en lugar de leer/proc/net/arp(solo Linux); las cuatro columnas del escáner ahora se rellenan correctamente en macOS - Ayuda de VNC: se añadió una nota en los 8 idiomas que aclara que Linux no tiene un servidor VNC por defecto y enumera opciones comunes de instalación (x11vnc, tigervnc-server, wayvnc)
v1.4.0 — 2026-06-14- macOS — Escáner de IP: sustituye getent (solo Linux) por socket.gethostbyaddr() de Python para la resolución DNS inversa multiplataforma; la resolución de nombres de host ahora funciona de forma nativa en macOS sin ninguna herramienta adicional
- macOS — Explorador de SMB: pasa de
smbclient(requiere Homebrew samba) asmbutil view(herramienta integrada en macOS); el listado de recursos compartidos SMB ahora funciona en macOS sin necesidad de instalar nada - macOS — Explorador de NFS:
showmountestá integrado en macOS pero no admite--no-headers; el indicador se elimina en macOS y la línea de cabecera se omite en el analizador; el listado de exportaciones NFS ahora funciona de forma nativa - macOS — RDP: cuando no se encuentra
xfreerdp, se recurre al esquema de URLopen rdp://; abre Microsoft Remote Desktop (App Store) si está instalado, con host, puerto, usuario y dominio predefinidos - macOS — VNC: cuando no se encuentra
vncviewer, se recurre al esquema de URLopen vnc://; abre Compartir pantalla de macOS (integrado, sin necesidad de instalar nada)
v1.3.9 — 2026-06-13
- Reenvío del agente SSH — nueva casilla «Reenvío del agente» en el formulario de conexión SSH; añade
-Aal comandossh; permite saltar entre servidores sin copiar tu clave privada (PC → A → B); requiere un agente SSH activo (SSH_AUTH_SOCK); ayuda contextual actualizada en los 8 idiomas
v1.3.8 — 2026-06-13
- Paleta de comandos (Ctrl+P) — navegación instantánea con el teclado a cualquiera de los 27 módulos; búsqueda difusa por nombre y palabras clave (p. ej., "firewall", "tls", "ssh key", "scan"); flechas arriba/abajo + Enter o un solo clic para navegar; se abre con Ctrl+P desde cualquier lugar de la aplicación
- Gestor de exportación — exporta una instantánea completa de la red (interfaces, rutas, resolutores DNS) desde Archivo → Exportar informe de red… en JSON, Markdown, texto plano o PDF (opcional:
pip install reportlab) - Botones de exportación por módulo — se añaden botones de exportación a las páginas Interfaces, DNS, Firewall, Conexiones SSH y Gestor de conexiones; cada página exporta sus datos actuales en el formato elegido, con actualización en vivo de la extensión del nombre de archivo al cambiar el filtro de formato
v1.3.6 — 2026-06-12
- Topología — iconos de dispositivos — cada nodo muestra ahora un icono SVG de Lucide que coincide con su tipo de dispositivo (router/wifi, ordenador/portátil, impresora, NAS/servidor, smartphone, conmutador de red, Raspberry Pi) en lugar de un círculo genérico; 5 nuevos iconos SVG incluidos (
printer,server,smartphone,cpu,laptop) - Topología — detección mDNS — el tipo de dispositivo se detecta mediante
avahi-browse(opcional, se ejecuta en paralelo con el escaneo de nmap); identifica impresoras (_ipp._tcp,PDL Printer), teléfonos Android y televisores (_googlecast._tcp,_androidtvremote2._tcp), Macs de Apple (am=Mac16,xen el TXT de AirPlay), dispositivos NAS (Synology informa demodel=Xserve), escritorios KDE Connect; si avahi no está disponible, recurre a la OUI del fabricante MAC y a heurísticas del nombre de host - Topología — panel de detalles muestra la clase de dispositivo detectada (Impresora, Smartphone, NAS…) en lugar de la etiqueta genérica «Host»; i18n en los 8 idiomas
- Traceroute — auto-zoom — el mapa mundial se amplía y centra automáticamente en el cuadro delimitador de los saltos geolocalizados al final de cada ruta; se desactiva cuando el usuario desplaza o hace zoom manualmente; se restablece en el siguiente traceroute; clic derecho para volver a la vista completa del mundo
v1.3.5 — 2026-06-06
- Compatibilidad con macOS — los 9 módulos de red ahora funcionan en macOS sin alterar el comportamiento en Linux; cada módulo detecta la plataforma al iniciarse (
_IS_MACOS) y usa comandos nativos de macOS:route -n get default,ifconfig,scutil --dns,networksetup,system_profiler SPAirPortDataType,pfctl,netstat -ib; la elevación de privilegios usaosascript+with administrator privilegesen lugar depkexec; la fuente monoespaciada usaMenloen lugar deMonospace - Módulos con rutas duales Linux/macOS: Panel general, Interfaces, Wi-Fi, Topología, Ancho de banda, Firewall (pf.conf + pfctl), Gestor de conexiones, Archivo hosts, MTR
- Módulos sin cambios (herramientas idénticas en ambas plataformas): DNS, Escaneo Nmap, SNMP, Whois
v1.3.2 — 2026-06-06
- i18n ampliado a 8 idiomas — se añaden Italiano, Português, 日本語 (japonés) y 中文 (chino simplificado); toda la interfaz (los 27 módulos, ~720 claves de traducción) está ahora disponible en FR / EN / ES / DE / IT / PT / JA / ZH; aparece un aviso de reinicio al cambiar el idioma en Configuración
- Ayuda contextual en 8 idiomas — el panel de la insignia
?(descripción, ejemplos de uso y comandos CLI equivalentes) cubre ahora los 8 idiomas para cada módulo; antes JA y ZH recurrían al inglés - Corrección de errores — los tooltips de navegación de SMB/NFS y del archivo Hosts se mostraban en francés independientemente del idioma seleccionado; se añaden las claves faltantes
nav_hint_smb_nfsynav_hint_hostsa los 7 bloques de idioma no francés
v1.3.1 — 2026-06-05
- Gestor de claves SSH — lista todos los pares de claves en
~/.ssh/(archivo, tipo, bits, comentario, huella SHA256); genera claves Ed25519 o RSA 4096 con frase de contraseña opcional (detección de discrepancias, nombre de archivo automático según el tipo); copia la clave pública al portapapeles; despliega en un servidor remoto mediantessh-copy-iden una terminal integrada con soporte de stdin para los avisos de contraseña; elimina pares de claves con confirmación; crea~/.ssh/automáticamente si no existe; i18n: fr / en / es / de
v1.3.0 — 2026-06-03
- Inspector TLS/SSL — inspecciona el certificado de cualquier servidor: CN del sujeto, SAN, emisor, fechas de validez (codificadas por color: verde / naranja < 30 días / rojo caducado), número de serie, protocolo TLS, suite de cifrado y cadena de certificados (mediante
openssl s_client); funciona con certificados válidos, caducados y autofirmados; mensajes de error claros para hosts inalcanzables - Explorador SMB/NFS — lista recursos compartidos y exportaciones de cualquier servidor; pestaña SMB:
smbclient -Lcon credenciales opcionales, muestra nombre / tipo / comentario del recurso compartido; pestaña NFS:showmount -e, muestra la ruta de exportación y la lista de acceso; detecta herramientas ausentes con instrucciones de instalación específicas por distribución - Editor del archivo hosts — ver y editar
/etc/hosts; tabla con conmutador habilitar/deshabilitar, añadir/editar/eliminar entradas mediante diálogo; filtrar por IP o nombre de host; guarda mediantepkexec cp(diálogo de autenticación de polkit) - install.sh — nuevo script para Debian / Ubuntu / Linux Mint: crea un venv en
~/.local/share/nmlinux/venv, instala las dependencias del sistema vía apt, crea un lanzador y una entrada.desktop(corrige el error PEP 668externally-managed-environment)
v1.2.9 — 2026-05-30
- VNC — nuevo módulo para gestionar perfiles de conexión VNC; grupos/subgrupos como SSH y RDP; lanza
vncviewer(TigerVNC); compatible con macOS ARD (la autenticación DH30 la gestiona nativamente vncviewer); la contraseña nunca se almacena; detecta la ausencia devncviewercon instrucciones de instalación específicas por distribución - Acerca de — Herramientas y servicios — nueva sección que lista todas las herramientas y API de terceros de las que depende la aplicación
- i18n de la barra lateral — los 23 tooltips de navegación están ahora traducidos a FR/EN/ES/DE (antes estaban fijados en francés); etiquetas corregidas: Topología, Conexiones, Subred
v1.2.8 — 2026-05-30
- Escritorio remoto (RDP) — nuevo módulo para gestionar perfiles de conexión RDP de Windows; grupos/subgrupos como SSH; lanza
xfreerdpcomo proceso externo; la contraseña se solicita al conectar y nunca se almacena; campos: host, puerto, usuario, dominio, resolución, pantalla completa; detecta la ausencia dexfreerdpcon instrucciones de instalación específicas por distribución (Arch / Debian / Fedora)
v1.2.7 — 2026-05-26
- Iconos Lucide integrados — 21 iconos SVG de Lucide (MIT) están ahora incluidos en
assets/icons/; se renderizan en tiempo de ejecución medianteQSvgRenderer; coloreados#60a5fa; la aplicación ya no requiere ningún tema de iconos del sistema (Breeze, Adwaita, Papirus…)
v1.2.6 — 2026-05-24
- Compatibilidad con GNOME / Adwaita — iconos corregidos en escritorios que no son KDE:
main.pyahora detecta automáticamente el tema de iconos GTK mediantegsettingsy lo aplica a Qt; cadenas de respaldo ampliadas para Wi-Fi, Traceroute, Prueba de velocidad, Interfaces, Escáner de puertos, Firewall, MTR;themed_icon()ahora valida que exista un pixmap real antes de aceptar un icono del tema - Compatibilidad con NixOS / KDE — iconos corregidos en NixOS: Breeze 6.x solo incluye iconos SVGZ; el wrapper de Nix ahora añade
qt6.qtsvgaQT_PLUGIN_PATHpara que Qt pueda renderizar iconos SVG;themed_icon()prueba los tamaños 22/24/16/32/48 (Breeze usa 22 px, no 24); el tema se fuerza abreezecuando se detecta el conjunto de iconos incluido en Nix; también comprueba/etc/xdg/kdeglobalspara la configuración de KDE en todo el sistema
v1.2.5 — 2026-05-23
- MTR — My Traceroute integrado: ejecuta
mtr --report, analiza la salida de texto, muestra una tabla en vivo con % de pérdida, RTT último/promedio/mejor/peor/jitter por salto, codificada por colores según la gravedad de la pérdida; modo continuo; exportación CSV + TXT - Prueba de velocidad — prueba de velocidad sin dependencias mediante
curl+ Cloudflare (speed.cloudflare.com): descarga (25 MB), subida (10 MB), ping a1.1.1.1; hasta 5 ejecuciones guardadas en JSON; gráfico de líneas histórico (descarga/subida) - Visor de firewall — visor de reglas de solo lectura: analiza
/etc/nftables.confy/etc/iptables/*.rulessin root; conjunto de reglas en vivo mediantepkexec nft list ruleset; columnas: Tabla / Cadena / Regla / Puerto / Acción / Comentario; acciones codificadas por color; filtro en vivo - Sugerencias en la barra lateral — cada entrada de navegación muestra ahora una insignia
?sutil; al pasar el cursor se muestra un tooltip que describe lo que hace el módulo; se añade un separador vertical entre la barra lateral y el área de contenido - i18n — todos los módulos nuevos traducidos a francés, inglés y español
v1.2.0 — 2026-05-22
- Adaptación del tema — soporte completo de cambio claro/oscuro en tiempo de ejecución en todas las páginas; nuevo
core/theme.pyconis_dark(),color_ok(),color_err(); los widgets de pintado personalizados (_Graph,_MapWidget) leen la paleta en el momento de pintar; todos los colores fijos de Catppuccin Mocha se sustituyen por roles semánticos de la paleta de Qt - Máscara de subred — las páginas Panel general, Interfaces y Conexiones muestran ahora la máscara de subred en notación decimal punteada (p. ej.,
255.255.255.0) derivada del prefijo CIDR - Monitor de ancho de banda — un botón explícito Iniciar/Detener sustituye al autoarranque poco fiable al cargar la página
- Exportar CSV/TXT — las páginas Nmap y Traceroute ofrecen ahora botones Exportar CSV y Exportar TXT (aparecen al completarse el escaneo/trazado)
- i18n — nuevas claves de traducción para todas las funciones anteriores (fr/en/es/de)
v1.1.1 — 2026-05-16
- Terminal SSH — reescritura completa con pyte (emulador VT100/xterm) + renderizador QPainter; 2000 líneas de scrollback, parpadeo del cursor, soporte de 256 colores
- Traceroute visual — mapa mundial (Natural Earth 110m), geolocalización en vivo por salto (ip-api.com), zoom/pan interactivos, analizador dual (respaldo
traceroute/tracepath) - Monitor de ancho de banda — rendimiento por interfaz en tiempo real, gráfico deslizante de 60 s, velocidades en vivo, totales y picos de sesión
- Wake on LAN — paquete mágico en Python puro (broadcast UDP), libro de hosts persistente (JSON)
- Escáner de IP — resolución de nombres de host mediante
getent/avahi/nmblookup; dirección MAC, fabricante (OUI IEEE, 39 000 entradas), columnas de interfaz; exportación CSV/TXT actualizada - i18n — traducción completa fr/en/es/de para todas las páginas nuevas
v1.0.0 — 2026-05-14
Versión pública inicial — 13 módulos: Panel general, Interfaces, Wi-Fi, Calculadora de subredes, Consulta DNS, Monitor de ping, Escáner de IP, Escáner de puertos, Nmap, Whois, SNMP, SNTP/NTP, SSH.
Requisitos
Herramientas del sistema
Linux — la mayoría ya están presentes en una instalación estándar:```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** — instalar mediante [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 incluye
ping,dig,traceroute,netstat,ifconfig,smbutilyroutede forma nativa.networksetupyscutilson herramientas integradas de macOS, no necesitan instalación. La búsqueda de proveedores OUI en IP Scanner tampoco necesita instalación: la base de datosmanufde Wireshark se descarga automáticamente en segundo plano la primera vez que se usa y se guarda en caché localmente.
Herramientas opcionales
| Herramienta | Característica | Linux | macOS |
|---|---|---|---|
xfreerdp / xfreerdp3 | Escritorio remoto (RDP) | Arch: freerdp · Ubuntu ≤24.04: freerdp2-x11 · Ubuntu 26.04+: freerdp3-x11 | opcional — recurre a Microsoft Remote Desktop (open rdp://) |
vncviewer | VNC | Arch: tigervnc · Debian: tigervnc-viewer | opcional — recurre a Screen Sharing de macOS (open vnc://, integrado) |
nm-connection-editor | Editar conexiones desde el Administrador de conexiones | Arch: nm-connection-editor | — (en su lugar se abre System Preferences) |
traceroute | Alternativa a traceroute (se usa tracepath de forma predeterminada) | Arch: traceroute | integrado |
mount.cifs (cifs-utils) | Montar recursos compartidos SMB desde el menú contextual | Arch/Debian: cifs-utils | integrado (mount_smbfs) |
iperf3 | Prueba de velocidad — pestaña LAN | Arch: iperf3 · Debian/Ubuntu: iperf3 | brew install iperf3 |
Python
- Python 3.11+
- PySide6 6.6+
- ptyprocess 0.7+
- pyte 0.8+ (
pip install pyteorsudo pacman -S python-pyte) - tftpy 0.8+ (
pip install tftpyorsudo pacman -S python-tftpy) — módulo de transferencia de archivos
Instalación
Opción 1 — Arch Linux / Manjaro / EndeavourOS (AUR)```bash
yay -S nmlinux
Todas las dependencias (PySide6, ptyprocess, pyte, nmcli, …) se gestionan automáticamente.
### Opción 2 — NixOS / Nix
Ejecuta directamente con el `flake.nix` incluido — no se necesita instalación en todo el sistema:```bash
git clone https://github.com/thongor77/nmlinux.git
cd nmlinux
nix run .
O entra en un shell de desarrollo:```bash nix develop python3 -m nmlinux.main
Todas las dependencias de Python (PySide6, ptyprocess, pyte, tftpy) y herramientas del sistema (nmcli, nmap, freerdp, vncviewer, mtr, avahi-browse…) se proporcionan automáticamente mediante el wrapper de Nix.
### Opción 4 — AppImage (cualquier distro Linux, sin instalación)
Descarga `NMLinux-x.y.z-x86_64.AppImage` desde la [última versión](https://github.com/thongor77/nmlinux/releases/latest):```bash
chmod +x NMLinux-*.AppImage
./NMLinux-*.AppImage
No se requiere instalación — Python, Qt y todos los módulos de NMLinux están incluidos en un solo archivo.
Funciona en cualquier Linux x86_64 con glibc 2.17+ (Ubuntu 16.04+, Fedora 26+, Arch, Mint, etc.).
Las herramientas de red del sistema (
nmap,whois,mtr…) no están incluidas — instálalas con tu gestor de paquetes para que los módulos correspondientes funcionen. Consulta Requisitos a continuación.
Opción 5 — macOS
La forma más rápida — bootstrap en una sola línea. Funciona en una Mac completamente limpia: instala Xcode Command Line Tools, Homebrew, todas las herramientas del sistema y luego NMLinux. Es seguro volver a ejecutarlo (actualiza en lugar 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
Instalar en todo el sistema (`/Applications`) en lugar 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
No se necesita cuenta de desarrollador de Apple ni notarización de pago: es el mismo script de código abierto
install_macos_app.shen segundo plano, solo que se descarga y se ejecuta por ti. El script es bash simple y legible; siéntete libre de abrir/tmp/bootstrap_macos.shy leerlo antes de ejecutarlo, o revísalo directamente aquí:packaging/bootstrap_macos.sh.La secuencia de descargar y luego ejecutar (en lugar de canalizar directamente hacia
bash) es intencional: en una Mac recién configurada, el script activa pasos interactivos anidados (el instalador de Xcode Command Line Tools, el propio instalador de Homebrew que solicita tu contraseña desudo) que leen desde la terminal; canalizar el script directamente haciabashpuede hacer que esos avisos anidados interfieran con el flujo de entrada del propio script y lo detengan a mitad de camino. Ejecutarlo desde un archivo descargado evita eso por completo.
Instalación manual — si prefieres ejecutar cada paso tú mismo, o ya tienes 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 actualizar: `git pull && bash packaging/install_macos_app.sh`
Para desinstalar: `bash packaging/uninstall_macos.sh`
Para instalar en todo el sistema (`/Applications`): `bash packaging/install_macos_app.sh --system`
El script instala automáticamente los siguientes paquetes de Python en el venv:
- `PySide6`, `ptyprocess`, `pyte`, `tftpy`
- `pyobjc-framework-Cocoa` — barra de menús de macOS, diálogos nativos
- `pyobjc-framework-CoreWLAN` — escaneo de SSID de Wi-Fi
- `pyobjc-framework-CoreLocation` — permiso de Servicios de Localización para nombres de Wi-Fi
**Wi-Fi en macOS 26 (Tahoe):** en el primer lanzamiento, macOS solicitará permiso para Servicios de Localización — concédelo para mostrar los nombres de las redes Wi-Fi. El permiso aparece en *Configuración del Sistema › Privacidad y Seguridad › Servicios de Localización*.
> La mayoría de los módulos funcionan en macOS sin modificación. RDP recurre a `open rdp://` (Microsoft Remote Desktop), VNC recurre a `open vnc://` (Screen Sharing integrado). El Administrador de Conexiones tiene funcionalidad reducida en macOS (`nmcli` no está disponible).
### Opción 6 — Debian / Ubuntu / Linux Mint (script de instalación)
> **Nota para usuarios de Linux Mint / Ubuntu:** `pip install` está bloqueado a nivel de sistema en Python 3.12+ (PEP 668 — `externally-managed-environment`). Usa el script de instalación proporcionado — crea un entorno virtual automáticamente e instala una entrada `.desktop`.```bash
git clone https://github.com/thongor77/nmlinux.git
cd nmlinux
bash install.sh
El script:
- Instala las dependencias del sistema mediante
apt(libgl1, python3-venv, freerdp, tigervnc…) - Crea un entorno virtual en
~/.local/share/nmlinux/venv - Instala NMLinux y sus dependencias de Python dentro del venv
- Crea un lanzador en
~/.local/bin/nmlinux - Añade una entrada
.desktoppara que NMLinux aparezca en el menú de aplicaciones
Después de la instalación, ejecuta nmlinux desde una terminal o inícialo desde el menú de aplicaciones.
Opción 7 — Wheel (todas las distribuciones / macOS)
Descarga el .whl desde la última versión e instálalo:```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+:** `pipx` requiere que las bibliotecas del sistema (libGL, etc.) estén instaladas primero — los comandos anteriores las cubren. Si `pipx install` falla debido a un error de compilación de PySide6, usa la **Opción 4** (script de instalación) en su lugar, que maneja todo automáticamente.
### Opción 8 — Desde el código fuente (Arch / Fedora / macOS)```bash
git clone https://github.com/thongor77/nmlinux.git
cd nmlinux
pip install PySide6 ptyprocess pyte tftpy
python3 -m nmlinux.main
Opción 9 — Entrada de escritorio (KDE / GNOME / etc.)
Copia el archivo .desktop para que NMLinux aparezca en tu lanzador de aplicaciones:```bash
cp data/nmlinux.desktop ~/.local/share/applications/
update-desktop-database ~/.local/share/applications/
Luego edita la ruta de `Exec=` en el archivo si es necesario.
---
## Ejecución```bash
./nmlinux.sh
# or, after pip install:
nmlinux
# or directly:
python3 -m nmlinux.main
Estructura del proyecto```
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
---
## Compatibilidad con entornos de escritorio
Desde la v1.2.7, NMLinux utiliza 21 iconos SVG de [Lucide](https://lucide.dev) incluidos, renderizados en tiempo de ejecución mediante `QSvgRenderer`. La aplicación ya no depende de ningún tema de iconos del sistema (Breeze, Adwaita, Papirus…) y se muestra correctamente en KDE, GNOME, XFCE y otros. El estilo Qt se adapta automáticamente al escritorio en ejecución.
---
## Limitaciones
### Linux
Soporte completo — los 29 módulos disponibles.
### macOS
La mayoría de los módulos funcionan directamente, ya que utilizan herramientas disponibles en ambas plataformas (`ssh`, `dig`, `ping`, `curl`, `nmap`, `openssl`…).
**9 módulos requirieron una adaptación explícita para macOS** (rutas de código duales que detectan la plataforma al inicio): Dashboard, Interfaces, Wi-Fi, Topology, Bandwidth, Firewall, Connection Manager, Hosts File, MTR — estos usan comandos nativos de macOS (`ifconfig`, `networksetup`, `scutil`, `pfctl`, `system_profiler`…) en lugar de sus equivalentes de Linux.
**Módulos con soporte limitado o sin soporte en macOS:**
| Módulo | Estado | Notas |
|--------|--------|-------|
| **RDP** | ✓ macOS | Recurre a `open rdp://` → Microsoft Remote Desktop (App Store) |
| **VNC** | ✓ macOS | Recurre a `open vnc://` → Screen Sharing (integrado, sin instalación) |
| **IP Scanner** | ✓ macOS | Usa `socket.gethostbyaddr()` — Python nativo, sin herramientas adicionales |
| **SMB** | ✓ macOS | Usa `smbutil view` (integrado) en lugar de `smbclient` |
| **NFS** | ✓ macOS | `showmount` integrado; análisis de cabeceras adaptado |
| **Connection Manager** | ⚠ Reducido | Editar/eliminar requieren `nmcli` (solo Linux); la vista de lista funciona |
### General
- Sin integración con root/polkit — las herramientas que requieren privilegios elevados (algunos modos de Nmap, sockets raw) deben ejecutarse con `sudo`; en macOS, la elevación de privilegios utiliza `osascript` + privilegios de administrador
- El reenvío del agente SSH requiere un agente SSH activo (`SSH_AUTH_SOCK`); en macOS, esto lo gestiona automáticamente el sistema, sin necesidad de configuración manual
---
## Créditos y agradecimientos
- **[Anthropic](https://www.anthropic.com)** — Claude Code, el asistente de IA utilizado para construir este proyecto
- El autor, por la visión, las pruebas y la dirección
---
## Apoya el proyecto
Si NMLinux te resulta útil, considera apoyar su desarrollo:
- **PayPal** — [Dona a través de 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`
---
## Licencia
GPL-2.0 — consulta [LICENSE](https://github.com/thongor77/nmlinux/blob/HEAD/LICENSE).
Este proyecto es una reimplementación independiente. No se utilizó ni se tradujo ningún código de NETworkManager.





