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 rewrite inspired by the same idea: a single, unified GUI for the most common network tools a sysadmin or power user needs.
Built with Claude Code (Anthropic) and the contribution of its author.
| Dashboard | SSH Terminal |
|---|---|
![]() |
![]() |
| DNS Lookup | Port Scanner |
|---|---|
![]() |
![]() |
- 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/tracepathfallback) - 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 |
| 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 |
| 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 |
| Visual Traceroute | Hop-by-hop route on a world map, live geolocation (ip-api.com), zoom & pan |
| 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 |
| Settings | Language selection (French, English, Spanish, German), persisted |
Most are already present on a standard Linux install:
# Debian / Ubuntu
sudo apt install iproute2 network-manager dnsutils nmap whois snmp
# Arch / EndeavourOS
sudo pacman -S iproute2 networkmanager bind-tools nmap whois net-snmp iputils
# Fedora
sudo dnf install iproute NetworkManager bind-utils nmap whois net-snmp-utils- Python 3.11+
- PySide6 6.6+
- ptyprocess 0.7+
- pyte 0.8+ (
pip install pyteorsudo pacman -S python-pyte)
yay -S nmlinuxAll dependencies (PySide6, ptyprocess, pyte, nmcli, …) are handled automatically.
Download the .whl from the latest release and install it:
pip install nmlinux-1.1.1-py3-none-any.whl
nmlinuxgit clone https://github.com/thongor77/nmlinux.git
cd nmlinux
pip install PySide6 ptyprocess pyte
python3 -m nmlinux.mainCopy 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.mainnmlinux/
core/
i18n.py — Translation system (fr/en/es/de), tr(key) function
icons.py — themed_icon() with cross-desktop fallback chains
settings.py — AppSettings dataclass, JSON persistence
ssh.py — SshConnection dataclass, SshStore
terminal.py — SshWorker (QThread) + PTY via ptyprocess, emits raw bytes
pages/
about.py — About page (credits, links)
dashboard.py — Dashboard
dns.py — DNS Lookup
interfaces.py — Network Interfaces
ip_scanner.py — IP Scanner
nmap_scan.py — Nmap
ping.py — Ping Monitor
port_scanner.py — Port Scanner
settings.py — Settings page
snmp.py — SNMP
sntp.py — SNTP / NTP
ssh.py — SSH page (connection manager + terminal)
subnet.py — Subnet Calculator
terminal_view.py — TerminalView: pyte VT100 emulator + QPainter renderer
traceroute.py — Visual Traceroute: world map, geolocation, zoom/pan
bandwidth.py — Bandwidth Monitor: per-interface 60s graph, live stats
wol.py — Wake on LAN: magic packet, persistent host book
whois.py — Whois
wifi.py — Wi-Fi
assets/
world.geojson — Natural Earth 110m countries (map background)
window.py — MainWindow (sidebar + QStackedWidget)
main.py — Entry point
NMLinux uses QIcon.fromTheme() with fallback chains for every icon, so it
displays correctly on KDE (Breeze), GNOME (Adwaita/Yaru), 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
- 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.



