
nmlinux v1.7.11
Унифицированный сетевой инструментарий для Linux — Python 3 + PySide6
NMLinux · v1.7.11
Единый сетевой инструментарий для Linux и macOS — проверка, подключение, диагностика.
NMLinux — это единый унифицированный графический интерфейс, объединяющий 29 сетевых модулей в одном окне: мониторинг интерфейсов, Wi-Fi, DNS, SSH-терминал, просмотр брандмауэра, карта топологии, traceroute и многое другое. Создан с нуля на Python и PySide6 (Qt 6), с 8 языками интерфейса и без внешних зависимостей, помимо стандартных системных инструментов.
[!NOTE] NMLinux не связан с системным демоном Linux
/usr/bin/NetworkManager(NetworkManager от Red Hat/GNOME). NMLinux — это самостоятельный проект, созданный с нуля на Python и PySide6.
Создан с помощью Claude Code (Anthropic) при участии его автора.
Процесс разработки
NMLinux создаётся с помощью ИИ — а именно Claude Code, — и это нигде не скрыто в этом репозитории. Почти каждый серьёзный программный проект сегодня использует ИИ на каком-то этапе своего конвейера, говорится об этом открыто или нет. Поэтому вопрос «участвовал ли ИИ» — не самый интересный. Интересный вопрос: ловит ли что-то ошибки ИИ?
Вот что ловит ошибки ИИ, если вы предпочитаете проверить, а не верить мне на слово:
- 162 теста —
pytest tests/ -v. Чистая логика плюс несколько настоящих тестов Qt-виджетов (меню, таблицы), без заглушек вместо интересных частей. docs/Decisions-Techniques.md— каждое неочевидное техническое решение, отвергнутые альтернативы, а также найденные и исправленные ошибки (включая те, что были внесены ИИ), с письменно зафиксированными обоснованиями.docs/Architecture.mdиdocs/Carte-des-Modules.md— фактическая структура кода, которая всегда актуальна относительно того, что поставляется.- Проверка согласованности i18n, запускаемая перед каждым релизом для выявления отсутствующих ключей перевода во всех 8 поддерживаемых языках.
Всё это существует не потому, что ИИ нельзя доверять. Оно существует потому, что ничто не должно выходить в релиз без процесса проверки — включая код, написанный вручную. Оценивайте результат и то, как он проверяется, а не инструмент, который помог его написать.
Всё равно нашли ошибку? Это полезно, а не постыдно — откройте 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)
| Dashboard | Topology |
|---|---|
![]() | ![]() |
| Traceroute | Wi-Fi |
|---|---|
![]() | ![]() |
macOS
| Dashboard | Traceroute |
|---|---|
![]() | ![]() |
Журнал изменений
v1.7.11 — 2026-08-03
- Пакет Flatpak (KDE Linux): локальный манифест сборки в
packaging/flatpak/предназначен для KDE Linux и других дистрибутивов только с Flatpak. Хостовые CLI-инструменты, к которым обращается nmlinux (nmcli,pkexec,mount.cifs,ssh,nmap, …), подключаются через обёрткиflatpak-spawn --hostвPATHвместо изоляции каждого из них по отдельности; PySide6 берётся изio.qt.PySide.BaseAppна Flathub, а не из колеса PyPI. Не публикуется на Flathub — вместо этого единый пакет.flatpakсобирается с помощьюpackaging/flatpak/build-bundle.shи прикрепляется к каждому релизу, так же как это уже делается с AppImage
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
- Speed Test — новая вкладка LAN (iperf3): рядом с существующим тестом скорости интернета новая вкладка запускает
iperf3-тесты только в режиме клиента — либо со встроенным списком публичных серверов (26 стран), либо с сохранённым пользовательским сервером (например, внутренним сервером организации). Поддерживаются TCP/UDP, IPv4/IPv6/авто и обратное направление (загрузка); для UDP-тестов показываются джиттер и потери. Предложено в issue #6 - Новая опциональная зависимость:
iperf3— установите её, чтобы включить вкладку LAN; иначе вкладка показывает баннер и остаётся отключённой
v1.7.6 — 2026-07-05
- Asset Inventory — обновление по правому клику: щёлкните правой кнопкой мыши одну или несколько уже просканированных строк (поддерживается множественный выбор) и выберите «Обновить выбранные», чтобы пересканировать только эти хосты на месте, без повторного полного сканирования сети
- Asset Inventory — уведомление об ошибке SSH-аутентификации: отклонённый SSH-вход теперь показывает «SSH-аутентификация не удалась» вместо молчаливого отказа, не теряя определённые Nmap сведения об имени хоста и ОС — подтверждено на реальном Synology NAS, где функция Auto Block в DSM отклонила правильный пароль после того, как сначала были перепробованы другие настроенные наборы учётных данных
v1.7.5 — 2026-07-04
- Ping Monitor — каталог сохранённых целей: новая левая панель позволяет сохранять цели пинга (имя, хост, интервал) в постоянный список, поэтому отслеживаемые хосты переживают перезапуск приложения, и их не нужно вводить заново. Кнопка ★ в каждой строке активного мониторинга сохраняет этот хост в каталог в любой момент сеанса — заранее планировать не нужно, если приложение неожиданно закроется
- Ping Monitor — «Начать мониторинг»: выберите сохранённую цель и запустите мониторинг одним кликом, повторно используя её сохранённый интервал
v1.7.4 — 2026-07-04
- Asset Inventory — исправлены нестабильные результаты сканирования: проверка доступности отправляла один ping с таймаутом 1 секунда и без повторов, из-за чего реальное устройство могло теряться при параллельной нагрузке самого сканера (проверяется до 40 хостов одновременно) или когда Wi-Fi-хост ненадолго засыпал между маяками — подтверждено вживую на реальной подсети, которая при повторных запусках одного и того же диапазона возвращала разное количество устройств. Теперь проверка повторяет ping, прежде чем перейти к TCP-пробе порта
- Asset Inventory — новая кнопка «Обновить пустые»: после сканирования повторно сканируются только те IP-адреса, по которым не было получено данных, вместо повторного сканирования всего диапазона; вновь найденные хосты объединяются с существующими результатами
v1.7.3 — 2026-07-03
- SMB — монтирование общих ресурсов из контекстного меню: щёлкните правой кнопкой мыши по общему ресурсу на вкладке SMB и выберите «Монтировать/Размонтировать», чтобы смонтировать его по стабильному локальному пути (
~/mnt/<host>_<share>), доступному из терминала и любого другого приложения, — а не во временном окне просмотра. Только на время сеанса (без сохранения в fstab/systemd), учётные данные переиспользуются из уже имеющихся полей пользователя и пароля. В Linux используетсяpkexec mount -t cifsс файлом учётных данных с ограниченными правами (никогда не раскрывается черезps); в macOS используетсяmount_smbfsнапрямую. Автоматически повторяет попытку со старым диалектом SMB (vers=2.0), когда сервер отклоняет стандартное согласование (часто встречается у старых NAS) — обе попытки выполняются в рамках одного запроса аутентификации через специальный вспомогательный процесс - Новая опциональная зависимость:
cifs-utils(Linux) для монтирования SMB; в macOS уже встроена
v1.7.2 — 2026-07-03
- Установка на macOS — исправлены две ошибки начальной загрузки, обнаруженные на чистой Mac:
bootstrap_macos.shбольше не принудительно задаётNONINTERACTIVE=1для установщика Homebrew, из-за чего тот немедленно завершался с ошибкой в любой свежей учётной записи администратора, не запрашивая sudo-пароль; задокументированная однострочная команда теперь сначала загружает скрипт, а не передаёт его напрямую вbash, поскольку вложенные интерактивные шаги (установщик Xcode CLT, собственный запрос sudo у Homebrew) могли конфликтовать с входным потоком внешнего скрипта при передаче через конвейер - Универсальное контекстное меню — добавлен SMB:
SmbNfsPageбыла единственной страницей-целью, отсутствовавшей в межмодульной системе правого клика, появившейся в v1.7.0; теперь при щелчке правой кнопкой по хосту и выборе SMB поле хоста заполняется автоматически, и сканирование запускается немедленно; в меню пункт выделяется жирным, когда порт 445 открыт - i18n — переведены оставшиеся строки Dashboard: метка задержки шлюза, заголовок карточки TLS Watchlist и строка её статуса всё ещё были захардкожены на французском; теперь переведены на все 8 языков интерфейса
v1.7.1 — 2026-07-02
- macOS 26 (Tahoe) — исправления SSID Wi-Fi: в качестве основного источника данных вместо
system_profiler(возвращает<redacted>без служб геолокации) используется CoreWLAN; приложение теперь запрашивает разрешение на службы геолокации при первом запуске; страница Wi-Fi показывает все сети с настоящими именами после предоставления разрешения - macOS — Connection Manager: SSID активного подключения теперь считывается через CoreWLAN, а режим безопасности — через
system_profiler - macOS — SMB: понятное сообщение «требуется аутентификация», когда NAS запрашивает учётные данные; исправлено ложное предупреждение о smb.conf от smbclient из Homebrew
- macOS — исправлено возможное падение при выходе после первого диалога с запросом разрешения на службы геолокации
v1.7.0 — 2026-07-02
- Универсальное контекстное меню в каждой таблице, содержащей IP-адреса или имена хостов, — прямой переход между модулями без копирования и вставки: щёлкните правой кнопкой любой обнаруженный хост и выберите Ping, «Сканировать порты», Whois, DNS, Traceroute, MTR, SSH, RDP, VNC, «Показать в топологии» или «Добавить в инвентарь». Пункты меню SSH/RDP/VNC отображаются жирным, когда соответствующий порт открыт. Метки полностью переведены на все 8 языков интерфейса.
- Страницы-источники (генерируют действия правого клика): IP Scanner, Nmap, Ping, Port Scanner, Traceroute, MTR, Topology (правый клик по узлу)
- Страницы-цели (принимают хост и предзаполняют поля): Whois (
set_target+ авто-запрос), DNS (set_target— только предзаполнение), Ping (set_target+ автозапуск), Traceroute (set_target+ автозапуск), MTR (set_target+ автозапуск), Port Scanner (set_target+ фокус), SSH / RDP / VNC (set_targetоткрывает предзаполненную форму нового подключения), Topology (load_hostsдобавляет узлы из сканирования IP Scanner/Nmap без повторного сканирования — шлюз определяется автоматически, рёбра прорисовываются, исходный узел выделен красным), Asset Inventory (prefill_hostsзапускает сканирование учётных данных непосредственно по обнаруженным хостам, пропуская фазу обнаружения ICMP) - Dashboard — график пинга шлюза: живой спарклайн задержки, обновляемый каждые 2 секунды; цветовая индикация (<20 мс — зелёный / 20–100 мс — оранжевый / >100 мс — красный / таймаут — красный)
- Dashboard — сводка TLS Watchlist: карточка состояния на Dashboard автоматически отражает состояние TLS Watchlist (OK / истекает / тревога) без повторных запросов
- Dashboard — изменение размера гео-карты: карта мира теперь расширяется по горизонтали при изменении размера окна
v1.6.4 — 2026-06-28
- macOS: строка меню теперь показывает NMLinux вместо Python — первопричина: после
exec()в PythonNSBundle.mainBundle()разрешается в бандлPython.framework(CFBundleName = "Python"), который Qt считывает при создании QApplication; исправлено путём патчаinfoDictionary()бандла и переименования нативных пунктов меню через AppKit до создания меню приложения
v1.6.3 — 2026-06-28
- macOS: первая попытка исправить строку меню с помощью
NSProcessInfo.setProcessName_черезpyobjc-framework-Cocoa(заменено в v1.6.4)
v1.6.2 — 2026-06-28
- macOS: в
install_macos_app.shbash-скрипт запуска заменён на скомпилированную C-заглушку, чтобы macOS корректно связывала пакет.appс запущенным процессом; в качестве запасных вариантов добавленыsetprognameи переопределениеsys.argv[0]
v1.6.1 — 2026-06-25
- SSH-терминал — исправлено удалённое эхо: нажатия клавиш во встроенном SSH-терминале отправлялись в удалённую оболочку, но не отражались обратно (клавиатура казалась «мёртвой» после входа). nmlinux принудительно отключал локальное эхо PTY, и ssh через свои режимы терминала (pty-req) распространял этот режим «без эха» на удалённый pty, из-за чего удалённая оболочка переставала отражать ввод. Воспроизведено на свежей VM с Ubuntu 26.04 (современный OpenSSH точно применяет эти режимы). Теперь терминал оставляет PTY в обычном режиме и позволяет ssh самому управлять эхом, как в настоящих эмуляторах терминала.
v1.6.0 — 2026-06-24
- Asset Inventory — WinRM Windows (полностью): обнаружение хостов через TCP-пробу порта, когда ICMP блокируется брандмауэром Windows; PowerShell теперь использует полный абсолютный путь + EncodedCommand (base64), чтобы cmd.exe не интерпретировал конвейеры
|; полная цепочка запасных вариантов без прав администратора: ОС черезver, CPU через реестр, RAM черезsysteminfo, диск черезwmic→fsutil(с учётом локали: EN запятая / FR пробел) →dir /-C - Asset Inventory — SSH с несколькими наборами учётных данных: поддерживается несколько наборов SSH-учётных данных; исправлен диск macOS (
/System/Volumes/Data), запасной вариант для CPU Apple Silicon (hw.model), Synology (/volume1), Unraid (/mnt/user) - Исправления ошибок: ошибки WinRM теперь отображаются в таблице вместо молчаливого запасного варианта; обнаружение хостов через WinRM/SNMP больше не блокируется наличием SSH-учётных данных; исправлен таймаут pywinrm
v1.5.3 — 2026-06-24
- macOS .app — обнаружение инструментов Homebrew:
sshpass,nmapиsnmpget, установленные через Homebrew, теперь обнаруживаются и вызываются по абсолютному пути; пакеты.appв macOS не наследуют PATH Homebrew (/opt/homebrew/bin,/usr/local/bin), поэтому ранее установленные инструменты молча игнорировались - Путь обновления macOS: выполнение
git pull && bash packaging/install_macos_app.shиз корня репозитория теперь является задокументированным способом обновления; скрипт управляет собственным venv (~/.local/share/nmlinux/venv) и не требует системногоpipилиpipx
v1.5.2 — 2026-06-24
- Asset Inventory — новый модуль (29-й); сканирует диапазон CIDR и собирает с каждого хоста ОС, CPU, RAM, диск и время работы через SSH, WinRM, SNMP или Nmap; поддерживает несколько наборов учётных данных для каждого протокола (перебирает по порядку); политика нулевого хранения: учётные данные никогда не записываются на диск и удаляются из памяти после сканирования; экспорт результатов в JSON, CSV или Markdown; в раздел IP Geolocation на Dashboard добавлена анимированная гео-карта
- Исправления сбора по SSH: исправлена ошибка кавычек в команде awk для диска;
free -hзаменён на совместимый с BusyBoxfree; код для macOS теперь используетsw_versдля имени ОС,hw.modelкак запасной вариант для CPU Apple Silicon,/System/Volumes/Dataдля пользовательского тома APFS; тома Synology/Unraid (/volume1,/mnt/user) определяются до корневого; ложный успехdf | tail -1 || …исправлен защитными проверкамиtest -d; из выводаlsb_releaseубираются окружающие кавычки; поддерживается несколько наборов SSH/WinRM учётных данных (для каждого хоста перебираются по порядку)
v1.5.0 — 2026-06-17
- File Transfer Server — новый модуль для запуска/остановки лёгкого TFTP- или HTTP-сервера прямо из приложения; классический сценарий: резервное копирование и восстановление конфигураций роутеров, коммутаторов или принтеров; одновременно активен только один сервер (TFTP или HTTP), настраиваемые порт и корневой каталог, локальные IP-адреса отображаются в виде кнопок копирования в буфер обмена; HTTP включает листинг каталога (просмотр из любого браузера в LAN), GET (скачивание) и POST/PUT (загрузка); TFTP поддерживает GET и PUT (в обе стороны), порт 69 требует root — при ошибке прав приложение показывает кнопку «Запустить от root (pkexec)»; таблица журнала передач в реальном времени (время, имя файла, IP клиента, направление ↑/↓, размер); защита от обхода портов; 8 языков интерфейса; новая зависимость:
tftpy
v1.4.3 — 2026-06-14
- Исправления TLS Watchlist: самоподписанные и недоверенные сертификаты теперь корректно отображаются как «⚠ Недействительный / недоверенный сертификат» (оранжевым) вместо зелёного; перехват исключений SSL расширен, чтобы охватывать все подклассы
ssl.SSLError; записи теперь показывают «… (проверка)», пока выполняется фоновая проверка, и «— (недоступен)», когда хост недоступен
v1.4.2 — 2026-06-14
- TLS Watchlist — постоянный список имён хостов для мониторинга истечения срока действия сертификатов; добавляйте хосты кнопкой
+ Watch(использует текущий хост/порт) или вручную на панели; фоновая проверка запускается автоматически через 2 секунды после запуска; запись «TLS Inspector» на боковой панели показывает цветную точку: красную, если срок действия любого сертификата истёк, оранжевую, если любой сертификат истекает в течение 30 дней; на панели есть кнопка повторной проверки; список показывает статус каждой записи (✓ / ⚠ / EXPIRED) с цветовой индикацией
v1.4.1 — 2026-06-14
- macOS — IP Scanner: исправлено определение MAC-адреса, производителя и интерфейса на macOS;
_arp_entry()теперь вызываетarp -n <ip>на macOS и разбирает формат его вывода (? (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) заменён наsocket.gethostbyaddr()из Python для кроссплатформенного обратного DNS-разрешения; поиск имени хоста теперь работает нативно на macOS без дополнительных инструментов - macOS — SMB Browser: переход с
smbclient(требует Homebrew samba) наsmbutil view(встроенный инструмент macOS); просмотр списка SMB-ресурсов теперь работает на macOS без какой-либо установки - macOS — NFS Browser:
showmountвстроен в macOS, но не поддерживает--no-headers; на macOS флаг удалён, строка заголовка пропускается в парсере; список NFS-экспортов теперь работает нативно - macOS — RDP: когда
xfreerdpне найден, используется запасной вариант — URL-схемаopen rdp://; открывается Microsoft Remote Desktop (App Store), если он установлен, с предзаполненными хостом, портом, именем пользователя и доменом - macOS — VNC: когда
vncviewerне найден, используется запасной вариант — URL-схемаopen vnc://; открывается встроенный macOS Screen Sharing (установка не требуется)
v1.3.9 — 2026-06-13
- Проброс агента SSH — новый флажок «Проброс агента» в форме SSH-подключения; добавляет
-Aк командеssh; позволяет переходить между серверами без копирования вашего закрытого ключа (ПК → A → B); требует активного SSH-агента (SSH_AUTH_SOCK); контекстная справка обновлена на всех 8 языках
v1.3.8 — 2026-06-13- Палитра команд (Ctrl+P) — мгновенная навигация с клавиатуры к любому из 27 модулей; нечёткий поиск по названию и ключевым словам (например, «firewall», «tls», «ssh key», «scan»); стрелки Вверх/Вниз + Enter или одиночный клик для перехода; открывается по Ctrl+P из любого места приложения
- Менеджер экспорта — экспорт полного снимка сети (интерфейсы, маршруты, DNS-резолверы) через Файл → Export Network Report… в форматах JSON, Markdown, обычный текст или PDF (опционально:
pip install reportlab) - Кнопки экспорта на уровне модулей — кнопки экспорта добавлены на страницы Interfaces, DNS, Firewall, SSH Connections и Connection Manager; каждая страница экспортирует текущие данные в выбранном формате с мгновенным обновлением расширения имени файла при изменении фильтра формата
v1.3.6 — 2026-06-12
- Топология — значки устройств — каждый узел теперь отображает SVG-значок Lucide, соответствующий типу устройства (роутер/wi-fi, компьютер/ноутбук, принтер, NAS/сервер, смартфон, сетевой коммутатор, Raspberry Pi), вместо обычного кружка; 5 новых встроенных SVG-значков (
printer,server,smartphone,cpu,laptop) - Топология — обнаружение mDNS — тип устройства определяется через
avahi-browse(опционально, работает параллельно со сканированием nmap); распознаёт принтеры (_ipp._tcp,PDL Printer), телефоны и ТВ на Android (_googlecast._tcp,_androidtvremote2._tcp), компьютеры Apple Mac (am=Mac16,xmodel в AirPlay TXT), NAS-устройства (Synology сообщаетmodel=Xserve), рабочие станции KDE Connect; при отсутствии avahi используется резервный механизм — MAC-адрес по OUI и эвристика по имени хоста - Топология — панель подробностей показывает определённый класс устройства (Printer, Smartphone, NAS…) вместо стандартной метки «Host»; i18n во всех 8 языках
- 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, 日本語 (японский) и 中文 (упрощённый китайский); полный интерфейс (все 27 модулей, ~720 ключей перевода) теперь доступен на FR / EN / ES / DE / IT / PT / JA / ZH; после смены языка в настройках появляется запрос на перезапуск
- Контекстная справка на 8 языках — панель со значком
?(описание, примеры использования и эквивалентные команды CLI) теперь охватывает все 8 языков для каждого модуля; ранее для JA и ZH использовался английский - Исправление ошибок — всплывающие подсказки навигации для SMB/NFS и Hosts File отображались на французском независимо от выбранного языка; недостающие ключи
nav_hint_smb_nfsиnav_hint_hostsдобавлены во все 7 языковых блоков, кроме французского
v1.3.1 — 2026-06-05
- Менеджер SSH-ключей — список всех пар ключей в
~/.ssh/(файл, тип, биты, комментарий, SHA256-отпечаток); генерация ключей Ed25519 или RSA 4096 с опциональной парольной фразой (обнаружение несовпадения, автоматическое имя файла по типу); копирование открытого ключа в буфер обмена; развёртывание на удалённом сервере черезssh-copy-idво встроенном терминале с поддержкой stdin для ввода пароля; удаление пар ключей с подтверждением; автоматическое создание~/.ssh/, если отсутствует; i18n: fr / en / es / de
v1.3.0 — 2026-06-03
- Инспектор TLS / SSL — проверка сертификата любого сервера: subject 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: создаёт venv в
~/.local/share/nmlinux/venv, устанавливает системные зависимости через apt, создаёт лаунчер и запись.desktop(исправляет ошибку PEP 668externally-managed-environment)
v1.2.9 — 2026-05-30
- VNC — новый модуль для управления профилями VNC-подключений; группы/подгруппы как в SSH и RDP; запускает
vncviewer(TigerVNC); совместим с macOS ARD (DH30 auth обрабатывается нативно в 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 — 21 SVG-иконка из Lucide (MIT) теперь включены в
assets/icons/; отрисовываются во время выполнения черезQSvgRenderer; цвет#60a5fa; приложению больше не требуется системная тема иконок (Breeze, Adwaita, Papirus…)
v1.2.6 — 2026-05-24
- Совместимость с GNOME / Adwaita — исправлены иконки на десктопах без KDE:
main.pyтеперь автоматически определяет тему иконок GTK черезgsettingsи применяет её к 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); принудительно применяется темаbreeze, когда обнаружен встроенный в Nix набор иконок; также проверяется/etc/xdg/kdeglobalsна наличие общесистемной конфигурации KDE
v1.2.5 — 2026-05-23
- MTR — встроенный My Traceroute: запускает
mtr --report, разбирает текстовый вывод, отображает живую таблицу с Loss %, RTT Last/Avg/Best/Worst/Jitter для каждого хопа, с цветовой индикацией по критичности потерь; непрерывный режим; экспорт CSV + TXT - Speed Test — тест скорости без зависимостей через
curl+ Cloudflare (speed.cloudflare.com): загрузка (25 MB), отдача (10 MB), пинг до1.1.1.1; до 5 результатов сохраняется в JSON; исторический линейный график (Загрузка/Отдача) - Просмотр брандмауэра — просмотр правил только для чтения: разбирает
/etc/nftables.confи/etc/iptables/*.rulesбез root; активный набор правил через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 теперь отображают маску подсети в десятично-точечной записи (например,
255.255.255.0), полученную из префикса CIDR - Монитор пропускной способности — явная кнопка Start/Stop заменяет ненадёжный автозапуск при загрузке страницы
- Экспорт CSV/TXT — страницы Nmap и Traceroute теперь предлагают кнопки Export CSV и Export TXT (появляются после завершения сканирования/трассировки)
- i18n — новые ключи перевода для всех вышеперечисленных функций (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 с, мгновенные скорости, итоги и пики сеанса
- Wake on LAN — магический пакет на чистом Python (UDP broadcast), постоянная книга хостов (JSON)
- IP-сканер — разрешение имён хостов через
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 | Профили NetworkManager через nmcli: список, фильтр, подключение/отключение/изменение/удаление |
| Interfaces | Таблица сетевых интерфейсов с детализацией по каждому интерфейсу (ip + nmcli) |
| Wi-Fi | Доступные сети, уровень сигнала, безопасность, активная сеть выделена |
| Subnet Calculator | Диапазон сеть/широковещательный адрес/узлы из CIDR, таблица узлов до 4096 записей |
| DNS Lookup | Запросы на основе dig для A, AAAA, MX, TXT, NS, CNAME, PTR, SOA, ANY |
| Ping Monitor | Непрерывный пинг нескольких хостов, статистика RTT, процент потери пакетов |
| IP Scanner | Сканирование ping по CIDR/диапазону, 50 потоков, имя хоста (DNS/mDNS/NetBIOS), MAC-адрес, вендор (OUI), интерфейс, экспорт CSV + TXT |
| Port Scanner | TCP connect-сканирование, 200 потоков, пресеты сервисов, экспорт CSV + TXT |
| Nmap | 7 режимов сканирования, разбор XML-вывода, таблица Host/Port/Protocol/State/Service, экспорт CSV + TXT |
| Whois | Вывод whois в моноширинном шрифте |
| SNMP | snmpwalk/snmpget, v1/v2c, 10 пресетов OID, таблица результатов |
| SNTP / NTP | UDP-клиент RFC 4330 на чистом Python, смещение/задержка/stratum/эталон |
| 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 | Список SMB-ресурсов (smbclient) и NFS-экспортов (showmount) с любого сервера или NAS; опциональные учётные данные для 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; не требует внешних инструментов, кроме curl; график истории (последние 5 запусков) |
| Bandwidth | Пропускная способность по каждому интерфейсу в реальном времени: скользящий график на 60 с, мгновенные скорости, итоги сеанса, пик |
| Wake on LAN | Магический пакет на чистом Python (UDP broadcast), постоянная книга хостов, не требует внешних инструментов |
| Topology Map | Автоматическое обнаружение устройств в LAN через 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 | Файл → 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, установка не требуется. Поиск производителя по OUI в IP Scanner также не требует установки — база данных Wiresharkmanufавтоматически загружается в фоновом режиме при первом использовании и кэшируется локально.
Необязательные инструменты
| Tool | Feature | Linux | macOS |
|---|---|---|---|
xfreerdp / xfreerdp3 | Удалённый рабочий стол (RDP) | Arch: freerdp · Ubuntu ≤24.04: freerdp2-x11 · Ubuntu 26.04+: freerdp3-x11 | необязательно — откат к Microsoft Remote Desktop (open rdp://) |
vncviewer | VNC | Arch: tigervnc · Debian: tigervnc-viewer | необязательно — откат к встроенной функции «Общий экран» macOS (open vnc://) |
nm-connection-editor | Редактирование подключений из Connection Manager | 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 .
Или войдите в оболочку разработки:```bash nix develop python3 -m nmlinux.main
Все зависимости Python (PySide6, ptyprocess, pyte, tftpy) и системные инструменты (nmcli, nmap, freerdp, vncviewer, mtr, avahi-browse…) предоставляются автоматически через обёртку Nix.
### Вариант 4 — AppImage (любой дистрибутив Linux, без установки)
Скачайте `NMLinux-x.y.z-x86_64.AppImage` со страницы [последнего релиза](https://github.com/thongor77/nmlinux/releases/latest):```bash
chmod +x NMLinux-*.AppImage
./NMLinux-*.AppImage
Установка не требуется — Python, Qt и все модули NMLinux объединены в одном файле.
Работает на любом Linux x86_64 с glibc 2.17+ (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 или платной нотаризации не требуется — под капотом тот же открытый скрипт
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` — сканирование SSID Wi-Fi
- `pyobjc-framework-CoreLocation` — разрешение Location Services для имён Wi-Fi
**Wi-Fi в macOS 26 (Tahoe):** при первом запуске macOS запросит разрешение Location Services — предоставьте его, чтобы отображались имена сетей 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
The script will:
- Install system dependencies via
apt(libgl1, python3-venv, freerdp, tigervnc…) - Create a virtual environment in
~/.local/share/nmlinux/venv - Install NMLinux and its Python dependencies inside the venv
- Create a launcher at
~/.local/bin/nmlinux - Add a
.desktopentry so NMLinux appears in your application menu
After install, run nmlinux from a terminal or launch it from the application menu.
Option 7 — Wheel (all distros / macOS)
Download the .whl from the latest release and install it:```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 встроенную SVG-иконку [Lucide](https://lucide.dev), отображаемую во время выполнения через `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:**
| Module | Status | Notes |
|--------|--------|-------|
| **RDP** | ✓ macOS | В качестве запасного варианта использует `open rdp://` → Microsoft Remote Desktop (App Store) |
| **VNC** | ✓ macOS | В качестве запасного варианта использует `open vnc://` → Screen Sharing (встроенная функция, без установки) |
| **IP Scanner** | ✓ macOS | Использует `socket.gethostbyaddr()` — нативный Python, без дополнительных инструментов |
| **SMB** | ✓ macOS | Использует `smbutil view` (встроенный) вместо `smbclient` |
| **NFS** | ✓ macOS | `showmount` встроен; разбор заголовков адаптирован |
| **Connection Manager** | ⚠ Ограничено | Редактирование/удаление требуют `nmcli` (только Linux); просмотр списка работает |
### Общее
- Нет интеграции с root/polkit — инструменты, требующие повышенных привилегий (некоторые режимы Nmap, raw-сокеты), необходимо запускать с `sudo`; в macOS повышение привилегий выполняется через `osascript` + привилегии администратора
- Проброс SSH-агента требует активного SSH-агента (`SSH_AUTH_SOCK`); в macOS это обрабатывается системой автоматически, ручная настройка не требуется
---
## Авторы и благодарности
- **[Anthropic](https://www.anthropic.com)** — Claude Code, ИИ-ассистент, использованный для создания этого проекта
- Автору — за видение, тестирование и руководство
---
## Поддержите проект
Если 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 не использовался и не переводился.





