
लिनक्स के लिए एकीकृत नेटवर्क टूलकिट — Python 3 + PySide6
# NMLinux · v1.7.14 [](https://github.com/thongor77/nmlinux/releases/latest) [](https://www.python.org/) [](LICENSE) [](#installation) [](#features) [](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) [](#support-the-project) **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](https://claude.ai/code) (Anthropic) और इसके लेखक के योगदान के साथ बनाया गया। --- ## विकास प्रक्रिया NMLinux AI सहायता के साथ बनाया गया है — विशेष रूप से [Claude Code](https://claude.ai/code) के साथ — और यह इस रेपो में कहीं भी छिपाया नहीं गया है। आज लगभग हर गंभीर सॉफ़्टवेयर प्रोजेक्ट अपनी पाइपलाइन में कहीं न कहीं AI का उपयोग करता है, चाहे वह इसे बताए या नहीं। तो "क्या AI शामिल था" दिलचस्प सवाल नहीं है। दिलचस्प सवाल यह है: जब AI कुछ गलत करता है तो क्या कोई चीज़ उसे पकड़ती है? अगर आप मेरी बात मानने के बजाय खुद जाँचना पसंद करें, तो यहाँ बताया गया है कि क्या करता है: - **162 टेस्ट** — `pytest tests/ -v`। शुद्ध लॉजिक के साथ-साथ कुछ वास्तविक Qt विजेट टेस्ट (मेनू, टेबल), दिलचस्प हिस्सों को मॉक करके छिपाया नहीं गया। - **[`docs/Decisions-Techniques.md`](https://github.com/thongor77/nmlinux/blob/main/docs/Decisions-Techniques.md)** — हर गैर-स्पष्ट तकनीकी निर्णय, अस्वीकार किए गए विकल्प, और पाए गए और ठीक किए गए बग (AI द्वारा पेश किए गए बग सहित), तर्क के साथ लिखा हुआ। - **[`docs/Architecture.md`](https://github.com/thongor77/nmlinux/blob/main/docs/Architecture.md)** और **[`docs/Carte-des-Modules.md`](https://github.com/thongor77/nmlinux/blob/main/docs/Carte-des-Modules.md)** — कोड की वास्तविक संरचना, जो शिप होने वाली चीज़ के साथ सिंक में रखी जाती है। - हर रिलीज़ से पहले चलाया जाने वाला एक **i18n संगतता जाँच** जो 8 समर्थित भाषाओं में गुम अनुवाद कुंजियों को पकड़ता है। इनमें से कुछ भी इसलिए मौजूद नहीं है क्योंकि AI पर भरोसा नहीं किया जा सकता। यह इसलिए मौजूद है क्योंकि किसी भी चीज़ को बिना जाँचने वाली प्रक्रिया के शिप नहीं किया जाना चाहिए — हाथ से लिखे कोड सहित। आउटपुट और उसके सत्यापन के तरीके को परखें, न कि उस टूल को जिसने इसे लिखने में मदद की। फिर भी कोई बग मिला? यह उपयोगी है, शर्मिंदगी की बात नहीं — [एक इश्यू खोलें](https://github.com/thongor77/nmlinux/issues)। --- ## समुदाय **[GitHub Discussions](https://github.com/thongor77/nmlinux/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.14 — 2026-09-30 - **AppImage — स्टार्टअप क्रैश ठीक करें, दूसरा प्रयास**: v1.7.13 का फिक्स (बंडल की गई सिस्टम लाइब्रेरीज़ को हटाना) पर्याप्त नहीं था — एम्बेडेड Python इंटरप्रेटर स्वयं (`libpython3.14.so.1.0`, जो Arch Linux डेव मशीन की glibc 2.44 के विरुद्ध बनाया गया था) को अभी भी AppImageHub कैटलॉग की टेस्ट मशीन (Ubuntu 22.04, glibc 2.35) में मौजूद से नए glibc सिंबल्स की आवश्यकता थी, इसलिए AppImage लॉन्च होते ही क्रैश होता रहा। `build-appimage.sh` अब PyInstaller बंडल को होस्ट पर बनाने के बजाय एक `ubuntu:22.04` कंटेनर के अंदर (`podman` के माध्यम से) बनाता है, ताकि हर एम्बेडेड बाइनरी ठीक उसी glibc संस्करण के विरुद्ध लिंक हो जिसे AppImage को समर्थन देना है। ### v1.7.13 — 2026-09-30 - **AppImage — स्टार्टअप क्रैश ठीक करें (अपूर्ण, v1.7.14 देखें)**: `build-appimage.sh` साझा लाइब्रेरीज़ (`libz.so.1`, `libstdc++.so.6`, `libX11.so.6`, `libfontconfig.so.1`, और अन्य) को सीधे Arch Linux बिल्ड मशीन की बहुत हाल की glibc से बंडल कर रहा था। पुराने डिस्ट्रोज़ पर AppImage लॉन्च होते ही तुरंत क्रैश हो जाता था (`GLIBC_ABI_DT_RELR' not found`), जिसे AppImageHub कैटलॉग के स्वचालित टेस्ट ने पकड़ा। अब इन लाइब्रेरीज़ को बंडल से हटा दिया गया है ताकि AppImage होस्ट सिस्टम की अपनी प्रतियों पर वापस आ जाए, जो AppImages के लिए मानक दृष्टिकोण है। ### v1.7.12 — 2026-08-12 - **Traceroute — फिक्स**: Flatpak के अंतर्गत (v1.7.11, नीचे देखें — अब हटा दिया गया), `traceroute` हमेशा होस्ट शिम के माध्यम से `PATH` पर हल हो जाता था, भले ही होस्ट पर कोई वास्तविक `traceroute` बाइनरी इंस्टॉल न हो, इसलिए वर्कर कभी `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 पासवर्ड-प्रॉम्प्ट बग की जाँच करने पर एक कर्नेल-स्तरीय सीमा सामने आई: `flatpak-spawn --host` के माध्यम से रिले किया गया प्रोसेस कभी भी फ़ॉरवर्ड किए गए pty का कंट्रोलिंग-टर्मिनल स्वामी नहीं बन सकता (`TIOCSCTTY` को `EPERM` के साथ अस्वीकार कर दिया गया — एक अलग, असंबंधित सेशन पहले से ही इसका स्वामी है; यह एक जानबूझकर बनाई गई कर्नेल सुरक्षा सीमा है, बग नहीं)। एकमात्र काम करने वाला वर्कअराउंड (`script`, एक नया pty आवंटित करना) पासवर्ड प्रॉम्प्ट को ठीक करता है लेकिन उस सेशन के लिए लाइव टर्मिनल-रीसाइज़ प्रसार को तोड़ देता है — इसे Flatpak को बिल्कुल भी शिप न करने से बदतर समझौता माना गया। आगे बढ़ते हुए AUR और AppImage समर्थित Linux इंस्टॉल पथ हैं। ### v1.7.11 — 2026-08-03 - **Flatpak पैकेजिंग (KDE Linux)**: `packaging/flatpak/` के अंतर्गत एक स्थानीय बिल्ड मैनिफ़ेस्ट KDE Linux और अन्य Flatpak-केवल डिस्ट्रोज़ को लक्षित करता है। होस्ट CLI टूल्स जिन्हें nmlinux शेल आउट करता है (`nmcli`, `pkexec`, `mount.cifs`, `ssh`, `nmap`, …) को प्रत्येक को अलग-अलग सैंडबॉक्स करने के बजाय `PATH` पर `flatpak-spawn --host` शिम्स के माध्यम से ब्रिज किया जाता है; PySide6 PyPI व्हील के बजाय Flathub के `io.qt.PySide.BaseApp` से आता है। Flathub पर प्रकाशित नहीं — इसके बजाय `packaging/flatpak/build-bundle.sh` के साथ एक एकल `.flatpak` बंडल बनाया जाता है और प्रत्येक रिलीज़ के साथ संलग्न किया जाता है, ठीक उसी तरह जैसे AppImage पहले से है। **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 - **Speed Test — नया LAN (iperf3) टैब**: मौजूदा इंटरनेट स्पीड टेस्ट के साथ-साथ, एक नया टैब क्लाइंट-केवल `iperf3` टेस्ट चलाता है या तो बंडल की गई सार्वजनिक सर्वर सूची (26 देश) के विरुद्ध या सहेजे गए कस्टम सर्वर (जैसे किसी आंतरिक संगठन का सर्वर) के विरुद्ध। TCP/UDP, IPv4/IPv6/auto, और रिवर्स (डाउनलोड) दिशा का समर्थन करता है, UDP टेस्ट के लिए jitter/loss दिखाता है। [इश्यू #6](https://github.com/thongor77/nmlinux/issues/6) द्वारा सुझाया गया - **नई वैकल्पिक निर्भरता**: `iperf3` — LAN टैब सक्षम करने के लिए इंस्टॉल करें; अन्यथा टैब एक बैनर दिखाता है और अक्षम रहता है ### v1.7.6 — 2026-07-05 - **Asset Inventory — राइट-क्लिक रीफ्रेश**: एक या अधिक पहले से स्कैन किए गए रो (मल्टी-सेलेक्ट समर्थित) पर राइट-क्लिक करें और "Refresh selected" चुनें ताकि पूरा नेटवर्क स्कैन दोबारा चलाने के बजाय सिर्फ़ उन होस्ट्स को उसी जगह फिर से स्कैन किया जाए - **Asset Inventory — SSH ऑथ-विफलता फ़ीडबैक**: अस्वीकृत SSH लॉगिन अब चुपचाप विफल होने के बजाय "SSH auth failed" दिखाता है, बिना Nmap-द्वारा पहचाने गए होस्टनेम/OS बेसलाइन को खोए — एक वास्तविक Synology NAS के विरुद्ध पुष्टि की गई जहाँ DSM का Auto Block ने अन्य कॉन्फ़िगर किए गए क्रेडेंशियल सेट पहले आज़माए जाने के बाद सही पासवर्ड को अस्वीकार कर दिया था ### v1.7.5 — 2026-07-04 - **Ping Monitor — सहेजे गए टारगेट डायरेक्टरी**: एक नया बाएँ हाथ का पैनल आपको ping टारगेट (नाम, होस्ट, अंतराल) को एक स्थायी सूची में सहेजने देता है, ताकि मॉनिटर किए जा रहे होस्ट ऐप रीस्टार्ट होने पर भी बने रहें, बजाय दोबारा टाइप करने के। प्रत्येक सक्रिय रूप से मॉनिटर किए जा रहे रो पर एक ★ बटन उस होस्ट को सेशन के किसी भी समय डायरेक्टरी में सहेजता है — ऐप के अचानक बंद होने से पहले पहले से योजना बनाने की आवश्यकता नहीं - **Ping Monitor — "Start monitoring"**: एक सहेजा गया टारगेट चुनें और एक क्लिक से उसका मॉनिटरिंग शुरू करें, उसके सहेजे गए अंतराल का पुन: उपयोग करते हुए ### v1.7.4 — 2026-07-04 - **Asset Inventory — असंगत स्कैन परिणाम ठीक किए गए**: लाइवनेस चेक बिना किसी पुनःप्रयास के एकल 1-सेकंड-टाइमआउट ping भेजता था, जो स्कैनर के अपने समवर्ती लोड (एक साथ 40 होस्ट तक प्रोब किए जाते हैं) के तहत या जब कोई Wi-Fi होस्ट बीकन्स के बीच थोड़ी देर के लिए सो रहा हो, किसी वास्तविक डिवाइस को छोड़ सकता था — एक वास्तविक सबनेट के विरुद्ध लाइव पुष्टि की गई जो एक ही रेंज के बार-बार चलाए जाने पर अलग-अलग डिवाइस संख्याएँ लौटाता था। अब चेक TCP पोर्ट प्रोब पर वापस आने से पहले ping का पुनःप्रयास करता है - **Asset Inventory — नया "Refresh empty" बटन**: स्कैन के बाद, पूरी रेंज को दोबारा स्कैन करने के बजाय केवल उन IPs को फिर से स्कैन करें जिन्होंने कोई डेटा नहीं लौटाया; नए पाए गए होस्ट मौजूदा परिणामों में मर्ज कर दिए जाते हैं ### v1.7.3 — 2026-07-03 - **SMB — राइट-क्लिक मेनू से शेयर माउंट करें**: SMB टैब में किसी शेयर पर राइट-क्लिक करें और Mount/Unmount चुनें ताकि इसे एक स्थिर स्थानीय पथ (`~/mnt/<host>_<share>`) पर माउंट किया जा सके, जो टर्मिनल और किसी भी अन्य ऐप से उपयोग करने योग्य हो — कोई अस्थायी ब्राउज़ व्यू नहीं। केवल-सेशन (कोई fstab/systemd स्थायित्व नहीं), क्रेडेंशियल मौजूदा user/password फ़ील्ड से पुन: उपयोग किए जाते हैं। Linux प्रतिबंधित-अनुमति क्रेडेंशियल फ़ाइल के साथ `pkexec mount -t cifs` का उपयोग करता है (कभी `ps` के माध्यम से उजागर नहीं); macOS सीधे `mount_smbfs` का उपयोग करता है। जब कोई सर्वर डिफ़ॉल्ट नेगोशिएशन को अस्वीकार करता है (पुराने NAS यूनिट्स के साथ आम) तो स्वचालित रूप से पुराने SMB डायलेक्ट (`vers=2.0`) के साथ पुनःप्रयास करता है — दोनों प्रयास एक समर्पित हेल्पर प्रोसेस के माध्यम से एक ही ऑथेंटिकेशन प्रॉम्प्ट के तहत होते हैं - **नई वैकल्पिक निर्भरता**: SMB माउंटिंग के लिए `cifs-utils` (Linux); macOS में अंतर्निहित ### v1.7.2 — 2026-07-03 - **macOS इंस्टॉल — एक बेयर Mac पर पाए गए दो बूटस्ट्रैप बग ठीक किए गए**: `bootstrap_macos.sh` अब Homebrew इंस्टॉलर पर `NONINTERACTIVE=1` को बाध्य नहीं करता, जो किसी भी नए एडमिन अकाउंट पर sudo पासवर्ड के लिए प्रॉम्प्ट करने के बजाय तुरंत रद्द हो जाता था; प्रलेखित वन-लाइनर अब स्क्रिप्ट को सीधे `bash` में पाइप करने के बजाय पहले डाउनलोड करता है, क्योंकि नेस्टेड इंटरैक्टिव चरण (Xcode CLT इंस्टॉलर, Homebrew का अपना sudo प्रॉम्प्ट) पाइप किए जाने पर बाहरी स्क्रिप्ट के अपने इनपुट स्ट्रीम में हस्तक्षेप कर सकते हैं - **यूनिवर्सल राइट-क्लिक मेनू — SMB जोड़ा गया**: `SmbNfsPage` v1.7.0 में शिप किए गए इंटर-मॉड्यूल राइट-क्लिक सिस्टम से गायब एकमात्र लक्ष्य पेज था; किसी होस्ट पर राइट-क्लिक करके SMB चुनने पर अब होस्ट फ़ील्ड पहले से भर जाता है और स्कैन तुरंत शुरू हो जाता है, पोर्ट 445 खुला पाए जाने पर मेनू में बोल्ड - **i18n — शेष Dashboard स्ट्रिंग्स का अनुवाद**: गेटवे लेटेंसी लेबल, TLS Watchlist कार्ड शीर्षक और उसकी स्टेटस पंक्ति अभी भी हार्डकोडेड फ़्रेंच थीं; अब सभी 8 इंटरफ़ेस भाषाओं में अनूदित ### v1.7.1 — 2026-07-02 - **macOS 26 (Tahoe)** — Wi-Fi SSID फिक्स: प्राथमिक डेटा स्रोत के रूप में `system_profiler` (Location Services के बिना `<redacted>` लौटाता है) से **CoreWLAN** पर स्विच किया गया; ऐप अब पहले लॉन्च पर Location Services अनुमति का अनुरोध करता है; अनुमति मिलने पर Wi-Fi पेज सभी नेटवर्क वास्तविक नामों के साथ दिखाता है - **macOS** — Connection Manager: कनेक्टेड SSID अब CoreWLAN के माध्यम से पढ़ा जाता है, सुरक्षा मोड के लिए `system_profiler` के साथ - **macOS** — SMB: जब NAS को क्रेडेंशियल की आवश्यकता हो तो स्पष्ट "authentication required" संदेश; Homebrew smbclient से आने वाली झूठी smb.conf चेतावनी ठीक की गई - **macOS** — पहली Location Services अनुमति डायलॉग के बाद बाहर निकलने पर संभावित क्रैश ठीक किया गया ### v1.7.0 — 2026-07-02 - **यूनिवर्सल राइट-क्लिक कॉन्टेक्स्ट मेनू** हर उस टेबल पर जिसमें IPs या होस्टनेम हों — कॉपी-पेस्ट किए बिना सीधे मॉड्यूल के बीच नेविगेट करें: किसी भी खोजे गए होस्ट पर राइट-क्लिक करें और Ping, Scan ports, Whois, DNS, Traceroute, MTR, SSH, RDP, VNC, View in Topology, या Add to Inventory चुनें। संबंधित पोर्ट खुला पाए जाने पर मेनू आइटम 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 — गेटवे ping ग्राफ़**: हर 2 सेकंड में अपडेट होने वाली लाइव लेटेंसी स्पार्कलाइन; रंग-कोडित (<20 ms हरा / 20–100 ms नारंगी / >100 ms लाल / टाइमआउट लाल) --- [Read more](https://github.com/thongor77/nmlinux)