返回更新列表
新发布Aug 3, 2026

nmlinux v1.7.11

适用于 Linux 的统一网络工具包 — Python 3 + PySide6

分享

NMLinux · v1.7.12

Version Python License: GPL-2.0 Platform Languages Donate Bitcoin

适用于 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.mddocs/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)

仪表盘拓扑
仪表盘拓扑
TracerouteWi-Fi
TracerouteWi-Fi

macOS

仪表盘Traceroute
macOS 仪表盘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 工具(nmclipkexecmount.cifssshnmap 等)通过 PATH 上的 flatpak-spawn --host shim 进行桥接,而不是对每个工具单独进行沙箱化;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 上发现的两个引导 bugbootstrap_macos.sh 不再对 Homebrew 安装程序强制设置 NONINTERACTIVE=1,此前该设置会在任何全新管理员账户上立即中止,而不是提示输入 sudo 密码;文档中的一行命令现在会先下载脚本,而不是直接通过管道传给 bash,因为嵌套的交互步骤(Xcode CLT 安装程序、Homebrew 自身的 sudo 提示)在通过管道传输时会干扰外部脚本自身的输入流。
  • 通用右键菜单 — 新增 SMBSmbNfsPage 是 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、Traceroute、MTR、SSH、RDP、VNC、在拓扑中查看或添加到清单。当检测到相应端口开放时,SSH/RDP/VNC 菜单项会以粗体显示。标签在全部 8 种界面语言中均已完整翻译。
  • 源页面(发出右键操作):IP 扫描器、Nmap、Ping、端口扫描器、Traceroute、MTR、拓扑(节点右键单击)
  • 目标页面(接收主机并预填):Whois(set_target + 自动查询)、DNS(仅 set_target 预填)、Ping(set_target + 自动开始)、Traceroute(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() 会解析为 Qt 在 QApplication 构造期间读取的 Python.framework bundle(CFBundleName = "Python");通过修补 bundle 的 infoDictionary() 并在应用程序菜单创建之前通过 AppKit 重命名原生菜单项来修复。

v1.6.3 — 2026-06-28

  • macOS:首次尝试通过 pyobjc-framework-Cocoa 使用 NSProcessInfo.setProcessName_ 修复菜单栏(已被 v1.6.4 取代)。

v1.6.2 — 2026-06-28

  • macOS:将 install_macos_app.sh 中的 bash 启动脚本替换为编译的 C 存根,使 macOS 正确地将 .app bundle 与运行中的进程关联;添加了 setprognamesys.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,磁盘通过 wmicfsutil(区分区域设置:EN 逗号 / FR 空格)→ 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 安装的 sshpassnmapsnmpget 现在可以通过其绝对路径找到并调用;macOS 上的 .app bundle 不会继承 Homebrew 的 PATH(/opt/homebrew/bin/usr/local/bin),因此之前安装的工具会被静默忽略。
  • macOS 更新路径:在仓库根目录运行 git pull && bash packaging/install_macos_app.sh 现在是文档记录的升级方法;该脚本管理自己的 venv(~/.local/share/nmlinux/venv),不需要系统级的 pippipx

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 获取操作系统名称,Apple Silicon CPU 使用 hw.model 回退,APFS 用户数据卷使用 /System/Volumes/Data;在根目录之前检测 Synology/Unraid 卷(/volume1/mnt/user);使用 test -d 守卫修复了 df | tail -1 || … 的假成功模式;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 Inspector"条目显示彩色圆点:任一证书过期显示红色,任一证书将在 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 Scanner:将 getent(仅限 Linux)替换为 Python 的 socket.gethostbyaddr(),以实现跨平台的反向 DNS 解析;主机名查找现在无需任何额外工具即可在 macOS 上原生运行

  • macOS — SMB Browser:从 smbclient(需要 Homebrew samba)切换到 smbutil view(macOS 内置工具);SMB 共享列表现在无需任何安装即可在 macOS 上运行
  • macOS — NFS Browsershowmount 在 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 agent forwarding — SSH 连接表单中新增“Agent forwarding”复选框;向 ssh 命令添加 -A;允许在不复制私钥的情况下在服务器之间跳转(PC → A → B);需要活动的 SSH agent(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 — 从“文件 → 导出网络报告…”导出完整网络快照(接口、路由、DNS 解析器),格式为 JSON、Markdown、纯文本或 PDF(可选:pip install reportlab
  • Module-level export buttons — 在 Interfaces、DNS、Firewall、SSH Connections 和 Connection Manager 页面中添加了导出按钮;每个页面以所选格式导出当前数据,并在格式筛选器更改时实时更新文件扩展名

v1.3.6 — 2026-06-12

  • Topology — device icons — 每个节点现在显示与其设备类型(路由器/无线、计算机/笔记本电脑、打印机、NAS/服务器、智能手机、网络交换机、树莓派)匹配的 Lucide SVG 图标,而不是通用圆点;新增 5 个捆绑 SVG 图标(printerserversmartphonecpulaptop
  • Topology — mDNS detection — 通过 avahi-browse(可选,与 nmap 扫描并行运行)检测设备类型;识别打印机(_ipp._tcpPDL Printer)、Android 手机和电视(_googlecast._tcp_androidtvremote2._tcp)、Apple Mac(AirPlay TXT 中的 am=Mac16,x 型号)、NAS 设备(Synology 报告 model=Xserve)、KDE Connect 桌面;当 avahi 不可用时,回退到 MAC 厂商 OUI 和主机名启发式方法
  • Topology — detail panel 显示检测到的设备类别(打印机、智能手机、NAS…),而不是通用的“Host”标签;支持所有 8 种语言的国际化
  • Traceroute — auto-zoom — 每次路由结束时,世界地图自动缩放并居中到已定位跃点的边界框;当用户手动平移或缩放时禁用;在下一次路由追踪时恢复;右键单击重置为全世界视图

v1.3.5 — 2026-06-06

  • macOS compatibility — 所有 9 个网络模块现在都可以在 macOS 上运行,而不会破坏 Linux 行为;每个模块在启动时检测平台(_IS_MACOS)并分支到原生 macOS 命令:route -n get defaultifconfigscutil --dnsnetworksetupsystem_profiler SPAirPortDataTypepfctlnetstat -ib;权限提升使用 osascript + with administrator privileges 而不是 pkexec;等宽字体使用 Menlo 而不是 Monospace
  • 具有 Linux/macOS 双路径的模块:仪表盘、接口、Wi-Fi、拓扑、带宽、防火墙(pf.conf + pfctl)、连接管理器、Hosts 文件、MTR
  • 未更改的模块(两个平台上的工具相同):DNS、Nmap 扫描、SNMP、Whois

v1.3.2 — 2026-06-06

  • 国际化扩展到 8 种语言 — 新增 Italiano、Português、日本語(日语)和中文(简体中文);完整 UI(全部 27 个模块,约 720 个翻译键)现支持 FR / EN / ES / DE / IT / PT / JA / ZH;在“设置”中更改语言后会出现重启提示
  • 8 种语言的上下文帮助? 徽章面板(描述、使用示例和等效 CLI 命令)现在涵盖每个模块的所有 8 种语言;此前 JA 和 ZH 回退到英语
  • 错误修复 — 无论选择何种语言,SMB/NFS 和 Hosts 文件的导航工具提示都以法语显示;已向所有 7 个非法语语言块添加缺失的 nav_hint_smb_nfsnav_hint_hosts

v1.3.1 — 2026-06-05

  • SSH 密钥管理器 — 列出 ~/.ssh/ 中的所有密钥对(文件、类型、位数、注释、SHA256 指纹);生成 Ed25519 或 RSA 4096 密钥,可选用口令(不匹配检测,按类型自动命名);将公钥复制到剪贴板;通过内联终端中的 ssh-copy-id 部署到远程服务器,支持 stdin 输入密码提示;删除密钥对需确认;若 ~/.ssh/ 不存在则自动创建;国际化:fr / en / es / de

v1.3.0 — 2026-06-03

  • TLS / SSL 检查器 — 检查任意服务器的证书:主题 CN、SAN、颁发者、有效日期(颜色编码:绿色 / 橙色 < 30 天 / 红色已过期)、序列号、TLS 协议、密码套件和证书链(通过 openssl s_client);适用于有效、过期和自签名证书;对于无法访问的主机提供友好的错误消息
  • SMB / NFS 浏览器 — 列出任意服务器的共享和导出;SMB 选项卡:smbclient -L,可选凭据,显示共享名称 / 类型 / 注释;NFS 选项卡:showmount -e,显示导出路径和访问列表;检测缺失工具并给出特定发行版的安装说明
  • Hosts 文件编辑器 — 查看和编辑 /etc/hosts;带启用/禁用切换的表格,通过对话框添加/编辑/删除条目;按 IP 或主机名过滤;通过 pkexec cp 保存(polkit 认证对话框)
  • install.sh — 适用于 Debian / Ubuntu / Linux Mint 的新脚本:在 ~/.local/share/nmlinux/venv 中创建 venv,通过 apt 安装系统依赖,创建启动器和 .desktop 条目(修复 PEP 668 externally-managed-environment 错误)

v1.2.9 — 2026-05-30

  • VNC — 用于管理 VNC 连接配置文件的新模块;与 SSH 和 RDP 类似的分组/子组;启动 vncviewer(TigerVNC);与 macOS ARD 兼容(DH30 认证由 vncviewer 原生处理);密码从不存储;检测缺失 vncviewer 并给出特定发行版的安装说明
  • 关于 — 工具与服务 — 新增部分,列出应用依赖的所有第三方工具和 API
  • 侧边栏国际化 — 所有 23 个导航工具提示现已翻译为 FR/EN/ES/DE(此前为硬编码法语);标签已更正:Topology、Connections、Subnet

v1.2.8 — 2026-05-30

  • 远程桌面(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() 现在在接受主题图标之前验证真实像素图是否存在
  • 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 最近/平均/最佳/最差/抖动,按丢包严重程度着色;连续模式;CSV + TXT 导出
  • 速度测试 — 通过 curl + Cloudflare(speed.cloudflare.com)实现无依赖速度测试:下载(25 MB)、上传(10 MB)、ping 1.1.1.1;最多 5 次运行结果持久化到 JSON;历史折线图(下载/上传)
  • 防火墙查看器 — 只读规则集查看器:无需 root 即可解析 /etc/nftables.conf/etc/iptables/*.rules;通过 pkexec nft list ruleset 查看实时规则集;列:表 / 链 / 规则 / 端口 / 动作 / 注释;动作按颜色编码;实时筛选
  • 侧边栏提示 — 每个导航条目现在显示一个微妙的 ? 徽章;悬停时显示描述模块功能的工具提示;在侧边栏和内容区域之间添加了垂直分隔线
  • 国际化 — 所有新模块均已翻译为法语、英语和西班牙语

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”按钮(在扫描/追踪完成后出现)
  • 国际化 — 为上述所有功能新增翻译键(fr/en/es/de)

v1.1.1 — 2026-05-16

  • SSH 终端 — 使用 pyte(VT100/xterm 模拟器)+ QPainter 渲染器完全重写;2000 行回滚、光标闪烁、256 色支持
  • 可视化路由追踪 — 世界地图(Natural Earth 110m)、每跳实时地理位置(ip-api.com)、交互式缩放/平移、双解析器(traceroute / tracepath 回退)
  • 带宽监视器 — 每接口实时吞吐量、60 秒滑动图表、实时速度、会话总量和峰值
  • 局域网唤醒 — 纯 Python 幻数据包(UDP 广播)、持久化主机簿(JSON)
  • IP 扫描器 — 通过 getent/avahi/nmblookup 解析主机名;MAC 地址、厂商(IEEE OUI 39K 条目)、接口列;CSV/TXT 导出已更新
  • 国际化 — 所有新页面均已完整翻译为 fr/en/es/de

v1.0.0 — 2026-05-14

首次公开发布 — 13 个模块:仪表盘、接口、Wi-Fi、子网计算器、DNS 查询、Ping 监视器、IP 扫描器、端口扫描器、Nmap、Whois、SNMP、SNTP/NTP、SSH。


系统要求

系统工具

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 原生自带 pingdigtraceroutenetstatifconfigsmbutilroutenetworksetupscutil 是 macOS 内置工具,无需安装。IP Scanner 中的 OUI 厂商查询也无需安装——Wireshark 的 manuf 数据库会在首次使用时于后台自动下载并缓存在本地。

可选工具

Tool功能LinuxmacOS
xfreerdp / xfreerdp3远程桌面(RDP)Arch: freerdp · Ubuntu ≤24.04: freerdp2-x11 · Ubuntu 26.04+: freerdp3-x11可选——回退到 Microsoft 远程桌面(open rdp://
vncviewerVNCArch: tigervnc · Debian: tigervnc-viewer可选——回退到 macOS 屏幕共享(open vnc://,内置)
nm-connection-editor从连接管理器编辑连接Arch: nm-connection-editor—(改为打开系统偏好设置)
tracerouteTraceroute 替代工具(默认使用 tracepath)Arch: traceroute内置
mount.cifs (cifs-utils)从右键菜单挂载 SMB 共享Arch/Debian: cifs-utils内置(mount_smbfs
iperf3速度测试——LAN 标签页Arch: iperf3 · Debian/Ubuntu: iperf3brew install iperf3

Python

  • Python 3.11+
  • PySide6 6.6+
  • ptyprocess 0.7+
  • pyte 0.8+(pip install pytesudo pacman -S python-pyte
  • tftpy 0.8+(pip install tftpysudo 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 .

或者进入开发环境:```bash nix develop python3 -m nmlinux.main

所有 Python 依赖(PySide6、ptyprocess、pyte、tftpy)和系统工具(nmcli、nmap、freerdp、vncviewer、mtr、avahi-browse…)都通过 Nix wrapper 自动提供。

### 选项 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 等)。

系统网络工具(nmapwhoismtr…)并未捆绑 — 请通过你的包管理器安装它们,对应的模块才能正常工作。请参阅下面的要求

选项 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 命令行工具安装程序、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 Remote Desktop),VNC 回退到 `open vnc://`(内置的“屏幕共享”)。连接管理器在 macOS 上功能有所缩减(`nmcli` 不可用)。

### 选项 6 — Debian / Ubuntu / Linux Mint(安装脚本)

> **Linux Mint / Ubuntu 用户注意:** `pip install` 在 Python 3.12+ 上会在系统范围内被阻止(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&currency_code=EUR)
- **Bitcoin** — `bc1qspe0tky7552qas72wgn8w9dswr0dxlv24w39t6ztjqk3nz6kc5tqv753a4`

---

## 许可证

GPL-2.0——参见 [LICENSE](https://github.com/thongor77/nmlinux/blob/main/LICENSE)。

本项目是独立的重新实现。未使用或移植 NETworkManager 的任何代码。

分类