我怀念 Windows 上的网络集成工具,所以自己开发了一个 Linux 版本。
I missed Network integrated tools on Windows so I built a Linux equivalent

原始链接: https://github.com/thongor77/nmlinux

**NMLinux** 是一款功能强大的开源 Linux 网络管理工具,灵感源自 BornToBeRoot 开发的 Windows 版“NETworkManager”。该程序完全由 Python 和 PySide6 (Qt 6) 从零编写,为系统管理员和高级用户提供了一个集成化的图形界面。 主要功能包括: * **全面的工具集:** 包含 20 多个模块,如 SSH 终端、IP/端口扫描器、子网计算器、DNS 查询、网速测试、网络唤醒 (WoL) 以及实时带宽监控。 * **远程管理:** 专用的 RDP(通过 xfreerdp)和 VNC(通过 TigerVNC)模块,支持加密连接配置文件,且不会存储密码。 * **高级可视化:** 提供带有世界地图地理定位的可视化路由追踪以及局域网拓扑图。 * **系统集成:** 提供只读防火墙查看器、连接管理器(通过 nmcli),并原生支持亮/暗主题。 * **桌面环境无关:** 内置 Lucide 图标集,并包含确保在 GNOME、KDE 及其他桌面环境中渲染一致的逻辑。 NMLinux 是一个独立项目,与 GNOME NetworkManager 守护进程无关。该软件高度模块化,支持多种语言(法/英/西/德),并支持将扫描数据导出为 CSV/TXT 格式。可通过 AUR、Python wheel 包或源代码获取。

```Hacker News 最新 | 往期 | 评论 | 提问 | 展示 | 招聘 | 提交 登录 我怀念 Windows 上的集成网络工具,所以我为 Linux 构建了一个替代品 (github.com/thongor77) 9 分,发布者:magetriste,1 小时前 | 隐藏 | 往期 | 收藏 | 2 条评论 帮助 mzmzmzm 9 分钟前 | 下一条 [–] 感谢你作为一名 Arch 用户也将其放在了用户仓库中 回复 magetriste 1 小时前 | 上一条 [–] 该项目名为 NMLinux。标题是指 BornToBeRoot 开发的 NETworkManager (https://github.com/BornToBeRoot/NETworkManager),这是一个我希望在 Linux 上拥有的 Windows 图形化网络诊断工具。NMLinux 与 Linux 的 NetworkManager 守护进程 (/usr/bin/NetworkManager) 没有任何关系。它使用 Python 3 + PySide6 (Qt6) 构建。一个图形界面集成了 23 种工具:IP 扫描器、SSH 终端、VNC、RDP、Traceroute 地图、MTR、Nmap、防火墙查看器等。可在 AUR 上获取。 https://github.com/thongor77/nmlinux — 版本 1.2.9 回复 准则 | 常见问题 | 列表 | API | 安全 | 法律 | 申请加入 YC | 联系 搜索:```
相关文章

原文

Donate

A free Linux adaptation of NETworkManager by BornToBeRoot.

NMLinux brings the spirit of NETworkManager to Linux desktops, reimplemented from scratch in Python and PySide6 (Qt 6). It is not a port of the original C# code, but an independent project inspired by the same idea: a single, unified GUI for the most common network tools a sysadmin or power user needs.

Note

NMLinux is not related to the Linux system daemon /usr/bin/NetworkManager (NetworkManager by Red Hat/GNOME). The name comes from NETworkManager by BornToBeRoot, a similar tool for Windows that served as the original inspiration.

Built with Claude Code (Anthropic) and the contribution of its author.



  • VNC — new module for managing VNC connection profiles; groups/subgroups like SSH and RDP; launches vncviewer (TigerVNC); compatible with macOS ARD (DH30 auth handled natively by vncviewer); password never stored; detects missing vncviewer with distro-specific install instructions
  • About — Tools & services — new section listing all third-party tools and APIs the app depends on
  • Sidebar i18n — all 23 nav tooltips now translated into FR/EN/ES/DE (were hardcoded French); labels corrected: Topology, Connections, Subnet
  • Remote Desktop (RDP) — new module for managing Windows RDP connection profiles; groups/subgroups like SSH; launches xfreerdp as an external process; password prompted at connect time, never stored; fields: host, port, username, domain, resolution, fullscreen; detects missing xfreerdp with distro-specific install instructions (Arch / Debian / Fedora)
  • Bundled Lucide icons — 21 SVG icons from Lucide (MIT) are now bundled in assets/icons/; rendered at runtime via QSvgRenderer; coloured #60a5fa; app no longer requires any system icon theme (Breeze, Adwaita, Papirus…)
  • GNOME / Adwaita compatibility — fixed icons on non-KDE desktops: main.py now auto-detects the GTK icon theme via gsettings and applies it to Qt; extended fallback chains for Wi-Fi, Traceroute, Speed Test, Interfaces, Port Scanner, Firewall, MTR; themed_icon() now validates that a real pixmap exists before accepting a theme icon
  • NixOS / KDE compatibility — fixed all icons on NixOS: Breeze 6.x ships SVGZ-only icons; the Nix wrapper now adds qt6.qtsvg to QT_PLUGIN_PATH so Qt can render SVG icons; themed_icon() tries sizes 22/24/16/32/48 (Breeze uses 22 px, not 24); theme forced to breeze when the Nix-bundled icon set is detected; also checks /etc/xdg/kdeglobals for system-wide KDE config
  • MTR — embedded My Traceroute: runs mtr --report, parses text output, displays a live table with Loss %, RTT Last/Avg/Best/Worst/Jitter per hop, colour-coded by loss severity; continuous mode; CSV + TXT export
  • Speed Test — dependency-free speed test via curl + Cloudflare (speed.cloudflare.com): download (25 MB), upload (10 MB), ping to 1.1.1.1; up to 5 runs persisted in JSON; historical line graph (Download/Upload)
  • Firewall Viewer — read-only ruleset viewer: parses /etc/nftables.conf and /etc/iptables/*.rules without root; live ruleset via pkexec nft list ruleset; columns: Table / Chain / Rule / Port / Action / Comment; colour-coded actions; live filter
  • Sidebar hints — each nav entry now shows a subtle ? badge; hovering displays a tooltip describing what the module does; vertical separator added between sidebar and content area
  • i18n — all new modules translated in French, English, and Spanish
  • Theme adaptation — full runtime light/dark switching support across all pages; new core/theme.py with is_dark(), color_ok(), color_err(); custom painter widgets (_Graph, _MapWidget) read palette at paint time; all hardcoded Catppuccin Mocha colours replaced with semantic Qt palette roles
  • Subnet mask — Dashboard, Interfaces, and Connexions pages now display dotted-decimal subnet mask (e.g. 255.255.255.0) derived from CIDR prefix
  • Bandwidth Monitor — explicit Start/Stop button replaces unreliable auto-start on page load
  • Export CSV/TXT — Nmap and Traceroute pages now offer Export CSV and Export TXT buttons (appear after scan/trace completes)
  • i18n — new translation keys for all above features (fr/en/es/de)
  • SSH terminal — complete rewrite with pyte (VT100/xterm emulator) + QPainter renderer; 2000-line scrollback, cursor blink, 256-colour support
  • Visual Traceroute — world map (Natural Earth 110m), live geolocation per hop (ip-api.com), interactive zoom/pan, dual parser (traceroute / tracepath fallback)
  • Bandwidth Monitor — real-time per-interface throughput, 60s sliding graph, live speeds, session totals and peaks
  • Wake on LAN — pure Python magic packet (UDP broadcast), persistent host book (JSON)
  • IP Scanner — hostname resolution via getent/avahi/nmblookup; MAC address, vendor (IEEE OUI 39K entries), interface columns; CSV/TXT export updated
  • i18n — full fr/en/es/de translation for all new pages

Initial public release — 13 modules: Dashboard, Interfaces, Wi-Fi, Subnet Calculator, DNS Lookup, Ping Monitor, IP Scanner, Port Scanner, Nmap, Whois, SNMP, SNTP/NTP, SSH.


Module Description
Dashboard Local machine info, gateway, public IP, geolocation, DNS resolvers
Connection Manager NetworkManager profiles via nmcli: list, filter, connect/disconnect/edit/delete
Interfaces Network interfaces table with per-interface detail (ip + nmcli)
Wi-Fi Available networks, signal bars, security, connected network highlighted
Subnet Calculator Network/broadcast/host range from CIDR, host table up to 4096 entries
DNS Lookup dig-based lookup for A, AAAA, MX, TXT, NS, CNAME, PTR, SOA, ANY
Ping Monitor Continuous ping to multiple hosts, RTT stats, packet loss %
IP Scanner CIDR/range ping scan, 50 threads, hostname (DNS/mDNS/NetBIOS), MAC address, vendor (OUI), interface, CSV + TXT export
Port Scanner TCP connect scan, 200 threads, service presets, CSV + TXT export
Nmap 7 scan modes, XML output parsing, Host/Port/Protocol/State/Service table, CSV + TXT export
Whois Raw whois output in monospace
SNMP snmpwalk/snmpget, v1/v2c, 10 OID presets, results table
SNTP / NTP Pure Python RFC 4330 UDP client, offset/delay/stratum/reference
SSH Embedded PTY terminal (pyte/VT100), saved connections (JSON), key auth, scrollback
Remote Desktop RDP connection profiles (groups/subgroups); launches xfreerdp; password never stored
VNC VNC connection profiles (groups/subgroups); launches vncviewer (TigerVNC); macOS ARD compatible; password never stored
Visual Traceroute Hop-by-hop route on a world map, live geolocation (ip-api.com), zoom & pan, CSV + TXT export
MTR Embedded My Traceroute: loss %, RTT Last/Avg/Best/Worst/Jitter per hop, colour-coded, CSV + TXT export
Firewall Viewer Read-only nftables + iptables/ip6tables ruleset (no root); live via pkexec; filter by table/chain/action
Speed Test Download/upload/ping via Cloudflare; no external tool beyond curl; history graph (last 5 runs)
Bandwidth Real-time per-interface throughput: 60s sliding graph, live speeds, session totals, peak
Wake on LAN Pure Python magic packet (UDP broadcast), persistent host book, no external tool required
Topology Map Auto-discovers LAN devices via nmap -sn; interactive graph with draggable nodes, zoom/pan, detail panel
Settings Language selection (French, English, Spanish, German), persisted

Most are already present on a standard Linux install:

# 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
Tool Feature Package
xfreerdp / xfreerdp3 Remote Desktop (RDP) Arch: freerdp · Debian: freerdp2-x11 · Fedora: freerdp
vncviewer VNC Arch: tigervnc · Debian: tigervnc-viewer · Fedora: tigervnc
nm-connection-editor Edit connections from Connection Manager Arch: nm-connection-editor
traceroute Traceroute alternative (tracepath used by default) Arch: traceroute
  • Python 3.11+
  • PySide6 6.6+
  • ptyprocess 0.7+
  • pyte 0.8+ (pip install pyte or sudo pacman -S python-pyte)

Option 1 — Arch Linux / Manjaro / EndeavourOS (AUR)

All dependencies (PySide6, ptyprocess, pyte, nmcli, …) are handled automatically.

Option 2 — Wheel (all distros)

Download the .whl from the latest release and install it:

pip install nmlinux-1.2.9-py3-none-any.whl
nmlinux
git clone https://github.com/thongor77/nmlinux.git
cd nmlinux
pip install PySide6 ptyprocess pyte
python3 -m nmlinux.main

Option 4 — Desktop entry (KDE / GNOME / etc.)

Copy the .desktop file to make NMLinux appear in your application launcher:

cp data/nmlinux.desktop ~/.local/share/applications/
update-desktop-database ~/.local/share/applications/

Then edit the Exec= path in the file if needed.


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

nmlinux/
  core/
    i18n.py         — Translation system (fr/en/es/de), tr(key) function
    icons.py        — themed_icon(): 21 bundled Lucide SVG icons via QSvgRenderer
    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
    cli_bar.py      — CliBar singleton: pedagogical CLI equivalent bar
  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
    firewall.py     — Firewall Viewer: nftables + iptables parser, live 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
    snmp.py         — SNMP
    sntp.py         — SNTP / NTP
    speedtest.py    — Speed Test: curl + Cloudflare, history graph
    ssh.py          — SSH page (connection manager + terminal)
    subnet.py       — Subnet Calculator
    terminal_view.py — TerminalView: pyte VT100 emulator + QPainter renderer
    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

Desktop environment compatibility

Since v1.2.7, NMLinux uses 21 bundled Lucide SVG icons rendered at runtime via QSvgRenderer. The app no longer depends on any system icon theme (Breeze, Adwaita, Papirus…) and displays correctly on KDE, GNOME, XFCE, and others. The Qt style adapts to the running desktop automatically.


  • Linux only (relies on nmcli, ip, dig, ping, subprocess tools)
  • No root/polkit integration — tools requiring elevated privileges (some Nmap modes, raw sockets) must be run manually with sudo
  • SSH supports password and key-based auth; agent forwarding not yet implemented

Credits and acknowledgements

  • BornToBeRoot — for NETworkManager, the original inspiration and reference for features and UX
  • Anthropic — Claude Code, the AI assistant used to build this project
  • The author, for the vision, testing, and direction

GPL-2.0 — see LICENSE.

This project is an independent reimplementation. No code from NETworkManager was used or translated.

联系我们 contact @ memedata.com