
Einheitliches Netzwerk-Toolkit für Linux — Python 3 + PySide6
Ein vereinheitlichtes Netzwerk-Toolkit für Linux und macOS – untersuchen, verbinden, diagnostizieren.
NMLinux ist eine einzige, vereinheitlichte GUI, die 29 Netzwerkmodule in einem Fenster vereint: Schnittstellenüberwachung, WLAN, DNS, SSH-Terminal, Firewall-Ansicht, Topologiekarte, Traceroute und mehr. Von Grund auf in Python und PySide6 (Qt 6) entwickelt, mit 8 Oberflächensprachen und ohne externe Abhängigkeiten über die Standard-Systemwerkzeuge hinaus.
[!NOTE] NMLinux ist nicht mit dem Linux-Systemdaemon
/usr/bin/NetworkManager(NetworkManager von Red Hat/GNOME) verwandt. NMLinux ist ein eigenständiges Projekt, das von Grund auf in Python und PySide6 entwickelt wurde.
Entwickelt mit Claude Code (Anthropic) und dem Beitrag seines Autors.
NMLinux wird mit KI-Unterstützung entwickelt – konkret mit Claude Code – und das wird in diesem Repo nirgendwo versteckt. Heutzutage nutzt fast jedes ernsthafte Softwareprojekt irgendwo in seiner Pipeline KI, ob es das zugibt oder nicht. Also ist „war KI beteiligt" nicht die interessante Frage. Die interessante Frage ist: Fängt irgendetwas es ab, wenn die KI etwas falsch macht?
Das hier fängt es ab, falls du lieber selbst prüfst, als mir aufs Wort zu glauben:
pytest tests/ -v. Reine Logik plus eine Handvoll echter Qt-Widget-Tests (Menüs, Tabellen), ohne die interessanten Teile wegzumocken.docs/Decisions-Techniques.md — jede nicht offensichtliche technische Entscheidung, die verworfenen Alternativen und die gefundenen und behobenen Fehler (einschließlich KI-bedingter) – mit dokumentierter Begründung.docs/Architecture.md und docs/Carte-des-Modules.md — die tatsächliche Struktur des Codes, synchron gehalten mit dem, was ausgeliefert wird.Nichts davon existiert, weil KI nicht vertrauenswürdig wäre. Es existiert, weil nichts veröffentlicht werden sollte, ohne einen Prozess, der es prüft – handgeschriebener Code eingeschlossen. Beurteile das Ergebnis und wie es verifiziert wird, nicht das Werkzeug, das beim Schreiben geholfen hat.
Trotzdem einen Fehler gefunden? Das ist nützlich, nicht peinlich – eröffne ein Issue.
GitHub Discussions sind geöffnet — teile Feedback, melde Ideen, stelle Fragen oder sag einfach Hallo. Der Autor hat über 30 Jahre Erfahrung in Infrastruktur und Betrieb und hat dieses Werkzeug entwickelt, weil gute, kostenlose und einfache Software auch für Linux existieren sollte.
Linux-Screenshots aus v1.2.7 – macOS-Screenshots aus v1.3.5. Die App hat jetzt 29 Module und 8 Oberflächensprachen (FR/EN/ES/DE/IT/PT/JA/ZH).
Linux (KDE)
| Dashboard | Topologie |
|---|---|
![]() | ![]() |
| Traceroute | WLAN |
|---|---|
![]() | ![]() |
macOS
| Dashboard | Traceroute |
|---|---|
![]() | ![]() |
traceroute über den Host-Shim immer auf PATH aufgelöst, selbst wenn auf dem Host kein echtes traceroute-Binärprogramm installiert war; daher griff der Worker nie auf tracepath zurück und die Trace endete sofort ohne Hops und ohne angezeigten Fehler. Jetzt wird immer dann auf tracepath zurückgegriffen, wenn traceroute keinerlei auswertbare Ausgabe erzeugt – unabhängig davon, warum es fehlgeschlagen ist.DISPLAY/WAYLAND_DISPLAY gesetzt sind (jede GUI-Sitzung) und ssh kein sauberes tty hat, kann es für die Passwortabfrage $SSH_ASKPASS statt des eingebetteten Terminals verwenden – was die Authentifizierung stillschweigend scheitern lässt, wenn kein Askpass-Helfer installiert ist. SSH_ASKPASS_REQUIRE=never erzwingt nun, dass Passwortabfragen immer über das Terminal selbst laufen.packaging/flatpak/ zielt auf KDE Linux und andere reine Flatpak-Distributionen. Host-CLI-Werkzeuge, die nmlinux extern aufruft (nmcli, pkexec, mount.cifs, ssh, nmap, …), werden über flatpak-spawn --host-Shims auf PATH angebunden, statt einzeln zu sandboxen; PySide6 stammt von Flathubs io.qt.PySide.BaseApp statt vom PyPI-Rad. Nicht auf Flathub veröffentlicht – stattdessen wird ein einzelnes .flatpak-Bundle mit packaging/flatpak/build-bundle.sh erstellt und wie bereits beim AppImage jedem Release beigefügt. In v1.7.12 eingestellt – siehe oben.Ctrl+Shift+C oder dem Rechtsklick-Menü kopieren; mit Ctrl+Shift+V einfügen (bestehend). Kopieren war bisher unmöglich – es gab gar keine Textauswahl.iperf3-Tests entweder gegen eine gebündelte Liste öffentlicher Server (26 Länder) oder gegen einen gespeicherten benutzerdefinierten Server (z. B. einen internen Org-Server) durch. Unterstützt TCP/UDP, IPv4/IPv6/Auto und die Rückwärtsrichtung (Download), mit Jitter/Paketverlust bei UDP-Tests. Vorgeschlagen in Issue #6.iperf3 – installieren, um den LAN-Tab zu aktivieren; der Tab zeigt andernfalls ein Banner und bleibt deaktiviert.~/mnt/<host>_<share>) einzuhängen, der vom Terminal und jeder anderen App genutzt werden kann – keine flüchtige Browse-Ansicht. Nur für die Sitzung (keine fstab/systemd-Persistenz), Anmeldedaten aus den vorhandenen Benutzer-/Passwortfeldern wiederverwendet. Linux verwendet pkexec mount -t cifs mit einer Datei mit eingeschränkten Berechtigungen (niemals über ps sichtbar); macOS verwendet direkt mount_smbfs. Wird die Standard-Aushandlung von einem Server abgelehnt (bei älteren NAS-Geräten üblich), wird automatisch mit einem älteren SMB-Dialekt (vers=2.0) erneut versucht – beide Versuche laufen unter einer einzigen Authentifizierungsabfrage über einen dedizierten Hilfsprozess.cifs-utils (Linux) zum Einhängen von SMB-Freigaben; in macOS integriert.bootstrap_macos.sh erzwingt dem Homebrew-Installer nicht mehr NONINTERACTIVE=1, was auf jedem frischen Administratorkonto sofort abbrach, statt nach dem sudo-Passwort zu fragen; der dokumentierte Einzeiler lädt das Skript jetzt zuerst herunter, statt es direkt in bash zu pipen, da verschachtelte interaktive Schritte (Xcode-CLT-Installer, Homebrews eigene sudo-Abfrage) beim Piping in den Eingabestrom des äußeren Skripts eingreifen konnten.SmbNfsPage war die einzige Zielseite, die im in v1.7.0 eingeführten modulübergreifenden Rechtsklick-System fehlte; ein Rechtsklick auf einen Host und die Wahl von SMB füllt nun das Host-Feld vor und startet sofort den Scan, im Menü fett, wenn Port 445 als offen erkannt wird.system_profiler (liefert ohne Ortungsdienste <redacted>) auf CoreWLAN als primäre Datenquelle umgestellt; die App fragt jetzt beim ersten Start die Berechtigung für Ortungsdienste an; die WLAN-Seite zeigt nach Erteilung alle Netzwerke mit echten Namen.system_profiler für den Sicherheitsmodus.set_target + automatische Abfrage), DNS (set_target nur Vorbelegung), Ping (set_target + Autostart), Traceroute (set_target + Autostart), MTR (set_target + Autostart), Port-Scanner (set_target + Fokus), SSH / RDP / VNC (set_target öffnet das vorbelegte Neue-Verbindung-Formular), Topologie (load_hosts fügt Knoten aus dem IP-Scanner-/Nmap-Scan ein, ohne erneut zu scannen – Gateway automatisch erkannt, Kanten gezeichnet, Ursprungsknoten rot hervorgehoben), Asset Inventory (prefill_hosts startet den Anmeldedaten-Scan direkt auf den erkannten Hosts, überspringt die ICMP-Erkennungsphase)exec() in Python löst NSBundle.mainBundle() auf das Python.framework-Bundle (CFBundleName = "Python") auf, das Qt während der QApplication-Konstruktion liest; behoben, indem die infoDictionary() des Bundles gepatcht und native Menüpunkte über AppKit umbenannt werden, bevor das Anwendungsmenü erstellt wird.NSProcessInfo.setProcessName_ über pyobjc-framework-Cocoa zu korrigieren (durch v1.6.4 ersetzt).install_macos_app.sh wurde durch einen kompilierten C-Stub ersetzt, damit macOS das .app-Bundle korrekt dem laufenden Prozess zuordnet; setprogname und sys.argv[0]-Override als Fallback ergänzt.| interpretiert; vollständige Fallback-Kette ohne Admin-Rechte: OS über ver, CPU über Registrierung, RAM über systeminfo, Datenträger über wmic → fsutil (sprachabhängig: EN Komma / FR Leerzeichen) → dir /-C/System/Volumes/Data), Apple-Silicon-CPU-Fallback (hw.model), Synology (/volume1), Unraid (/mnt/user)sshpass, nmap und snmpget werden jetzt gefunden und über ihren absoluten Pfad aufgerufen; .app-Bundles unter macOS erben den Homebrew-PATH (/opt/homebrew/bin, /usr/local/bin) nicht, daher wurden zuvor installierte Werkzeuge stillschweigend ignoriert.git pull && bash packaging/install_macos_app.sh aus dem Repo-Root ist jetzt die dokumentierte Upgrade-Methode; das Skript verwaltet seine eigene venv (~/.local/share/nmlinux/venv) und benötigt kein systemweites pip oder pipx.free -h durch BusyBox-kompatibles free ersetzt; der macOS-Codepfad verwendet jetzt sw_vers für den OS-Namen, hw.model als Fallback für Apple-Silicon-CPU, /System/Volumes/Data für das APFS-Benutzerdaten-Volume; Synology-/Unraid-Volumes (/volume1, /mnt/user) werden vor Root erkannt; df | tail -1 || …-Fehlalarm-Muster mit test -d-Wächtern behoben; lsb_release-Ausgabe von umgebenden Anführungszeichen befreit; mehrere SSH-/WinRM-Anmeldedatensätze unterstützt (pro Host der Reihe nach ausprobieren)tftpyssl.SSLError-Unterklassen abzudecken; Einträge zeigen jetzt „… (prüfe)“ während der Hintergrundprüfung und „— (nicht erreichbar)“, wenn der Host nicht erreicht werden kann.+ Watch hinzufügen (verwendet aktuellen Host/Port) oder manuell im Bedienfeld; die Hintergrundprüfung läuft automatisch 2 Sekunden nach dem Start; der Sidebar-Eintrag „TLS Inspector“ zeigt einen farbigen Punkt: rot, wenn ein Zertifikat abgelaufen ist, orange, wenn ein Zertifikat innerhalb von 30 Tagen abläuft; Schaltfläche „Erneut prüfen“ im Bedienfeld; die Liste zeigt den Status pro Eintrag (✓ / ⚠ / ABGELAUFEN) mit Farbcodierung._arp_entry() ruft jetzt unter macOS arp -n <ip> auf und parst dessen Ausgabeformat (? (IP) at AA:BB:CC on en0), statt /proc/net/arp zu lesen (nur Linux); alle vier Scanner-Spalten werden unter macOS jetzt korrekt befüllt.getent (nur Linux) wurde durch Pythons socket.gethostbyaddr() für eine plattformübergreifende Reverse-DNS-Auflösung ersetzt; die Hostnamenauflösung funktioniert jetzt nativ auf macOS ohne zusätzliches Werkzeugsmbclient (benötigt Homebrew-Samba) auf smbutil view (integriertes macOS-Werkzeug) umgestellt; die SMB-Freigabeliste funktioniert jetzt auf macOS ohne Installationshowmount ist auf macOS integriert, unterstützt aber kein --no-headers; Flag auf macOS entfernt, Kopfzeile im Parser übersprungen; die NFS-Exportliste funktioniert jetzt nativxfreerdp nicht gefunden wird, wird auf das URL-Schema open rdp:// zurückgegriffen; öffnet Microsoft Remote Desktop (App Store), falls installiert, mit vorausgefülltem Host, Port, Benutzername und Domänevncviewer nicht gefunden wird, wird auf das URL-Schema open vnc:// zurückgegriffen; öffnet die macOS-Bildschirmfreigabe (integriert, keine Installation erforderlich)-A zum ssh-Befehl hinzu; ermöglicht das Springen zwischen Servern, ohne den privaten Schlüssel zu kopieren (PC → A → B); erfordert einen aktiven SSH-Agenten (SSH_AUTH_SOCK); kontextbezogene Hilfe in allen 8 Sprachen aktualisiertpip install reportlab)printer, server, smartphone, cpu, laptop)avahi-browse erkannt (optional, läuft parallel zum nmap-Scan); erkennt Drucker (_ipp._tcp, PDL Printer), Android-Smartphones und Fernseher (_googlecast._tcp, _androidtvremote2._tcp), Apple-Macs (am=Mac16,x-Modell in AirPlay-TXT), NAS-Geräte (Synology meldet model=Xserve), KDE-Connect-Desktops; fällt auf MAC-Anbieter-OUI und Hostname-Heuristiken zurück, wenn avahi nicht verfügbar ist_IS_MACOS) und verzweigt zu nativen macOS-Befehlen: route -n get default, ifconfig, scutil --dns, networksetup, system_profiler SPAirPortDataType, pfctl, netstat -ib; die Rechteausweitung verwendet osascript + with administrator privileges anstelle von pkexec; die Monospace-Schriftart verwendet Menlo anstelle von Monospace?-Abzeichen-Panel (Beschreibung, Anwendungsbeispiele und äquivalente CLI-Befehle) deckt jetzt für jedes Modul alle 8 Sprachen ab; zuvor fielen JA und ZH auf Englisch zurücknav_hint_smb_nfs und nav_hint_hosts zu allen 7 nicht-französischen Sprachblöcken hinzugefügt~/.ssh/ auf (Datei, Typ, Bits, Kommentar, SHA256-Fingerabdruck); generiert Ed25519- oder RSA-4096-Schlüssel mit optionaler Passphrase (Erkennung von Abweichungen, automatischer Dateiname je nach Typ); öffentlichen Schlüssel in die Zwischenablage kopieren; auf einem Remote-Server über ssh-copy-id in einem Inline-Terminal mit stdin-Unterstützung für Passwortabfragen bereitstellen; Schlüsselpaare mit Bestätigung löschen; erstellt ~/.ssh/ automatisch, falls nicht vorhanden; i18n: fr / en / es / deopenssl s_client); funktioniert für gültige, abgelaufene und selbstsignierte Zertifikate; verständliche Fehlermeldungen bei nicht erreichbaren Hostssmbclient -L mit optionalen Anmeldedaten, zeigt Freigabename / Typ / Kommentar; NFS-Tab: showmount -e, zeigt Exportpfad und Zugriffsliste; erkennt fehlende Werkzeuge und zeigt distributionsspezifische Installationsanweisungen/etc/hosts anzeigen und bearbeiten; Tabelle mit Aktivieren/Deaktivieren-Umschalter, Einträge über Dialog hinzufügen/bearbeiten/löschen; nach IP oder Hostname filtern; speichert über pkexec cp (polkit-Authentifizierungsdialog)~/.local/share/nmlinux/venv, installiert Systemabhängigkeiten über apt, erstellt Launcher und .desktop-Eintrag (behebt den PEP-668-Fehler externally-managed-environment)vncviewer (TigerVNC); kompatibel mit macOS ARD (DH30-Authentifizierung wird nativ von vncviewer behandelt); Passwort wird nie gespeichert; erkennt fehlendes vncviewer mit distributionsspezifischen Installationsanweisungenxfreerdp als externen Prozess; Passwort wird beim Verbinden abgefragt und nie gespeichert; Felder: Host, Port, Benutzername, Domäne, Auflösung, Vollbild; erkennt fehlendes xfreerdp mit distributionsspezifischen Installationsanweisungen (Arch / Debian / Fedora)assets/icons/ gebündelt; werden zur Laufzeit über QSvgRenderer gerendert; gefärbt #60a5fa; die App benötigt kein System-Icon-Theme mehr (Breeze, Adwaita, Papirus …)main.py erkennt das GTK-Icon-Theme jetzt automatisch über gsettings und wendet es auf Qt an; erweiterte Fallback-Ketten für Wi-Fi, Traceroute, Speedtest, Interfaces, Portscanner, Firewall, MTR; themed_icon() validiert jetzt, dass eine echte Pixmap existiert, bevor ein Theme-Symbol akzeptiert wirdqt6.qtsvg zu QT_PLUGIN_PATH hinzu, damit Qt SVG-Symbole rendern kann; themed_icon() probiert die Größen 22/24/16/32/48 (Breeze verwendet 22 px, nicht 24); das Theme wird auf breeze erzwungen, wenn das Nix-gebündelte Symbolset erkannt wird; prüft zusätzlich /etc/xdg/kdeglobals auf systemweite KDE-Konfigurationmtr --report aus, analysiert die Textausgabe, zeigt eine Live-Tabelle mit Verlust %, RTT Letzter/Ø/Bester/Schlechtester/Jitter pro Hop, farbcodiert nach Schwere des Verlusts; kontinuierlicher Modus; CSV- und TXT-Exportcurl + Cloudflare (speed.cloudflare.com): Download (25 MB), Upload (10 MB), Ping zu 1.1.1.1; bis zu 5 Läufe in JSON gespeichert; historisches Liniendiagramm (Download/Upload)/etc/nftables.conf und /etc/iptables/*.rules ohne Root; Live-Regelsatz über pkexec nft list ruleset; Spalten: Tabelle / Kette / Regel / Port / Aktion / Kommentar; farbcodierte Aktionen; Live-Filter?-Abzeichen; beim Überfahren wird ein Tooltip mit einer Beschreibung des Moduls angezeigt; ein vertikaler Trenner wurde zwischen Sidebar und Inhaltsbereich hinzugefügtcore/theme.py mit is_dark(), color_ok(), color_err(); benutzerdefinierte Painter-Widgets (_Graph, _MapWidget) lesen die Palette zum Zeichenzeitpunkt; alle fest codierten Catppuccin-Mocha-Farben wurden durch semantische Qt-Palettenrollen ersetzt255.255.255.0) an, abgeleitet aus dem CIDR-Präfixtraceroute / tracepath-Fallback)getent/avahi/nmblookup; MAC-Adresse, Anbieter (IEEE-OUI 39K Einträge), Schnittstellenspalten; CSV/TXT-Export aktualisiertErste öffentliche Veröffentlichung — 13 Module: Dashboard, Interfaces, Wi-Fi, Subnetzrechner, DNS-Lookup, Ping-Monitor, IP-Scanner, Portscanner, Nmap, Whois, SNMP, SNTP/NTP, SSH.
Linux — die meisten sind bei einer Standardinstallation bereits vorhanden:```bash
sudo pacman -S iproute2 networkmanager bind-tools nmap whois net-snmp iputils mtr curl
sudo apt install iproute2 network-manager dnsutils nmap whois snmp mtr-tiny curl
sudo dnf install iproute NetworkManager bind-utils nmap whois net-snmp-utils mtr curl
**macOS** — Installation über [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 bringt
ping,dig,traceroute,netstat,ifconfig,smbutilundroutenativ mit.networksetupundscutilsind integrierte macOS-Tools, keine Installation erforderlich. Auch die OUI-Herstellerabfrage im IP-Scanner benötigt keine Installation — diemanuf-Datenbank von Wireshark wird bei der ersten Verwendung automatisch im Hintergrund heruntergeladen und lokal zwischengespeichert.
pip install pyte oder sudo pacman -S python-pyte)pip install tftpy oder sudo pacman -S python-tftpy) — Dateiübertragungsmodulyay -S nmlinux
Alle Abhängigkeiten (PySide6, ptyprocess, pyte, nmcli, …) werden automatisch verwaltet.
### Option 2 — NixOS / Nix
Direkt mit der gebündelten `flake.nix` ausführen — keine systemweite Installation erforderlich:```bash
git clone https://github.com/thongor77/nmlinux.git
cd nmlinux
nix run .
Oder eine Entwicklungsshell starten:```bash nix develop python3 -m nmlinux.main
Alle Python-Abhängigkeiten (PySide6, ptyprocess, pyte, tftpy) und Systemwerkzeuge (nmcli, nmap, freerdp, vncviewer, mtr, avahi-browse…) werden automatisch über den Nix-Wrapper bereitgestellt.
### Option 4 — AppImage (beliebige Linux-Distribution, keine Installation)
Laden Sie `NMLinux-x.y.z-x86_64.AppImage` aus der [neuesten Version](https://github.com/thongor77/nmlinux/releases/latest) herunter:```bash
chmod +x NMLinux-*.AppImage
./NMLinux-*.AppImage
Keine Installation erforderlich — Python, Qt und alle NMLinux-Module sind in einer einzigen Datei gebündelt.
Funktioniert auf jedem x86_64-Linux mit glibc 2.17+ (Ubuntu 16.04+, Fedora 26+, Arch, Mint usw.).
Systemnetzwerk-Tools (
nmap,whois,mtr…) sind nicht gebündelt — installiere sie über deinen Paketmanager, damit die entsprechenden Module funktionieren. Siehe Requirements unten.
Schnellster Weg — Einzeiler-Bootstrap. Funktioniert auf einem komplett nackten Mac: installiert Xcode Command Line Tools, Homebrew, alle Systemtools und dann NMLinux selbst. Kann bedenkenlos erneut ausgeführt werden (aktualisiert statt neu zu installieren):```bash curl -fsSL https://raw.githubusercontent.com/thongor77/nmlinux/main/packaging/bootstrap_macos.sh -o /tmp/bootstrap_macos.sh && bash /tmp/bootstrap_macos.sh
Installiere systemweit (`/Applications`) anstelle von `~/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
Kein Apple-Entwicklerkonto oder kostenpflichtige Notarisierung nötig — unter der Haube steckt dasselbe Open-Source-Skript
install_macos_app.sh, das nur für dich abgerufen und ausgeführt wird. Das Skript ist schlichtes, lesbares Bash; du kannst/tmp/bootstrap_macos.shgerne öffnen und lesen, bevor du es ausführst, oder es direkt hier einsehen:packaging/bootstrap_macos.sh.Erst herunterladen, dann ausführen (statt direkt in
bashzu pipen) ist Absicht: Auf einem frischen Mac stößt das Skript verschachtelte interaktive Schritte an (Xcode-Command-Line-Tools-Installer, Homebrews eigener Installer, der nach deinemsudo-Passwort fragt), die vom Terminal lesen — wenn das Skript direkt inbashgepiped wird, können diese verschachtelten Eingabeaufforderungen den eigenen Eingabestrom des Skripts stören und es vorzeitig stoppen. Die Ausführung aus einer heruntergeladenen Datei vermeidet das vollständig.
Manuelle Installation — wenn du jeden Schritt lieber selbst ausführen möchtest oder bereits Homebrew hast:```bash
brew install nmap mtr curl
git clone https://github.com/thongor77/nmlinux.git cd nmlinux bash packaging/install_macos_app.sh
To update: `git pull && bash packaging/install_macos_app.sh`
To uninstall: `bash packaging/uninstall_macos.sh`
To install system-wide (`/Applications`): `bash packaging/install_macos_app.sh --system`
Das Skript installiert die folgenden Python-Pakete automatisch in die venv:
- `PySide6`, `ptyprocess`, `pyte`, `tftpy`
- `pyobjc-framework-Cocoa` — macOS-Menüleiste, native Dialoge
- `pyobjc-framework-CoreWLAN` — Wi-Fi-SSID-Scanning
- `pyobjc-framework-CoreLocation` — Berechtigung für Ortungsdienste für Wi-Fi-Namen
**Wi-Fi unter macOS 26 (Tahoe):** Beim ersten Start fragt macOS nach der Berechtigung für Ortungsdienste – erteile sie, um Wi-Fi-Netzwerknamen anzuzeigen. Die Berechtigung befindet sich unter *Systemeinstellungen › Datenschutz & Sicherheit › Ortungsdienste*.
> Die meisten Module funktionieren unter macOS ohne Änderungen. RDP fällt auf `open rdp://` zurück (Microsoft Remote Desktop), VNC auf `open vnc://` (integrierte Bildschirmfreigabe). Der Verbindungsmanager hat unter macOS eine eingeschränkte Funktionalität (`nmcli` nicht verfügbar).
### Option 6 — Debian / Ubuntu / Linux Mint (Installationsskript)
> **Hinweis für Linux-Mint-/Ubuntu-Benutzer:** `pip install` ist systemweit auf Python 3.12+ blockiert (PEP 668 — `externally-managed-environment`). Verwende das mitgelieferte Installationsskript – es erstellt automatisch eine virtuelle Umgebung und installiert einen `.desktop`-Eintrag.```bash
git clone https://github.com/thongor77/nmlinux.git
cd nmlinux
bash install.sh
Das Skript wird:
apt installieren (libgl1, python3-venv, freerdp, tigervnc…)~/.local/share/nmlinux/venv erstellen~/.local/bin/nmlinux erstellen.desktop-Eintrag hinzufügen, damit NMLinux in Ihrem Anwendungsmenü erscheintNach der Installation führen Sie nmlinux von einem Terminal aus aus oder starten Sie es über das Anwendungsmenü.
Laden Sie die .whl von der neuesten Version herunter und installieren Sie sie:```bash
pip install nmlinux-1.5.3-py3-none-any.whl
sudo apt install libgl1 libglib2.0-0 libdbus-1-3 freerdp2-x11 tigervnc-viewer
sudo apt install libgl1 libglib2.0-0 libdbus-1-3 freerdp3-x11 tigervnc-viewer
pipx install nmlinux-1.5.3-py3-none-any.whl
> **Hinweis für Ubuntu 26.04+:** `pipx` erfordert, dass zuerst Systembibliotheken (libGL usw.) installiert werden – die obigen Befehle decken diese ab. Wenn `pipx install` aufgrund eines PySide6-Buildfehlers fehlschlägt, verwenden Sie stattdessen **Option 4** (Installationsskript), die alles automatisch übernimmt.
### Option 8 — Aus dem Quellcode (Arch / Fedora / macOS)```bash
git clone https://github.com/thongor77/nmlinux.git
cd nmlinux
pip install PySide6 ptyprocess pyte tftpy
python3 -m nmlinux.main
Kopiere die .desktop-Datei, damit NMLinux in deinem Anwendungsstarter erscheint:```bash
cp data/nmlinux.desktop ~/.local/share/applications/
update-desktop-database ~/.local/share/applications/
Bearbeiten Sie dann den `Exec=`-Pfad in der Datei, falls erforderlich.
---
## Ausführen```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
---
## Kompatibilität mit Desktop-Umgebungen
Seit v1.2.7 verwendet NMLinux 21 gebündelte [Lucide](https://lucide.dev)-SVG-Icons, die zur Laufzeit über `QSvgRenderer` gerendert werden. Die Anwendung ist nicht länger von einem System-Icon-Theme (Breeze, Adwaita, Papirus…) abhängig und wird auf KDE, GNOME, XFCE und anderen korrekt angezeigt. Der Qt-Stil passt sich automatisch an die laufende Desktop-Umgebung an.
---
## Einschränkungen
### Linux
Volle Unterstützung — alle 29 Module verfügbar.
### macOS
Die meisten Module funktionieren sofort, da sie auf Werkzeugen basieren, die auf beiden Plattformen verfügbar sind (`ssh`, `dig`, `ping`, `curl`, `nmap`, `openssl`…).
**9 Module erfordern eine explizite macOS-Anpassung** (doppelte Codepfade, die die Plattform beim Start erkennen): Dashboard, Interfaces, Wi-Fi, Topology, Bandwidth, Firewall, Connection Manager, Hosts File, MTR — diese verwenden native macOS-Befehle (`ifconfig`, `networksetup`, `scutil`, `pfctl`, `system_profiler`…) anstelle ihrer Linux-Äquivalente.
**Module mit eingeschränkter oder fehlender macOS-Unterstützung:**
| Modul | Status | Anmerkungen |
|--------|--------|-------|
| **RDP** | ✓ macOS | Greift auf `open rdp://` zurück → Microsoft Remote Desktop (App Store) |
| **VNC** | ✓ macOS | Greift auf `open vnc://` zurück → Bildschirmfreigabe (integriert, keine Installation erforderlich) |
| **IP Scanner** | ✓ macOS | Verwendet `socket.gethostbyaddr()` — reines Python, kein zusätzliches Werkzeug |
| **SMB** | ✓ macOS | Verwendet `smbutil view` (integriert) anstelle von `smbclient` |
| **NFS** | ✓ macOS | `showmount` integriert; Header-Parsing angepasst |
| **Connection Manager** | ⚠ Eingeschränkt | Bearbeiten/Löschen erfordern `nmcli` (nur Linux); Listenansicht funktioniert |
### Allgemein
- Keine Root-/polkit-Integration — Werkzeuge, die erhöhte Rechte benötigen (einige Nmap-Modi, Raw-Sockets), müssen mit `sudo` ausgeführt werden; unter macOS erfolgt die Rechteausweitung über `osascript` + `administrator privileges`
- SSH-Agent-Weiterleitung erfordert einen aktiven SSH-Agenten (`SSH_AUTH_SOCK`); unter macOS wird dies automatisch vom System übernommen, keine manuelle Einrichtung erforderlich
---
## Danksagungen und Anerkennungen
- **[Anthropic](https://www.anthropic.com)** — Claude Code, der KI-Assistent, der zum Bau dieses Projekts verwendet wurde
- Dem Autor für die Vision, das Testen und die Leitung
---
## Unterstützen Sie das Projekt
Wenn NMLinux für Sie nützlich ist, erwägen Sie, seine Entwicklung zu unterstützen:
- **PayPal** — [Über PayPal spenden](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`
---
## Lizenz
GPL-2.0 — siehe [LICENSE](https://github.com/thongor77/nmlinux/blob/HEAD/LICENSE).
Dieses Projekt ist eine unabhängige Neuimplementierung. Es wurde kein Code von NETworkManager verwendet oder übersetzt.
flatpak-spawn --hostTIOCSCTTYEPERMscript| Modul | Beschreibung |
|---|
| Dashboard | Lokale Rechnerinfo, Gateway, öffentliche IP, Geolokalisierung, DNS-Resolver |
| Verbindungsmanager | NetworkManager-Profile über nmcli: auflisten, filtern, verbinden/trennen/bearbeiten/löschen |
| Interfaces | Tabelle der Netzwerkschnittstellen mit Details pro Schnittstelle (ip + nmcli) |
| Wi-Fi | Verfügbare Netzwerke, Signalstärkebalken, Sicherheit, verbundenes Netzwerk hervorgehoben |
| Subnetzrechner | Netzwerk-/Broadcast-/Hostbereich aus CIDR, Hosttabelle mit bis zu 4096 Einträgen |
| DNS-Lookup | dig-basierte Abfrage für A, AAAA, MX, TXT, NS, CNAME, PTR, SOA, ANY |
| Ping-Monitor | Kontinuierlicher Ping an mehrere Hosts, RTT-Statistiken, Paketverlust in % |
| IP-Scanner | CIDR-/Bereichs-Ping-Scan, 50 Threads, Hostname (DNS/mDNS/NetBIOS), MAC-Adresse, Anbieter (OUI), Schnittstelle, CSV- und TXT-Export |
| Portscanner | TCP-Connect-Scan, 200 Threads, Dienst-Presets, CSV- und TXT-Export |
| Nmap | 7 Scan-Modi, XML-Ausgabeanalyse, Host-/Port-/Protokoll-/Status-/Dienst-Tabelle, CSV- und TXT-Export |
| Whois | Rohe Whois-Ausgabe in Monospace |
| SNMP | snmpwalk/snmpget, v1/v2c, 10 OID-Presets, Ergebnistabelle |
| SNTP / NTP | Reiner Python-RFC-4330-UDP-Client, Offset/Verzögerung/Stratum/Referenz |
| SSH | Eingebettetes PTY-Terminal (pyte/VT100), gespeicherte Verbindungen (JSON), Schlüsselauthentifizierung, Rückscrollpuffer |
| Remotedesktop | RDP-Verbindungsprofile (Gruppen/Untergruppen); startet xfreerdp; Passwort wird nie gespeichert |
| VNC | VNC-Verbindungsprofile (Gruppen/Untergruppen); startet vncviewer (TigerVNC); macOS-ARD-kompatibel; Passwort wird nie gespeichert |
| SSH-Schlüsselverwaltung | Schlüsselpaare in ~/.ssh/ auflisten (Typ, Bits, Fingerabdruck); Ed25519/RSA 4096 erzeugen; öffentlichen Schlüssel kopieren; via ssh-copy-id auf Server bereitstellen; Paare mit Bestätigung löschen |
| TLS-Inspektor | Zertifikatsdetails: CN, SANs, Aussteller, Gültigkeit + Ablauf-Countdown, Seriennummer, Protokoll, Cipher, Kette; Watchlist mit Hintergrund-Ablaufmonitor und Seitenleisten-Farbpunkt |
| SMB / NFS | SMB-Freigaben (smbclient) und NFS-Exporte (showmount) von jedem Server oder NAS auflisten; optionale Anmeldedaten für SMB |
| Hosts-Datei | /etc/hosts anzeigen/bearbeiten: Einträge hinzufügen, löschen, umschalten; filtern; über pkexec speichern |
| Visuelles Traceroute | Hop-für-Hop-Route auf einer Weltkarte, Live-Geolokalisierung (ip-api.com), Zoom & Verschieben, CSV- und TXT-Export |
| MTR | Eingebettetes My Traceroute: Verlust %, RTT Letzter/Ø/Bester/Schlechtester/Jitter pro Hop, farbcodiert, CSV- und TXT-Export |
| Firewall-Viewer | Schreibgeschützter nftables- + iptables/ip6tables-Regelsatz (ohne Root); live über pkexec; nach Tabelle/Kette/Aktion filtern |
| Speedtest | Download/Upload/Ping über Cloudflare; kein externes Werkzeug außer curl; Verlaufsdiagramm (letzte 5 Läufe) |
| Bandbreite | Echtzeit-Durchsatz pro Schnittstelle: 60-s-Gleitdiagramm, Live-Geschwindigkeiten, Sitzungssummen, Spitzenwert |
| Wake on LAN | Reines Python-Magic-Packet (UDP-Broadcast), persistentes Host-Buch, kein externes Werkzeug erforderlich |
| Topologiekarte | Automatische Erkennung von LAN-Geräten über nmap -sn; interaktiver Graph mit verschiebbaren Knoten, Zoom/Verschieben, Detailbereich |
| Einstellungen | Sprachauswahl (FR / EN / ES / DE / IT / PT / JA / ZH), dauerhaft gespeichert; Neustart nach Änderung erforderlich |
| Befehlspalette | Strg+P-Overlay: Fuzzy-Suche über alle 29 Module nach Name oder Schlüsselwort |
| Dateiübertragung | Bedarfsweise TFTP- oder HTTP-Server; konfigurierbarer Port und Wurzelverzeichnis; lokale IPs als Kopier-Buttons; Live-Protokolltabelle (Dateiname, Client-IP, Richtung ↑/↓, Größe); HTTP-Verzeichnisliste + GET/POST/PUT; TFTP GET + PUT; Port 69 fragt pkexec ab |
| Export | Datei → Netzwerkbericht exportieren (JSON/Markdown/Text/PDF); modulweiser Export auf Interfaces, DNS, Firewall, SSH, Verbindungen |
| Tool | Funktion | Linux | macOS |
|---|
xfreerdp / xfreerdp3 | Remotedesktop (RDP) | Arch: freerdp · Ubuntu ≤24.04: freerdp2-x11 · Ubuntu 26.04+: freerdp3-x11 | optional — greift auf Microsoft Remote Desktop zurück (open rdp://) |
vncviewer | VNC | Arch: tigervnc · Debian: tigervnc-viewer | optional — greift auf die macOS-Bildschirmfreigabe zurück (open vnc://, integriert) |
nm-connection-editor | Verbindungen aus dem Verbindungsmanager bearbeiten | Arch: nm-connection-editor | — (Stattdessen öffnen sich die Systemeinstellungen) |
traceroute | Traceroute-Alternative (standardmäßig wird tracepath verwendet) | Arch: traceroute | integriert |
mount.cifs (cifs-utils) | SMB-Freigaben aus dem Kontextmenü einhängen | Arch/Debian: cifs-utils | integriert (mount_smbfs) |
iperf3 | Geschwindigkeitstest — LAN-Tab | Arch: iperf3 · Debian/Ubuntu: iperf3 | brew install iperf3 |