
nmlinux v1.7.11
适用于 Linux 的统一网络工具包 — Python 3 + PySide6
NMLinux · v1.7.12
适用于 Linux 和 macOS 的统一网络工具包 — 检查、连接、诊断。
NMLinux 是一个统一的 GUI,在一个窗口中集成了 29 个网络模块:接口监控、Wi-Fi、DNS、SSH 终端、防火墙查看器、拓扑图、traceroute 等。它完全使用 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)
| 仪表盘 | 拓扑 |
|---|---|
![]() | ![]() |
| Traceroute | Wi-Fi |
|---|---|
![]() | ![]() |
macOS
| 仪表盘 | Traceroute |
|---|---|
![]() | ![]() |
更新日志
v1.7.12 — 2026-08-12
- Traceroute — 修复:在 Flatpak(v1.7.11,见下文——现已移除)下,即使主机没有安装真正的
traceroute二进制文件,traceroute也始终通过主机 shim 在PATH中解析,因此工作进程永远不会回退到tracepath,导致追踪立即完成,既没有跃点也没有显示错误。现在,只要traceroute完全没有产生可解析的输出,无论失败原因为何,它都会回退到tracepath。 - SSH 终端 — askpass 修复:当设置了
DISPLAY/WAYLAND_DISPLAY(任何 GUI 会话)且 ssh 没有干净的 tty 时,它可能会尝试使用$SSH_ASKPASS来处理密码提示,而不是嵌入式终端——如果没有安装 askpass 辅助程序,认证会静默失败。现在SSH_ASKPASS_REQUIRE=never会强制密码提示始终通过终端本身进行。 - 移除 Flatpak 打包:v1.7.11 中附带的本地 KDE Linux 清单已停止维护。调查上述 SSH 密码提示 bug 时发现了一个内核层面的限制:通过
flatpak-spawn --host转发的进程永远无法成为所转发 pty 的控制终端所有者(TIOCSCTTY被拒绝并返回EPERM——另一个不相关的会话已经拥有它;这是内核有意的安全边界,而非 bug)。唯一可行的变通方案(script,分配一个新的 pty)能修复密码提示,但会破坏该会话的实时终端调整大小传播——这被认为比完全不提供 Flatpak 更差的权衡。AUR 和 AppImage 是今后受支持的 Linux 安装途径。
v1.7.11 — 2026-08-03
- Flatpak 打包(KDE Linux):
packaging/flatpak/下的本地构建清单面向 KDE Linux 及其他仅支持 Flatpak 的发行版。nmlinux 通过 shell 调用的主机 CLI 工具(nmcli、pkexec、mount.cifs、ssh、nmap等)通过PATH上的flatpak-spawn --hostshim 进行桥接,而不是对每个工具单独进行沙箱化;PySide6 来自 Flathub 的io.qt.PySide.BaseApp,而非 PyPI wheel。未发布到 Flathub——而是像 AppImage 一样,使用packaging/flatpak/build-bundle.sh构建一个.flatpak包并附加到每次发布中。已在 v1.7.12 中停止维护——见上文。
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 — 修复了首次显示定位服务权限对话框后退出时可能崩溃的问题。





