
nmlinux v1.7.11
适用于 Linux 的统一网络工具包 — Python 3 + PySide6
NMLinux · v1.7.11
适用于 Linux 和 macOS 的统一网络工具包 — 检查、连接、诊断。
NMLinux 是一个统一的单窗口 GUI,将 29 个网络模块汇集在一个窗口中:接口监控、Wi-Fi、DNS、SSH 终端、防火墙查看器、拓扑图、路由追踪等等。它使用 Python 和 PySide6(Qt 6)从零构建,支持 8 种界面语言,除标准系统工具外无任何外部依赖。
[!NOTE] NMLinux 与 Linux 系统守护进程
/usr/bin/NetworkManager(Red Hat/GNOME 的 NetworkManager)无关。 NMLinux 是一个使用 Python 和 PySide6 从零构建的独立项目。
由 Claude Code(Anthropic)构建,并得益于其作者的贡献。
开发流程
NMLinux 借助 AI 辅助构建 — 具体来说就是 Claude Code — 这一点在本仓库的任何地方都没有隐瞒。如今几乎每个严肃的软件项目都会在流程中的某个环节使用 AI,无论它是否明说。所以“是否使用了 AI”并不是有趣的问题。有趣的问题是:当 AI 出错时,有没有什么东西能接住它?
如果你宁愿亲自查证而不是听我一面之词,以下就是这些保障:
- 162 项测试 —
pytest tests/ -v。纯逻辑测试加上少量真实的 Qt 控件测试(菜单、表格),没有把有意思的部分 mock 掉。 docs/Decisions-Techniques.md— 每一个不显而易见的决策、被否决的备选方案,以及被发现并修复的 bug(包括由 AI 引入的),都写明了推理过程。docs/Architecture.md和docs/Carte-des-Modules.md— 代码的实际结构,并与发布内容保持同步。- 每次发布前运行一次 i18n 一致性检查,以捕获 8 种受支持语言中缺失的翻译键。
这些保障的存在不是因为 AI 不可信,而是因为任何东西都不应该在缺乏检查流程的情况下发布 — 手写代码也不例外。要评判的是产出及其验证方式,而不是帮助编写它的工具。
还是发现了 bug?这很有用,而不是难堪 — 开一个 issue。
社区
GitHub Discussions 已开放 — 分享反馈、报告想法、提问,或者只是打个招呼。作者在基础设施和运维领域拥有 30 多年经验,构建这个工具是因为 Linux 也值得拥有优秀、免费且简单的软件。
截图
Linux 截图来自 v1.2.7 — macOS 截图来自 v1.3.5。该应用现在有 29 个模块和 8 种界面语言(FR/EN/ES/DE/IT/PT/JA/ZH)。
Linux (KDE)
| 仪表盘 | 拓扑 |
|---|---|
![]() | ![]() |
| 路由追踪 | Wi-Fi |
|---|---|
![]() | ![]() |
macOS
| 仪表盘 | 路由追踪 |
|---|---|
![]() | ![]() |
更新日志
v1.7.11 — 2026-08-03
- Flatpak 打包(KDE Linux):
packaging/flatpak/下的本地构建清单面向 KDE Linux 和其他仅支持 Flatpak 的发行版。nmlinux 所调用的主机 CLI 工具(nmcli,pkexec,mount.cifs,ssh,nmap, …)通过PATH上的flatpak-spawn --host垫片进行桥接,而不是将每个工具单独放入沙箱;PySide6 来自 Flathub 的io.qt.PySide.BaseApp,而非 PyPI wheel。未发布到 Flathub — 而是像 AppImage 一样,通过packaging/flatpak/build-bundle.sh构建单个.flatpak包并附加到每个版本中
v1.7.10 — 2026-08-03
- SSH 终端 — 修复:修复了一个竞态条件:如果会话启动时终端控件的实际尺寸尚不可知,PTY 可能以错误的(默认 24×80)尺寸启动,从而静默丢弃调整大小的请求。这导致远程全屏应用(例如 Claude Code CLI、htop、vim)与真实窗口尺寸脱同步,屏幕底部出现陈旧/残留文本,只有新输出滚动经过时才会被清除。由用户报告,并通过真实的交互式会话复现
v1.7.9 — 2026-08-02
- SSH 终端 — 复制/粘贴:用鼠标选择文本(点击拖拽,高亮显示),用
Ctrl+Shift+C或右键菜单复制;用Ctrl+Shift+V(已有)粘贴。以前根本无法复制 — 完全没有文本选择功能 - SSH 终端 — 多个并发会话:SSH 页面现在将每个连接打开在自己的标签页中,而不是单个共享会话。以前重新连接已保存的连接 — 即使是同一个连接两次 — 会终止活动会话而不打开可用的替代会话;现在每次连接操作都会打开一个新的、独立的标签页
v1.7.8 — 2026-07-14
- 速度测试 — 新增 LAN(iperf3)标签页:在现有的互联网测速之外,新标签页可针对内置的公共服务器列表(26 个国家/地区)或已保存的自定义服务器(例如组织内部服务器)运行仅客户端的
iperf3测试。支持 TCP/UDP、IPv4/IPv6/自动以及反向(下载)方向,UDP 测试会显示抖动/丢包。由 issue #6 建议 - 新增可选依赖:
iperf3— 安装后即可启用 LAN 标签页;否则标签页会显示提示横幅并保持禁用状态
v1.7.6 — 2026-07-05
- 资产清单 — 右键刷新:右键单击一个或多个已扫描的行(支持多选),选择“刷新选中项”即可就地重新扫描这些主机,而无需重新运行完整的网络扫描
- 资产清单 — SSH 认证失败反馈:被拒绝的 SSH 登录现在会显示“SSH 认证失败”,而不是静默失败,同时不会丢失 Nmap 检测到的主机名/操作系统基线 — 已在真实的 Synology NAS 上确认:DSM 的 Auto Block 在其他已配置的凭据组先被尝试后,拒绝了正确的密码
v1.7.5 — 2026-07-04
- Ping 监控 — 已保存目标目录:新的左侧面板可让你将 ping 目标(名称、主机、间隔)保存到持久列表中,这样被监控的主机在应用重启后依然保留,无需重新输入。每个正在监控的行上的 ★ 按钮可在会话期间的任何时候将该主机保存到目录中 — 无需在应用意外关闭前提前规划
- Ping 监控 — “开始监控”:选择已保存的目标并一键开始监控,复用其已保存的间隔
v1.7.4 — 2026-07-04
- 资产清单 — 修复扫描结果不一致:存活检查只发送单个 1 秒超时的 ping 且不重试,这可能在扫描器自身的并发负载下(最多同时探测 40 台主机)或 Wi-Fi 主机在信标之间短暂休眠时漏掉真实设备 — 已在真实子网上实时确认,同一范围重复运行返回了不同的设备数量。该检查现在会在回退到 TCP 端口探测之前重试 ping
- 资产清单 — 新增“刷新空结果”按钮:扫描后,只重新扫描没有返回数据的 IP,而不是再次扫描整个范围;新发现的主机会合并到现有结果中
v1.7.3 — 2026-07-03
- SMB — 从右键菜单挂载共享:在 SMB 标签页中右键单击共享并选择挂载/卸载,即可将其挂载到稳定的本地路径(
~/mnt/<host>_<share>),可从终端和任何其他应用使用 — 不是临时的浏览视图。仅限会话(无 fstab/systemd 持久化),凭据复用现有的用户名/密码字段。Linux 使用pkexec mount -t cifs配合权限受限的凭据文件(绝不通过ps暴露);macOS 直接使用mount_smbfs。当服务器拒绝默认协商(旧款 NAS 设备常见)时,会自动使用较旧的 SMB 方言(vers=2.0)重试 — 两次尝试都在单个认证提示下通过专用辅助进程完成 - 新增可选依赖:
cifs-utils(Linux),用于 SMB 挂载;macOS 已内置
v1.7.2 — 2026-07-03
- macOS 安装 — 修复了在全新 Mac 上发现的两个引导 bug:
bootstrap_macos.sh不再对 Homebrew 安装器强制设置NONINTERACTIVE=1,此前该设置会在任何全新的管理员账户上立即中止,而不是提示输入 sudo 密码;文档中的一行命令现在会先下载脚本,而不是直接通过管道输入bash,因为嵌套的交互步骤(Xcode CLT 安装器、Homebrew 自身的 sudo 提示)在通过管道执行时可能干扰外部脚本自身的输入流 - 通用右键菜单 — 新增 SMB:
SmbNfsPage是 v1.7.0 中发布的模块间右键菜单系统中唯一缺失的目标页面;现在右键单击主机并选择 SMB 会预填主机字段并立即启动扫描,当检测到端口 445 打开时在菜单中以粗体显示 - i18n — 其余仪表盘字符串已翻译:网关延迟标签、TLS 监控列表卡片的标题及其状态行仍然是硬编码的法语;现在已翻译为全部 8 种界面语言
v1.7.1 — 2026-07-02
- macOS 26 (Tahoe) — Wi-Fi SSID 修复:主要数据源从
system_profiler(没有定位服务时返回<redacted>)切换为 CoreWLAN;应用现在在首次启动时请求定位服务权限;授权后 Wi-Fi 页面会显示所有网络的真实名称 - macOS — 连接管理器:已连接的 SSID 现在通过 CoreWLAN 读取,安全模式使用
system_profiler - macOS — SMB:当 NAS 需要凭据时,显示明确的“需要认证”消息;修复了 Homebrew smbclient 产生的虚假 smb.conf 警告
- macOS — 修复了在首次定位服务权限对话框之后退出时可能崩溃的问题
v1.7.0 — 2026-07-02
- 每个包含 IP 或主机名的表格上的通用右键上下文菜单 — 无需复制粘贴即可在模块之间直接导航:右键单击任何发现的主机,然后选择 Ping、扫描端口、Whois、DNS、路由追踪、MTR、SSH、RDP、VNC、在拓扑中查看或添加到清单。当检测到相应端口打开时,SSH/RDP/VNC 菜单项以粗体显示。标签已完整翻译为全部 8 种界面语言。
- 源页面(发出右键操作):IP 扫描器、Nmap、Ping、端口扫描器、路由追踪、MTR、拓扑(节点右键)
- 目标页面(接收主机并预填):Whois(
set_target+ 自动查询)、DNS(set_target仅预填)、Ping(set_target+ 自动开始)、路由追踪(set_target+ 自动开始)、MTR(set_target+ 自动开始)、端口扫描器(set_target+ 聚焦)、SSH / RDP / VNC(set_target打开预填好的新连接表单)、拓扑(load_hosts从 IP 扫描器/Nmap 扫描中注入节点而无需重新扫描 — 自动检测网关、绘制连线、源节点以红色高亮)、资产清单(prefill_hosts直接在发现的主机上开始凭据扫描,跳过 ICMP 发现阶段) - 仪表盘 — 网关 ping 图:实时延迟迷你走势图,每 2 秒更新一次;颜色编码(<20 毫秒绿色 / 20–100 毫秒橙色 / >100 毫秒红色 / 超时红色)
- 仪表盘 — TLS 监控列表摘要:仪表盘中的状态卡片自动反映 TLS 监控列表状态(正常 / 即将到期 / 警报),无需重新查询
- 仪表盘 — 地理地图缩放:窗口调整大小时,世界地图现在会水平扩展
v1.6.4 — 2026-06-28
- macOS:菜单栏现在显示 NMLinux 而不是 Python — 根本原因:
exec()进入 Python 后,NSBundle.mainBundle()解析为Python.framework包(CFBundleName = "Python"),Qt 在 QApplication 构造期间会读取该包;通过在应用程序菜单创建之前修补包的infoDictionary()并通过 AppKit 重命名原生菜单项来修复
v1.6.3 — 2026-06-28
- macOS:首次尝试通过
pyobjc-framework-Cocoa使用NSProcessInfo.setProcessName_修复菜单栏(已被 v1.6.4 取代)
v1.6.2 — 2026-06-28
- macOS:将 bash 启动脚本替换为
install_macos_app.sh中编译的 C 桩,使 macOS 正确地将.app包与运行中的进程关联;添加了setprogname和sys.argv[0]覆盖作为后备方案
v1.6.1 — 2026-06-25
- SSH 终端 — 修复远程回显:在内嵌 SSH 终端中键入的按键会发送到远程 shell,但从未回显回来(登录后键盘看起来“死”了)。nmlinux 强制关闭本地 PTY 的回显,ssh 通过其终端模式(pty-req)将该“无回显”传播到远程 pty,因此远程 shell 停止回显输入。已在全新的 Ubuntu 26.04 虚拟机上复现(新版 OpenSSH 会忠实地应用这些模式)。终端现在保持 PTY 处于正常模式,让 ssh 管理回显,与真实终端模拟器一致。
v1.6.0 — 2026-06-24
- 资产清单 — WinRM Windows(完整):当 ICMP 被 Windows 防火墙阻止时,通过 TCP 端口探测进行主机检测;PowerShell 现在使用完整绝对路径 + EncodedCommand(base64),以防止 cmd.exe 解释管道符
|;无管理员权限时的完整回退链:操作系统通过ver、CPU 通过注册表、内存通过systeminfo、磁盘通过wmic→fsutil(支持区域设置,英文逗号 / 法文空格)→dir /-C - 资产清单 — 多凭据 SSH:支持多组 SSH 凭据;macOS 磁盘已修复(
/System/Volumes/Data)、Apple Silicon CPU 回退(hw.model)、Synology(/volume1)、Unraid(/mnt/user) - Bug 修复:WinRM 错误现在显示在表格中,而不是静默回退;WinRM/SNMP 主机检测不再因存在 SSH 凭据而被阻止;pywinrm 超时已修正
v1.5.3 — 2026-06-24
- macOS .app — Homebrew 工具检测:通过 Homebrew 安装的
sshpass、nmap和snmpget现在可通过其绝对路径被找到并调用;macOS 上的.app包不继承 Homebrew PATH(/opt/homebrew/bin、/usr/local/bin),因此之前安装的工具会被静默忽略 - macOS 更新路径:从仓库根目录运行
git pull && bash packaging/install_macos_app.sh现在是文档化的升级方法;该脚本管理自己的虚拟环境(~/.local/share/nmlinux/venv),且不需要系统级的pip或pipx
v1.5.2 — 2026-06-24
- 资产清单 — 新模块(第 29 个);扫描 CIDR 范围,并通过 SSH、WinRM、SNMP 或 Nmap 从每台主机收集操作系统、CPU、内存、磁盘和运行时间;支持每种协议的多组凭据(依次尝试每组);零保留策略:凭据从不写入磁盘,扫描后从内存中清除;结果可导出为 JSON、CSV 或 Markdown;仪表盘 IP 地理位置部分新增了动画地理地图
- SSH 收集修复:磁盘命令 awk 引用错误已修复;
free -h替换为兼容 BusyBox 的free;macOS 代码路径现在使用sw_vers获取操作系统名称、hw.model作为 Apple Silicon CPU 的回退、/System/Volumes/Data作为 APFS 用户数据卷;Synology/Unraid 卷(/volume1、/mnt/user)在根目录之前被检测;df | tail -1 || …假成功模式已通过test -d守卫修复;lsb_release输出去除周围引号;支持多组 SSH/WinRM 凭据(每台主机依次尝试每组)
v1.5.0 — 2026-06-17
- 文件传输服务器 — 新模块,可直接在应用内启动/停止轻量级 TFTP 或 HTTP 服务器;经典用例:备份和恢复路由器、交换机或打印机配置;一次只激活一个服务器(TFTP 或 HTTP),端口和根目录可配置,本地 IP 显示为复制到剪贴板的按钮;HTTP 包含目录列表(可从局域网中的任何浏览器浏览)、GET(下载)和 POST/PUT(上传);TFTP 支持 GET 和 PUT(双向),端口 69 需要 root — 权限错误时应用显示“以 root 启动(pkexec)”按钮;实时传输日志表(时间戳、文件名、客户端 IP、方向 ↑/↓、大小);端口遍历保护;8 种界面语言;新依赖:
tftpy
v1.4.3 — 2026-06-14
- TLS 监控列表修复:自签名和不受信任的证书现在正确显示为“⚠ 无效 / 不受信任的证书”(橙色),而不是绿色;SSL 异常捕获范围扩大到覆盖所有
ssl.SSLError子类;后台检查运行时,条目现在显示“…(检查中)”,当主机无法访问时显示“—(不可达)”
v1.4.2 — 2026-06-14
- TLS 监控列表 — 用于监控证书到期的主机名持久列表;使用
+ Watch(使用当前主机/端口)或在面板中手动添加主机;启动 2 秒后自动运行后台检查;侧边栏的“TLS 检查器”条目显示彩色圆点:如果任何证书已过期则为红色,如果任何证书在 30 天内到期则为橙色;面板中有重新检查按钮;列表按条目显示状态(✓ / ⚠ / 已过期),并带颜色编码
v1.4.1 — 2026-06-14
- macOS — IP 扫描器:修复了 macOS 上的 MAC 地址、厂商和接口查找;
_arp_entry()现在在 macOS 上调用arp -n <ip>并解析其输出格式(? (IP) at AA:BB:CC on en0),而不是读取/proc/net/arp(仅限 Linux);现在扫描器的全部四列在 macOS 上都能正确填充 - VNC 帮助:在全部 8 种语言中添加了注释,说明 Linux 默认没有 VNC 服务器,并列出了常见的安装选项(x11vnc、tigervnc-server、wayvnc)
v1.4.0 — 2026-06-14
- macOS — IP 扫描器:将
getent(仅限 Linux)替换为 Python 的socket.gethostbyaddr()以实现跨平台反向 DNS 解析;主机名查找现在在 macOS 上无需任何额外工具即可原生工作 - macOS — SMB 浏览器:从
smbclient(需要 Homebrew samba)切换到smbutil view(macOS 内置工具);SMB 共享列表现在无需任何安装即可在 macOS 上工作 - macOS — NFS 浏览器:
showmount在 macOS 上是内置的,但不支持--no-headers;在 macOS 上移除该标志,解析器中跳过标题行;NFS 导出列表现在可以原生列出 - macOS — RDP:当找不到
xfreerdp时,回退到open rdp://URL 方案;如果安装了 Microsoft Remote Desktop(App Store),则打开它,并预填主机、端口、用户名和域 - macOS — VNC:当找不到
vncviewer时,回退到open vnc://URL 方案;打开 macOS 屏幕共享(内置,零安装)
v1.3.9 — 2026-06-13
- SSH 代理转发 — SSH 连接表单中新增“代理转发”复选框;为
ssh命令添加-A;允许在不复制私钥的情况下在服务器之间跳转(PC → A → B);需要活动的 SSH 代理(SSH_AUTH_SOCK);上下文帮助已更新为全部 8 种语言
v1.3.8 — 2026-06-13- Command Palette (Ctrl+P) — 即时键盘导航到全部 27 个模块;按名称和关键词进行模糊搜索(例如 "firewall"、"tls"、"ssh key"、"scan");使用上/下箭头 + Enter 或单击进行导航;可从应用中的任意位置按 Ctrl+P 打开
- Export Manager — 从 File → Export Network Report… 导出完整的网络快照(接口、路由、DNS 解析器),支持 JSON、Markdown、纯文本或 PDF 格式(可选:
pip install reportlab) - 模块级导出按钮 — 在 Interfaces、DNS、Firewall、SSH Connections 和 Connection Manager 页面新增导出按钮;每个页面以所选格式导出其当前数据,并在格式筛选器更改时实时更新文件扩展名
v1.3.6 — 2026-06-12
- Topology — 设备图标 — 每个节点现在会显示与其设备类型匹配的 Lucide SVG 图标(路由器/无线、电脑/笔记本电脑、打印机、NAS/服务器、智能手机、网络交换机、树莓派),取代通用的圆形;新增 5 个内置 SVG 图标(
printer、server、smartphone、cpu、laptop) - Topology — mDNS 检测 — 通过
avahi-browse检测设备类型(可选,与 nmap 扫描并行运行);可识别打印机(_ipp._tcp、PDL Printer)、Android 手机和电视(_googlecast._tcp、_androidtvremote2._tcp)、Apple Mac(AirPlay TXT 中的am=Mac16,x型号)、NAS 设备(Synology 报告model=Xserve)、KDE Connect 桌面;当 avahi 不可用时,回退到 MAC 厂商 OUI 和主机名启发式判断 - Topology — 详情面板 — 显示检测到的设备类别(打印机、智能手机、NAS…),取代通用的 "Host" 标签;已覆盖全部 8 种语言的 i18n
- Traceroute — 自动缩放 — 世界地图会在每条路由结束时自动缩放并居中到地理定位跃点的边界框;用户手动平移或缩放时禁用;在下一次 traceroute 时恢复;右键单击重置为完整世界视图
v1.3.5 — 2026-06-06
- macOS 兼容性 — 全部 9 个网络模块现可在 macOS 上运行,且不破坏 Linux 行为;每个模块在启动时检测平台(
_IS_MACOS)并分支到 macOS 原生命令:route -n get default、ifconfig、scutil --dns、networksetup、system_profiler SPAirPortDataType、pfctl、netstat -ib;提权使用osascript+with administrator privileges,而非pkexec;等宽字体改用Menlo,而非Monospace - 支持 Linux/macOS 双路径的模块:Dashboard、Interfaces、Wi-Fi、Topology、Bandwidth、Firewall(pf.conf + pfctl)、Connection Manager、Hosts File、MTR
- 未更改的模块(两种平台上的工具相同):DNS、Nmap Scan、SNMP、Whois
v1.3.2 — 2026-06-06
- i18n 扩展至 8 种语言 — 新增 Italiano、Português、日本語(日语)和中文(简体);完整 UI(全部 27 个模块,约 720 个翻译键)现可使用 FR / EN / ES / DE / IT / PT / JA / ZH;在 Settings 中更改语言后会出现重启提示
- 8 种语言的上下文帮助 —
?徽章面板(描述、使用示例和等效 CLI 命令)现已在每个模块中覆盖全部 8 种语言;此前 JA 和 ZH 会回退到英文 - 错误修复 — SMB/NFS 和 Hosts File 的导航工具提示此前无论选择哪种语言都会以法语显示;已向全部 7 个非法语语言块添加缺失的
nav_hint_smb_nfs和nav_hint_hosts键
v1.3.1 — 2026-06-05
- SSH Key Manager — 列出
~/.ssh/中的所有密钥对(文件、类型、位数、注释、SHA256 指纹);生成 Ed25519 或 RSA 4096 密钥,可选用密码短语(不匹配检测,按类型自动命名文件);将公钥复制到剪贴板;通过内联终端中的ssh-copy-id部署到远程服务器,支持 stdin 以响应密码提示;删除密钥对需确认;若~/.ssh/不存在则自动创建;i18n:fr / en / es / de
v1.3.0 — 2026-06-03
- TLS / SSL Inspector — 检查任意服务器的证书:主题 CN、SAN、颁发者、有效期(颜色编码:绿色 / 橙色 < 30 天 / 红色 已过期)、序列号、TLS 协议、密码套件和证书链(通过
openssl s_client);适用于有效、过期和自签名证书;对无法访问的主机显示友好的错误消息 - SMB / NFS Browser — 列出任意服务器上的共享和导出;SMB 选项卡:
smbclient -L,可选凭据,显示共享名称 / 类型 / 注释;NFS 选项卡:showmount -e,显示导出路径和访问列表;可检测缺失的工具并提供针对发行版的安装说明 - Hosts File Editor — 查看和编辑
/etc/hosts;表格支持启用/禁用切换,可通过对话框添加/编辑/删除条目;按 IP 或主机名筛选;通过pkexec cp保存(polkit 认证对话框) - install.sh — 适用于 Debian / Ubuntu / Linux Mint 的新脚本:在
~/.local/share/nmlinux/venv中创建 venv,通过 apt 安装系统依赖,创建启动器和.desktop条目(修复 PEP 668externally-managed-environment错误)
v1.2.9 — 2026-05-30
- VNC — 用于管理 VNC 连接配置的新模块;与 SSH 和 RDP 一样支持分组/子分组;启动
vncviewer(TigerVNC);兼容 macOS ARD(DH30 认证由 vncviewer 原生处理);密码永不存储;可检测缺失的vncviewer并提供针对发行版的安装说明 - 关于 — 工具与服务 — 新增章节,列出应用所依赖的所有第三方工具和 API
- 侧边栏 i18n — 全部 23 个导航工具提示现已翻译为 FR/EN/ES/DE(此前为硬编码法语);已修正标签:Topology、Connections、Subnet
v1.2.8 — 2026-05-30
- Remote Desktop (RDP) — 用于管理 Windows RDP 连接配置的新模块;与 SSH 一样支持分组/子分组;以外部进程方式启动
xfreerdp;连接时提示输入密码,永不存储;字段:主机、端口、用户名、域、分辨率、全屏;可检测缺失的xfreerdp并提供针对发行版的安装说明(Arch / Debian / Fedora)
v1.2.7 — 2026-05-26
- 内置 Lucide 图标 — 来自 Lucide(MIT)的 21 个 SVG 图标现已内置在
assets/icons/中;运行时通过QSvgRenderer渲染;颜色为#60a5fa;应用不再需要任何系统图标主题(Breeze、Adwaita、Papirus…)
v1.2.6 — 2026-05-24
- GNOME / Adwaita 兼容性 — 修复了非 KDE 桌面上的图标:
main.py现在通过gsettings自动检测 GTK 图标主题并将其应用于 Qt;扩展了 Wi-Fi、Traceroute、Speed Test、Interfaces、Port Scanner、Firewall、MTR 的回退链;themed_icon()现在会在接受主题图标之前验证真实的 pixmap 是否存在 - NixOS / KDE 兼容性 — 修复了 NixOS 上的所有图标:Breeze 6.x 仅提供 SVGZ 图标;Nix 包装器现在将
qt6.qtsvg添加到QT_PLUGIN_PATH,使 Qt 能够渲染 SVG 图标;themed_icon()尝试的尺寸为 22/24/16/32/48(Breeze 使用 22 px,而非 24);检测到 Nix 内置图标集时强制使用breeze主题;还会检查/etc/xdg/kdeglobals以获取系统级 KDE 配置
v1.2.5 — 2026-05-23
- MTR — 嵌入式 My Traceroute:运行
mtr --report,解析文本输出,显示实时表格,包含每个跃点的丢包率 %、RTT Last/Avg/Best/Worst/Jitter,按丢包严重程度着色;连续模式;支持 CSV + TXT 导出 - Speed Test — 无依赖的速度测试,通过
curl+ Cloudflare(speed.cloudflare.com)进行:下载(25 MB)、上传(10 MB)、ping1.1.1.1;最多 5 次运行持久化在 JSON 中;历史折线图(下载/上传) - Firewall Viewer — 只读规则集查看器:无需 root 即可解析
/etc/nftables.conf和/etc/iptables/*.rules;通过pkexec nft list ruleset查看实时规则集;列:表 / 链 / 规则 / 端口 / 操作 / 注释;操作按颜色编码;实时筛选 - 侧边栏提示 — 每个导航条目现在会显示一个微妙的
?徽章;悬停时显示工具提示,说明该模块的功能;在侧边栏和内容区之间增加了垂直分隔线 - i18n — 所有新模块均已翻译为法语、英语和西班牙语
v1.2.0 — 2026-05-22
- 主题适配 — 所有页面全面支持运行时浅色/深色切换;新增
core/theme.py,包含is_dark()、color_ok()、color_err();自定义绘制控件(_Graph、_MapWidget)在绘制时读取调色板;所有硬编码的 Catppuccin Mocha 颜色已替换为语义化的 Qt 调色板角色 - 子网掩码 — Dashboard、Interfaces 和 Connexions 页面现在显示由 CIDR 前缀派生的点分十进制子网掩码(例如
255.255.255.0) - 带宽监控 — 明确的开始/停止按钮取代了页面加载时不可靠的自动启动
- 导出 CSV/TXT — Nmap 和 Traceroute 页面现在提供导出 CSV 和导出 TXT 按钮(扫描/追踪完成后出现)
- i18n — 为上述所有功能新增翻译键(fr/en/es/de)
v1.1.1 — 2026-05-16
- SSH 终端 — 使用 pyte(VT100/xterm 仿真器)+ QPainter 渲染器完全重写;2000 行回滚、光标闪烁、支持 256 色
- 可视化 Traceroute — 世界地图(Natural Earth 110m)、每个跃点的实时地理定位(ip-api.com)、交互式缩放/平移、双解析器(
traceroute/tracepath回退) - 带宽监控 — 每个接口的实时吞吐量、60 秒滑动图、实时速度、会话总量和峰值
- Wake on LAN — 纯 Python 魔法数据包(UDP 广播)、持久化主机簿(JSON)
- IP Scanner — 通过
getent/avahi/nmblookup解析主机名;MAC 地址、厂商(IEEE OUI 39K 条目)、接口列;CSV/TXT 导出已更新 - i18n — 所有新页面均提供完整的 fr/en/es/de 翻译
v1.0.0 — 2026-05-14
首个公开发布版本 — 13 个模块:Dashboard、Interfaces、Wi-Fi、Subnet Calculator、DNS Lookup、Ping Monitor、IP Scanner、Port Scanner、Nmap、Whois、SNMP、SNTP/NTP、SSH。
功能特性
| 模块 | 说明 |
|---|---|
| Dashboard | 本机信息、网关、公网 IP、地理位置、DNS 解析器 |
| Connection Manager | 通过 nmcli 管理 NetworkManager 配置:列出、筛选、连接/断开/编辑/删除 |
| Interfaces | 网络接口表,包含每个接口的详细信息(ip + nmcli) |
| Wi-Fi | 可用网络、信号条、安全类型、突出显示已连接的网络 |
| Subnet Calculator | 根据 CIDR 计算网络/广播/主机范围,主机表最多 4096 条 |
| DNS Lookup | 基于 dig 的查询,支持 A、AAAA、MX、TXT、NS、CNAME、PTR、SOA、ANY |
| Ping Monitor | 持续 ping 多个主机,RTT 统计、丢包率 % |
| IP Scanner | CIDR/范围 ping 扫描,50 线程,主机名(DNS/mDNS/NetBIOS)、MAC 地址、厂商(OUI)、接口,支持 CSV + TXT 导出 |
| Port Scanner | TCP connect 扫描,200 线程,服务预设,支持 CSV + TXT 导出 |
| Nmap | 7 种扫描模式,XML 输出解析,主机/端口/协议/状态/服务表,支持 CSV + TXT 导出 |
| Whois | 以等宽字体显示原始 whois 输出 |
| SNMP | snmpwalk/snmpget,v1/v2c,10 个 OID 预设,结果表 |
| SNTP / NTP | 纯 Python RFC 4330 UDP 客户端,偏移/延迟/层级/参考 |
| SSH | 嵌入式 PTY 终端(pyte/VT100)、已保存的连接(JSON)、密钥认证、回滚 |
| Remote Desktop | RDP 连接配置(分组/子分组);启动 xfreerdp;密码永不存储 |
| VNC | VNC 连接配置(分组/子分组);启动 vncviewer(TigerVNC);兼容 macOS ARD;密码永不存储 |
| SSH Key Manager | 列出 ~/.ssh/ 密钥对(类型、位数、指纹);生成 Ed25519/RSA 4096;复制公钥;通过 ssh-copy-id 部署到服务器;确认后删除密钥对 |
| TLS Inspector | 证书详情:CN、SAN、颁发者、有效期 + 到期倒计时、序列号、协议、密码套件、证书链;Watchlist(关注列表),带后台到期监控和侧边栏彩色圆点 |
| SMB / NFS | 列出任意服务器或 NAS 上的 SMB 共享(smbclient)和 NFS 导出(showmount);SMB 可选凭据 |
| Hosts File | 查看/编辑 /etc/hosts:添加、删除、切换条目;筛选;通过 pkexec 保存 |
| Visual Traceroute | 在世界地图上逐跳显示路由,实时地理定位(ip-api.com)、缩放和平移、支持 CSV + TXT 导出 |
| MTR | 嵌入式 My Traceroute:每个跃点的丢包率 %、RTT Last/Avg/Best/Worst/Jitter、颜色编码、支持 CSV + TXT 导出 |
| Firewall Viewer | 只读 nftables + iptables/ip6tables 规则集(无需 root);通过 pkexec 查看实时规则;按表/链/操作筛选 |
| Speed Test | 通过 Cloudflare 测试下载/上传/ping;除 curl 外无需外部工具;历史图(最近 5 次运行) |
| Bandwidth | 每个接口的实时吞吐量:60 秒滑动图、实时速度、会话总量、峰值 |
| Wake on LAN | 纯 Python 魔法数据包(UDP 广播)、持久化主机簿、无需外部工具 |
| Topology Map | 通过 nmap -sn 自动发现局域网设备;交互式图形,可拖拽节点、缩放/平移、详情面板 |
| Settings | 语言选择(FR / EN / ES / DE / IT / PT / JA / ZH),持久化保存;更改后需重启 |
| Command Palette | Ctrl+P 覆盖层:按名称或关键词对全部 29 个模块进行模糊搜索 |
| File Transfer | 按需 TFTP 或 HTTP 服务器;可配置端口和根目录;本地 IP 作为复制按钮;实时日志表(文件名、客户端 IP、方向 ↑/↓、大小);HTTP 目录列表 + GET/POST/PUT;TFTP GET + PUT;端口 69 会提示 pkexec |
| Export | File → Export Network Report(JSON/Markdown/Text/PDF);在 Interfaces、DNS、Firewall、SSH、Connections 页面上支持按模块导出 |
系统要求
系统工具
Linux — 大多数在标准安装中已自带:```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** — 通过 [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 原生自带
ping、dig、traceroute、netstat、ifconfig、smbutil和route。networksetup和scutil是 macOS 内置工具,无需安装。IP Scanner 中的 OUI 厂商查询也无需安装——Wireshark 的manuf数据库会在首次使用时于后台自动下载并缓存在本地。
可选工具
| 工具 | 功能 | Linux | macOS |
|---|---|---|---|
xfreerdp / xfreerdp3 | 远程桌面(RDP) | Arch:freerdp · Ubuntu ≤24.04:freerdp2-x11 · Ubuntu 26.04+:freerdp3-x11 | 可选——回退到 Microsoft 远程桌面(open rdp://) |
vncviewer | VNC | Arch:tigervnc · Debian:tigervnc-viewer | 可选——回退到 macOS 屏幕共享(open vnc://,内置) |
nm-connection-editor | 从连接管理器编辑连接 | Arch:nm-connection-editor | —(改为打开系统偏好设置) |
traceroute | Traceroute 替代方案(默认使用 tracepath) | Arch:traceroute | 内置 |
mount.cifs(cifs-utils) | 从右键菜单挂载 SMB 共享 | Arch/Debian:cifs-utils | 内置(mount_smbfs) |
iperf3 | 速度测试——LAN 选项卡 | Arch:iperf3 · Debian/Ubuntu:iperf3 | brew install iperf3 |
Python
- Python 3.11+
- PySide6 6.6+
- ptyprocess 0.7+
- pyte 0.8+(
pip install pyte或sudo pacman -S python-pyte) - tftpy 0.8+(
pip install tftpy或sudo pacman -S python-tftpy)——文件传输模块
安装
选项 1 — Arch Linux / Manjaro / EndeavourOS(AUR)```bash
yay -S nmlinux
所有依赖项(PySide6、ptyprocess、pyte、nmcli,…)都会自动处理。
### 选项 2 — NixOS / Nix
直接使用随附的 `flake.nix` 运行 — 无需系统级安装:```bash
git clone https://github.com/thongor77/nmlinux.git
cd nmlinux
nix run .
或者进入开发 shell:```bash nix develop python3 -m nmlinux.main
所有Python依赖(PySide6、ptyprocess、pyte、tftpy)和系统工具(nmcli、nmap、freerdp、vncviewer、mtr、avahi-browse…)均可通过Nix包装器自动提供。
### 选项4 — AppImage(任何Linux发行版,无需安装)
从[最新版本](https://github.com/thongor77/nmlinux/releases/latest)下载`NMLinux-x.y.z-x86_64.AppImage`:```bash
chmod +x NMLinux-*.AppImage
./NMLinux-*.AppImage
无需安装 — Python、Qt 及所有 NMLinux 模块均捆绑在单个文件中。
适用于任何带有 glibc 2.17+ 的 x86_64 Linux(Ubuntu 16.04+、Fedora 26+、Arch、Mint 等)。
系统网络工具(
nmap、whois、mtr…)不随附捆绑 — 请通过包管理器安装它们,相应的模块才能正常工作。请参阅下面的要求。
选项 5 — macOS
最快方式 — 一行命令引导安装。 适用于完全空白的 Mac:安装 Xcode Command Line Tools、Homebrew、所有系统工具,然后安装 NMLinux 本身。可安全地重复运行(重复运行时为更新而非重新安装):```bash curl -fsSL https://raw.githubusercontent.com/thongor77/nmlinux/main/packaging/bootstrap_macos.sh -o /tmp/bootstrap_macos.sh && bash /tmp/bootstrap_macos.sh
安装到系统级(`/Applications`)而不是 `~/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
不需要 Apple Developer 账户或付费公证——底层还是同一个开源
install_macos_app.sh,只是为你自动获取并运行。该脚本是简洁、可读的 bash;你可以随时打开/tmp/bootstrap_macos.sh在运行前阅读,或直接在此处查看:packaging/bootstrap_macos.sh。先下载再运行(而不是直接通过管道传给
bash)是有意为之:在新 Mac 上,脚本会触发嵌套的交互式步骤(Xcode Command Line Tools 安装程序、Homebrew 自己的安装程序会询问你的sudo密码),这些步骤需要从终端读取输入——直接将脚本通过管道传给bash可能会让这些嵌套提示与脚本自身的输入流互相干扰,导致其中途停止。从下载的文件运行则完全可以避免这个问题。
手动安装——如果你更喜欢自己逐步运行,或者已经安装了 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
更新: `git pull && bash packaging/install_macos_app.sh`
卸载: `bash packaging/uninstall_macos.sh`
系统级安装(`/Applications`): `bash packaging/install_macos_app.sh --system`
该脚本会自动将以下 Python 包安装到虚拟环境(venv)中:
- `PySide6`, `ptyprocess`, `pyte`, `tftpy`
- `pyobjc-framework-Cocoa` — macOS 菜单栏、原生对话框
- `pyobjc-framework-CoreWLAN` — Wi-Fi SSID 扫描
- `pyobjc-framework-CoreLocation` — 用于获取 Wi-Fi 名称的定位服务权限
**macOS 26 (Tahoe) 上的 Wi-Fi:** 首次启动时,macOS 会请求定位服务权限——请授予该权限,以便显示 Wi-Fi 网络名称。该权限可在 *系统设置 › 隐私与安全性 › 定位服务* 中找到。
> 大多数模块在 macOS 上无需修改即可运行。RDP 回退到 `open rdp://`(Microsoft 远程桌面),VNC 回退到 `open vnc://`(内置的屏幕共享)。连接管理器在 macOS 上功能受限(`nmcli` 不可用)。
### 选项 6 — Debian / Ubuntu / Linux Mint (安装脚本)
> **Linux Mint / Ubuntu 用户请注意:** 在 Python 3.12+ 上,`pip install` 在系统范围内被阻止(PEP 668 — `externally-managed-environment`)。请使用附带的安装脚本——它会自动创建虚拟环境并安装 `.desktop` 条目。```bash
git clone https://github.com/thongor77/nmlinux.git
cd nmlinux
bash install.sh
该脚本将:
- 通过
apt安装系统依赖(libgl1、python3-venv、freerdp、tigervnc…) - 在
~/.local/share/nmlinux/venv中创建虚拟环境 - 在虚拟环境内安装 NMLinux 及其 Python 依赖
- 在
~/.local/bin/nmlinux创建启动器 - 添加一个
.desktop条目,使 NMLinux 出现在您的应用程序菜单中
安装后,从终端运行 nmlinux,或从应用程序菜单启动它。
选项 7 — Wheel(所有发行版 / macOS)
从最新发布下载 .whl 并安装:```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
> **Ubuntu 26.04+ 注意事项:** `pipx` 需要先安装系统库 (libGL 等) —— 上述命令已涵盖这些依赖。如果 `pipx install` 因 PySide6 构建错误而失败,请改用**选项 4** (安装脚本),它会自动处理一切。
### 选项 8 — 从源码构建 (Arch / Fedora / macOS)```bash
git clone https://github.com/thongor77/nmlinux.git
cd nmlinux
pip install PySide6 ptyprocess pyte tftpy
python3 -m nmlinux.main
选项 9 — 桌面入口(KDE / GNOME / 等)
复制 .desktop 文件,让 NMLinux 出现在你的应用程序启动器中:```bash
cp data/nmlinux.desktop ~/.local/share/applications/
update-desktop-database ~/.local/share/applications/
然后,如有需要,编辑文件中的 `Exec=` 路径。
---
## 运行```bash
./nmlinux.sh
# or, after pip install:
nmlinux
# or directly:
python3 -m nmlinux.main
项目结构```
nmlinux/ core/ i18n.py — Translation system (8 languages: fr/en/es/de/it/pt/ja/zh), tr(key) function icons.py — themed_icon(): 21 bundled Lucide SVG icons via QSvgRenderer theme.py — is_dark(), color_ok(), color_err(): runtime light/dark helpers settings.py — AppSettings dataclass, JSON persistence ssh.py — SshConnection dataclass, SshStore rdp.py — RdpConnection dataclass, RdpStore, find_xfreerdp() vnc.py — VncConnection dataclass, VncStore, find_vncviewer() terminal.py — SshWorker (QThread) + PTY via ptyprocess, emits raw bytes tls_watchlist.py — TlsWatchlist: background cert expiry checker, JSON persistence http_server.py — ThreadedHTTPServer: directory listing, GET/PUT/POST, port binding tftp_helper.py — TftpServerThread: tftpy wrapper, configurable port and root help_content.py — Module contextual help strings (all 8 languages) cli_bar.py — CliBar singleton: pedagogical CLI equivalent bar export_dialog.py — open_export_dialog(): QFileDialog with live extension update command_palette.py — CommandPalette (Ctrl+P): fuzzy search across 29 modules export_manager.py — collect_snapshot(), to_json/text/markdown/pdf, save_export() pages/ about.py — About page (credits, tools & services) bandwidth.py — Bandwidth Monitor: per-interface 60s graph, live stats connection_manager.py — Connection Manager: nmcli profiles, connect/disconnect/edit dashboard.py — Dashboard dns.py — DNS Lookup file_transfer.py — File Transfer: TFTP + HTTP server, live log, pkexec for port 69 firewall.py — Firewall Viewer: nftables + iptables parser, live via pkexec help_page.py — Contextual help overlay hosts.py — Hosts File: view/edit /etc/hosts, toggle entries, save via pkexec interfaces.py — Network Interfaces ip_scanner.py — IP Scanner mtr.py — MTR: mtr --report parser, live hop stats table, export nmap_scan.py — Nmap ping.py — Ping Monitor port_scanner.py — Port Scanner rdp.py — Remote Desktop: RDP profiles, launches xfreerdp settings.py — Settings page smb_nfs.py — SMB/NFS Browser: smbclient + showmount snmp.py — SNMP sntp.py — SNTP / NTP speedtest.py — Speed Test: curl + Cloudflare, history graph ssh.py — SSH page (connection manager + terminal) ssh_keys.py — SSH Key Manager: list/generate/deploy/delete key pairs subnet.py — Subnet Calculator terminal_view.py — TerminalView: pyte VT100 emulator + QPainter renderer tls.py — TLS Inspector + TLS Watchlist: cert details, background expiry monitor topology.py — Topology Map: nmap -sn, interactive graph, zoom/pan traceroute.py — Visual Traceroute: world map, geolocation, zoom/pan vnc.py — VNC: connection profiles, launches vncviewer whois.py — Whois wifi.py — Wi-Fi wol.py — Wake on LAN: magic packet, persistent host book assets/ icons/ — 21 bundled Lucide SVG icons (#60a5fa) world.geojson — Natural Earth 110m countries (map background) window.py — MainWindow (sidebar + QStackedWidget) main.py — Entry point
---
## 桌面环境兼容性
自 v1.2.7 起,NMLinux 使用 21 个内置的 [Lucide](https://lucide.dev) SVG 图标,并通过 `QSvgRenderer` 在运行时渲染。应用不再依赖任何系统图标主题(Breeze、Adwaita、Papirus…),可在 KDE、GNOME、XFCE 等桌面环境中正确显示。Qt 样式会自动适应当前运行的桌面环境。
---
## 限制
### Linux
完全支持 —— 全部 29 个模块均可用。
### macOS
大多数模块开箱即用,因为它们依赖两个平台都提供的工具(`ssh`、`dig`、`ping`、`curl`、`nmap`、`openssl`…)。
**9 个模块需要专门的 macOS 适配**(在启动时检测平台的双代码路径):Dashboard、Interfaces、Wi-Fi、Topology、Bandwidth、Firewall、Connection Manager、Hosts File、MTR —— 这些模块使用 macOS 原生命令(`ifconfig`、`networksetup`、`scutil`、`pfctl`、`system_profiler`…)而非 Linux 对应的命令。
**macOS 支持受限或不支持的模块:**
| 模块 | 状态 | 备注 |
|--------|--------|-------|
| **RDP** | ✓ macOS | 回退到 `open rdp://` → Microsoft Remote Desktop(App Store) |
| **VNC** | ✓ macOS | 回退到 `open vnc://` → 屏幕共享(内置,零安装) |
| **IP Scanner** | ✓ macOS | 使用 `socket.gethostbyaddr()` —— Python 原生支持,无需额外工具 |
| **SMB** | ✓ macOS | 使用内置的 `smbutil view` 代替 `smbclient` |
| **NFS** | ✓ macOS | `showmount` 为内置命令;报头解析已适配 |
| **Connection Manager** | ⚠ 功能缩减 | 编辑/删除需要 `nmcli`(仅限 Linux);列表视图可用 |
### 一般限制
- 无 root/polkit 集成 —— 需要提升权限的工具(某些 Nmap 模式、原始套接字)必须使用 `sudo` 运行;在 macOS 上,权限提升使用 `osascript` + `administrator privileges`
- SSH 代理转发需要激活的 SSH 代理(`SSH_AUTH_SOCK`);在 macOS 上由系统自动处理,无需手动设置
---
## 致谢
- **[Anthropic](https://www.anthropic.com)** —— Claude Code,用于构建本项目的 AI 助手
- 感谢作者的愿景、测试与指导
---
## 支持项目
如果 NMLinux 对你有用,请考虑支持其开发:
- **PayPal** —— [通过 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`
---
## 许可证
GPL-2.0 —— 参见 [LICENSE](https://github.com/thongor77/nmlinux/blob/HEAD/LICENSE)。
本项目是独立的重新实现。未使用或移植 NETworkManager 的任何代码。





