
Linux向け統合ネットワークツールキット — Python 3 + PySide6
Linux と macOS のための統合ネットワークツールキット — 検査、接続、診断。
NMLinux は、29 のネットワークモジュールを 1 つのウィンドウにまとめた単一の統合 GUI です。インターフェース監視、Wi-Fi、DNS、SSH ターミナル、ファイアウォールビューアー、トポロジーマップ、traceroute など。Python と PySide6(Qt 6)でゼロから構築され、8 つのインターフェース言語を備え、標準システムツール以外の外部依存関係はありません。
[!NOTE] NMLinux は Linux システムデーモン
/usr/bin/NetworkManager(Red Hat/GNOME による NetworkManager)とは関係ありません。 NMLinux は Python と PySide6 でゼロから構築されたスタンドアロンプロジェクトです。
Claude Code(Anthropic)とその作者の貢献により構築されました。
NMLinux は AI 支援 — 具体的には Claude Code — で構築されており、それはこのリポジトリのどこにも隠されていません。今日のほぼすべての本格的なソフトウェアプロジェクトは、明示していないにせよ、そのパイプラインのどこかで AI を使用しています。したがって「AI が関与していたか」は興味深い質問ではありません。興味深い質問はこれです: AI が何か間違えたときに、それを誰が検出するのか?
私の言葉を信じるより確認したい場合のために、その答えは次のとおりです。
pytest tests/ -v。純粋なロジックに加え、実際の Qt ウィジェットテスト(メニュー、テーブル)も少し含まれ、興味深い部分をモックでごまかすことはありません。docs/Decisions-Techniques.md — 明白でない技術的判断、却下された代替案、そして見つかって修正されたバグ(AI によって持ち込まれたものを含む)の理由がすべて文書化されています。docs/Architecture.md と docs/Carte-des-Modules.md — 実際のコード構造であり、出荷されるものと同期が保たれています。これらは AI を信頼できないから存在するのではありません。手書きのコードを含め、何もチェックするプロセスなしに出荷されるべきではないからです。出力とその検証方法を判断してください。それを書くのに役立ったツールではありません。
それでもバグを見つけましたか? それは恥ずかしいことではなく、役立つことです — 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)
| ダッシュボード | トポロジー |
|---|---|
![]() | ![]() |
| トレースルート | Wi-Fi |
|---|---|
![]() | ![]() |
macOS
| ダッシュボード | トレースルート |
|---|---|
![]() | ![]() |
traceroute バイナリがインストールされていなくても、traceroute が常にホスト側のシム経由で PATH から解決されていました。そのためワーカーは tracepath にフォールバックせず、トレースはホップなし・エラー表示なしで即座に終了していました。現在は、traceroute が解析可能な出力をまったく生成しなかった場合、失敗の理由にかかわらず tracepath にフォールバックするようになりました。DISPLAY/WAYLAND_DISPLAY が設定されている場合(任意の GUI セッション)で、ssh がクリーンな tty を持たないとき、パスワードプロンプトに埋め込みターミナルではなく $SSH_ASKPASS を使用しようとすることがあり、askpass ヘルパーがインストールされていないと認証が静かに失敗していました。現在は SSH_ASKPASS_REQUIRE=never により、パスワードプロンプトが常にターミナル自体を経由するよう強制されます。flatpak-spawn --host 経由で中継されたプロセスは、転送された pty の制御端末の所有者になることができません(TIOCSCTTY が で拒否される — 別の無関係なセッションがすでに所有しているため。これは意図的なカーネルセキュリティ境界であり、バグではありません)。唯一の回避策( による新しい pty の割り当て)はパスワードプロンプトを修正しますが、そのセッションのライブ端末リサイズの伝播が壊れます — Flatpak をまったく提供しないより悪いトレードオフと判断しました。今後は AUR と AppImage がサポートされる Linux インストール経路です。packaging/flatpak/ 配下のローカルビルドマニフェストは、KDE Linux およびその他の Flatpak 専用ディストリビューションを対象としています。nmlinux が外部実行するホスト CLI ツール(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 で廃止 — 上記参照。Ctrl+Shift+C または右クリックメニューでコピー、Ctrl+Shift+V(既存)でペーストします。これまでテキスト選択がまったく存在せず、コピーは不可能でした。iperf3 テストを実行します。TCP/UDP、IPv4/IPv6/自動、および逆方向(ダウンロード)をサポートし、UDP テストではジッター/損失が表示されます。issue #6 により提案されました。iperf3 — LAN タブを有効にするにはインストールしてください。タブはバナーを表示し、それ以外の場合は無効のままです。~/mnt/<ホスト>_<共有>)にマウントされ、ターミナルや他のアプリから使用できます — 一時的なブラウズビューではありません。セッション限定(fstab/systemd 永続化なし)で、資格情報は既存のユーザー/パスワードフィールドから再利用されます。Linux では、権限を制限した資格情報ファイル(ps で公開されない)を使用して pkexec mount -t cifs を使用します。macOS では mount_smbfs を直接使用します。サーバーがデフォルトのネゴシエーションを拒否した場合(古い NAS で一般的)、古い SMB ダイアレクト(vers=2.0)で自動的に再試行します — 両方の試行は専用ヘルパープロセスを介して 1 回の認証プロンプトで行われます。cifs-utils(Linux)は SMB マウント用です。macOS には組み込まれています。bootstrap_macos.sh は Homebrew インストーラーに NONINTERACTIVE=1 を強制しなくなりました。これにより、新しい管理者アカウントでは sudo パスワードを求める代わりに即座に中止されていました。ドキュメント記載のワンライナーは、スクリプトを bash に直接パイプするのではなく、最初にダウンロードするようになりました。パイプ処理では、ネストされた対話ステップ(Xcode CLT インストーラー、Homebrew 自身の sudo プロンプト)が外側のスクリプトの入力ストリームに干渉する可能性があるためです。SmbNfsPage は、v1.7.0 で導入されたモジュール間右クリックシステムに含まれていなかった唯一のターゲットページでした。ホストを右クリックして SMB を選択すると、ホストフィールドが事前入力され、即座にスキャンが開始されます。ポート 445 が開いていることが検出された場合はメニューで太字表示されます。system_profiler(位置情報サービスなしでは <redacted> を返す)から CoreWLAN に変更。アプリは初回起動時に位置情報サービスの許可を要求するようになりました。許可が付与されると、Wi-Fi ページにすべてのネットワークが実際の名前で表示されます。system_profiler を使用します。set_target + 自動クエリ)、DNS(set_target 事前入力のみ)、Ping(set_target + 自動開始)、トレースルート(set_target + 自動開始)、MTR(set_target + 自動開始)、ポートスキャナー(set_target + フォーカス)、SSH / RDP / VNC(set_target で事前入力済みの新規接続フォームを開く)、トポロジー(load_hosts は再スキャンせずに IP スキャナー/Nmap スキャンからノードを注入 — ゲートウェイは自動検出、エッジが描画され、発信元ノードが赤で強調表示)、アセットインベントリ(prefill_hosts は検出されたホストで直接資格情報スキャンを開始し、ICMP 検出フェーズをスキップ)exec() で Python に入った後、NSBundle.mainBundle() は、Qt が QApplication 構築中に読み取る Python.framework バンドル(CFBundleName = "Python")に解決されます。アプリケーションメニューが作成される前に、バンドルの infoDictionary() をパッチし、AppKit 経由でネイティブメニュー項目の名前を変更することで修正しました。pyobjc-framework-Cocoa を介した NSProcessInfo.setProcessName_ によるメニューバー修正の最初の試み(v1.6.4 で置き換え)install_macos_app.sh の bash ランチャースクリプトをコンパイル済み C スタブに置き換え、macOS が .app バンドルを実行中のプロセスと正しく関連付けるようにしました。フォールバックとして setprogname と sys.argv[0] オーバーライドを追加。| を解釈するのを防ぎます。管理者権限なしの完全なフォールバックチェーン: OS は ver、CPU はレジストリ、RAM は systeminfo、ディスクは wmic → fsutil(ロケール対応 EN カンマ / FR スペース)→ dir /-C/System/Volumes/Data)、Apple Silicon CPU フォールバック(hw.model)、Synology(/volume1)、Unraid(/mnt/user)sshpass、nmap、snmpget が絶対パスを使用して検出・呼び出しされるようになりました。macOS の .app バンドルは Homebrew の PATH(/opt/homebrew/bin、/usr/local/bin)を継承しないため、以前はインストール済みツールが静かに無視されていました。git pull && bash packaging/install_macos_app.sh を実行することが、ドキュメント化されたアップグレード方法になりました。このスクリプトは独自の venv(~/.local/share/nmlinux/venv)を管理し、システムレベルの pip や pipx を必要としません。free -h を BusyBox 互換の free に置き換え。macOS コードパスは OS 名に sw_vers、Apple Silicon CPU のフォールバックに hw.model、APFS ユーザーデータボリュームに /System/Volumes/Data を使用するようになりました。Synology/Unraid ボリューム(/volume1、/mnt/user)は root より先に検出されます。df | tail -1 || … の誤検知パターンを test -d ガードで修正。lsb_release 出力から周囲の引用符を除去。複数の SSH/WinRM 資格情報セットをサポート(ホストごとに順番に試行)。tftpyssl.SSLError サブクラスをカバー。エントリはバックグラウンドチェック実行中は「…(確認中)」、ホストに到達できない場合は「—(到達不能)」と表示されます。+ ウォッチ(現在のホスト/ポートを使用)またはパネルで手動でホストを追加。バックグラウンドチェックは起動 2 秒後に自動実行。サイドバーの「TLS インスペクター」エントリに色付きドットを表示: いずれかの証明書が期限切れの場合は赤、30 日以内に期限切れになる証明書がある場合はオレンジ。パネルに再チェックボタン。リストはエントリごとにステータス(✓ / ⚠ / 期限切れ)を色分けして表示。_arp_entry() は macOS では /proc/net/arp(Linux 専用)を読み取る代わりに arp -n <ip> を呼び出し、その出力形式(? (IP) at AA:BB:CC on en0)を解析するようになりました。スキャナーの 4 つの列すべてが macOS で正しく入力されます。getent を、Pythonの socket.gethostbyaddr() を使ったクロスプラットフォームな逆DNS解決に置き換えました;ホスト名ルックアップが追加ツールなしでmacOS上でネイティブに動作するようになりましたsmbclient(Homebrew sambaが必要)から smbutil view(macOS組み込みツール)に切り替え;SMB共有の一覧表示がインストール不要でmacOS上で動作するようになりましたshowmount はmacOSに組み込まれていますが --no-headers には対応していません;macOSではフラグを除去し、パーサーでヘッダー行をスキップします;NFSエクスポート一覧がネイティブに動作するようになりましたxfreerdp が見つからない場合、open rdp:// URLスキームにフォールバックします;インストールされていれば Microsoft Remote Desktop(App Store)を開き、ホスト・ポート・ユーザー名・ドメインが事前入力されますvncviewer が見つからない場合、open vnc:// URLスキームにフォールバックします;macOSの画面共有(組み込み、インストール不要)を開きますssh コマンドに -A を追加;秘密鍵をコピーせずにサーバー間をジャンプ可能(PC → A → B);アクティブなSSHエージェント(SSH_AUTH_SOCK)が必要;全8言語でコンテキストヘルプを更新pip install reportlab)printer、server、smartphone、cpu、laptop)avahi-browse を使って検出します(任意、nmapスキャンと並行して実行);プリンター(_ipp._tcp、PDL Printer)、Androidスマホ/テレビ(_googlecast._tcp、_androidtvremote2._tcp)、Apple Mac(AirPlay TXTの am=Mac16,x モデル)、NASデバイス(Synologyが model=Xserve を報告)、KDE Connectデスクトップを識別;avahiが利用できない場合は MAC ベンダーOUIとホスト名ヒューリスティックにフォールバック_IS_MACOS)、ネイティブのmacOSコマンドに分岐します:route -n get default、ifconfig、scutil --dns、networksetup、system_profiler SPAirPortDataType、pfctl、netstat -ib;権限昇格には pkexec の代わりに osascript + with administrator privileges を使用;等幅フォントは Monospace の代わりに Menlo を使用? バッジパネル(説明、使用例、同等のCLIコマンド)が、すべてのモジュールで8言語すべてに対応;以前は JA と ZH は英語にフォールバックしていましたnav_hint_smb_nfs と nav_hint_hosts キーを、フランス語以外の7つの言語ブロックすべてに追加~/.ssh/ 内のすべてのキーペアを一覧表示(ファイル、種類、ビット数、コメント、SHA256フィンガープリント);オプションのパスフレーズ付きで Ed25519 または RSA 4096 キーを生成(不一致検出、種類に応じた自動ファイル名);公開キーをクリップボードにコピー;インラインターミナルで ssh-copy-id を使ってリモートサーバーにデプロイ(パスワードプロンプト用のstdin対応);確認付きでキーペアを削除;~/.ssh/ が存在しない場合は自動作成;i18n: fr / en / es / deopenssl s_client 経由);有効・期限切れ・自己署名証明書に対応;到達不能ホストには分かりやすいエラーメッセージsmbclient -L(オプションで認証情報付き)、共有名/種類/コメントを表示;NFSタブ: showmount -e、エクスポートパスとアクセスリストを表示;不足ツールを検出し、ディストリビューション別のインストール手順を表示/etc/hosts の表示と編集;有効/無効トグルのあるテーブル、ダイアログでエントリの追加/編集/削除;IPまたはホスト名でフィルター;pkexec cp で保存(polkit認証ダイアログ)~/.local/share/nmlinux/venv にvenvを作成し、aptでシステム依存関係をインストールし、ランチャーと .desktop エントリを作成(PEP 668 externally-managed-environment エラーを修正)vncviewer(TigerVNC)を起動;macOS ARD に対応(DH30認証は vncviewer がネイティブに処理);パスワードは保存されません;vncviewer が無い場合はディストリビューション別のインストール手順を検出xfreerdp を外部プロセスとして起動;接続時にパスワードを要求、保存はされません;フィールド: ホスト、ポート、ユーザー名、ドメイン、解像度、全画面;xfreerdp が無い場合はディストリビューション別のインストール手順を検出(Arch / Debian / Fedora)assets/icons/ に同梱;実行時に QSvgRenderer で描画;色は #60a5fa;システムアイコンテーマ(Breeze、Adwaita、Papirus…)が不要になりましたmain.py が gsettings でGTKアイコンテーマを自動検出し、Qtに適用するように;Wi-Fi、Traceroute、Speed Test、Interfaces、Port Scanner、Firewall、MTR のフォールバックチェーンを拡張;themed_icon() はテーマアイコンを受け入れる前に実際のピクスマップが存在することを検証するようにQT_PLUGIN_PATH に qt6.qtsvg を追加し、QtがSVGアイコンを描画できるように;themed_icon() はサイズ 22/24/16/32/48 を試行(Breezeは24ではなく22pxを使用);Nix同梱のアイコンセットを検出した場合はテーマを breeze に強制;システム全体のKDE設定として /etc/xdg/kdeglobals もチェックmtr --report を実行し、テキスト出力を解析して、ホップごとの Loss %、RTT Last/Avg/Best/Worst/Jitter をライブテーブルで表示、損失の深刻度に応じて色分け;連続モード;CSV + TXT エクスポートcurl + Cloudflare(speed.cloudflare.com)による依存関係のない速度テスト:ダウンロード(25 MB)、アップロード(10 MB)、1.1.1.1 へのping;最大5回の実行結果をJSONに保存;履歴ライングラフ(ダウンロード/アップロード)/etc/nftables.conf と /etc/iptables/*.rules を解析;pkexec nft list ruleset でライブルールセットを取得;列: Table / Chain / Rule / Port / Action / Comment;アクションを色分け;ライブフィルター? バッジを表示;ホバーするとモジュールの説明を示すツールチップを表示;サイドバーとコンテンツ領域の間に垂直セパレーターを追加is_dark()、color_ok()、color_err() を持つ新しい core/theme.py;カスタムペインターウィジェット(_Graph、_MapWidget)は描画時にパレットを読み取ります;ハードコードされていたCatppuccin Mochaの色をすべてセマンティックなQtパレットロールに置き換え255.255.255.0)を表示traceroute / tracepath フォールバック)getent/avahi/nmblookup によるホスト名解決;MACアドレス、ベンダー(IEEE OUI 39Kエントリ)、インターフェース列;CSV/TXTエクスポートを更新初期公開リリース — 13モジュール: Dashboard、Interfaces、Wi-Fi、Subnet Calculator、DNS Lookup、Ping Monitor、IP Scanner、Port Scanner、Nmap、Whois、SNMP、SNTP/NTP、SSH。
Linux — 標準インストールにはほとんどが含まれています:```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** — [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 の組み込みツールであり、インストールは不要です。IP Scanner の OUI ベンダー検索もインストールは不要です。Wireshark のmanufデータベースが初回使用時にバックグラウンドで自動ダウンロードされ、ローカルにキャッシュされます。
pip install pyte または sudo pacman -S python-pyte)pip install tftpy または sudo pacman -S python-tftpy) — ファイル転送モジュール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ディストリビューション、インストール不要)
[最新リリース](https://github.com/thongor77/nmlinux/releases/latest) から `NMLinux-x.y.z-x86_64.AppImage` をダウンロードしてください:```bash
chmod +x NMLinux-*.AppImage
./NMLinux-*.AppImage
No installation required — Python, Qt and all NMLinux modules are bundled in a single file.
Works on any x86_64 Linux with glibc 2.17+ (Ubuntu 16.04+, Fedora 26+, Arch, Mint, etc.).
System network tools (
nmap,whois,mtr…) are not bundled — install them via your package manager for the corresponding modules to work. See Requirements below.
Quickest way — one-liner bootstrap. Works on a completely bare Mac: installs Xcode Command Line Tools, Homebrew, all system tools, then NMLinux itself. Safe to re-run (updates instead of reinstalling):```bash curl -fsSL https://raw.githubusercontent.com/thongor77/nmlinux/main/packaging/bootstrap_macos.sh -o /tmp/bootstrap_macos.sh && bash /tmp/bootstrap_macos.sh
システム全体 (`/Applications`) に、`~/Applications` の代わりにインストール:```bash
curl -fsSL https://raw.githubusercontent.com/thongor77/nmlinux/main/packaging/bootstrap_macos.sh -o /tmp/bootstrap_macos.sh && bash /tmp/bootstrap_macos.sh --system
Apple Developerアカウントや有料の公証は不要です — 内部では同じオープンソースの
install_macos_app.shを使用しており、取得して実行するだけです。スクリプトはシンプルで読みやすいbashです。実行前に/tmp/bootstrap_macos.shを開いて読むか、packaging/bootstrap_macos.shで直接確認できます。ダウンロードしてから実行する方式(
bashに直接パイプするのではなく)は意図的です。新しいMacでは、スクリプトはターミナルから読み取るネストされた対話型ステップ(Xcode Command Line Toolsインストーラー、sudoパスワードを求めるHomebrew自身のインストーラー)をトリガーします。スクリプトをbashに直接パイプすると、これらのネストされたプロンプトがスクリプト自身の入力ストリームと干渉し、途中で停止する可能性があります。ダウンロードしたファイルから実行すれば、その問題を完全に回避できます。
手動インストール — 各ステップを自分で実行したい場合、またはすでにHomebrewがある場合:```bash
brew install nmap mtr curl
git clone https://github.com/thongor77/nmlinux.git cd nmlinux bash packaging/install_macos_app.sh
更新: `git pull && bash packaging/install_macos_app.sh`
アンインストール: `bash packaging/uninstall_macos.sh`
システム全体にインストール (`/Applications`): `bash packaging/install_macos_app.sh --system`
このスクリプトは、以下のPythonパッケージをvenvに自動的にインストールします:
- `PySide6`, `ptyprocess`, `pyte`, `tftpy`
- `pyobjc-framework-Cocoa` — macOSメニューバー、ネイティブダイアログ
- `pyobjc-framework-CoreWLAN` — Wi-Fi SSIDスキャン
- `pyobjc-framework-CoreLocation` — Wi-Fi名を取得するための位置情報サービス権限
**macOS 26 (Tahoe) でのWi-Fi:** 初回起動時に、macOSが位置情報サービスの許可を求めます — Wi-Fiネットワーク名を表示するには許可してください。この許可は、*システム設定 › プライバシーとセキュリティ › 位置情報サービス* に表示されます。
> ほとんどのモジュールはmacOSで変更なしに動作します。RDPは`open rdp://` (Microsoft Remote Desktop) にフォールバックし、VNCは`open vnc://` (標準の画面共有) にフォールバックします。接続マネージャーはmacOSでは機能が制限されます (`nmcli`は利用不可)。
### オプション 6 — Debian / Ubuntu / Linux Mint (インストールスクリプト)
> **Linux Mint / Ubuntuユーザーへの注意:** Python 3.12+ では、システム全体への`pip install`がブロックされています (PEP 668 — `externally-managed-environment`)。提供されているインストールスクリプトを使用してください — 自動的に仮想環境が作成され、`.desktop`エントリがインストールされます。```bash
git clone https://github.com/thongor77/nmlinux.git
cd nmlinux
bash install.sh
スクリプトは次のことを行います:
apt 経由でシステム依存関係をインストールします (libgl1、python3-venv、freerdp、tigervnc…)~/.local/share/nmlinux/venv に仮想環境を作成します~/.local/bin/nmlinux にランチャーを作成します.desktop エントリを追加して、NMLinux がアプリケーションメニューに表示されるようにしますインストール後、ターミナルから nmlinux を実行するか、アプリケーションメニューから起動します。
.whl を 最新リリース からダウンロードしてインストールします:```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
> **Ubuntu 26.04+ 向けの注意:** `pipx` を使用するには、先にシステムライブラリ (libGL など) をインストールしておく必要があります — 上記のコマンドで対応できます。`pipx install` が PySide6 のビルドエラーで失敗する場合は、代わりに **Option 4** (インストールスクリプト) を使用してください。そちらはすべてを自動的に処理します。
### Option 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
.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 はランタイムで `QSvgRenderer` によりレンダリングされる 21 個のバンドル済み [Lucide](https://lucide.dev) SVG アイコンを使用しています。このアプリはもはやシステムのアイコンテーマ(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 — これらは Linux の同等コマンドの代わりに、macOS 標準のコマンド(`ifconfig`、`networksetup`、`scutil`、`pfctl`、`system_profiler`…)を使用します。
**macOS のサポートが限定的または存在しないモジュール:**
| モジュール | 状態 | 備考 |
|--------|--------|-------|
| **RDP** | ✓ macOS | `open rdp://` にフォールバック → Microsoft Remote Desktop(App Store) |
| **VNC** | ✓ macOS | `open vnc://` にフォールバック → 画面共有(内蔵、インストール不要) |
| **IP Scanner** | ✓ macOS | `socket.gethostbyaddr()` を使用 — ネイティブ Python、追加ツール不要 |
| **SMB** | ✓ macOS | `smbclient` の代わりに `smbutil view`(内蔵)を使用 |
| **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)** — このプロジェクトの構築に使用された AI アシスタント、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 のコードは使用も翻訳もされていません。
EPERMscript| モジュール | 説明 |
|---|
| Dashboard | ローカルマシン情報、ゲートウェイ、パブリックIP、地理位置情報、DNSリゾルバー |
| Connection Manager | nmcli によるNetworkManagerプロファイル: 一覧表示、フィルター、接続/切断/編集/削除 |
| Interfaces | インターフェースごとの詳細付きネットワークインターフェーステーブル(ip + nmcli) |
| Wi-Fi | 利用可能なネットワーク、信号バー、セキュリティ、接続中のネットワークを強調表示 |
| Subnet Calculator | CIDRからのネットワーク/ブロードキャスト/ホスト範囲、最大4096エントリのホストテーブル |
| DNS Lookup | dig ベースのルックアップ: A、AAAA、MX、TXT、NS、CNAME、PTR、SOA、ANY |
| Ping Monitor | 複数ホストへの継続的ping、RTT統計、パケットロス% |
| IP Scanner | CIDR/範囲のpingスキャン、50スレッド、ホスト名(DNS/mDNS/NetBIOS)、MACアドレス、ベンダー(OUI)、インターフェース、CSV + TXT エクスポート |
| Port Scanner | TCPコネクトスキャン、200スレッド、サービスプリセット、CSV + TXT エクスポート |
| Nmap | 7つのスキャンモード、XML出力の解析、Host/Port/Protocol/State/Service テーブル、CSV + TXT エクスポート |
| Whois | raw whois出力を等幅で表示 |
| SNMP | snmpwalk/snmpget、v1/v2c、10個のOIDプリセット、結果テーブル |
| SNTP / NTP | 純PythonのRFC 4330 UDPクライアント、オフセット/遅延/階層/参照 |
| 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、SANs、発行者、有効期間 + 期限までのカウントダウン、シリアル、プロトコル、暗号、チェーン;バックグラウンド期限監視とサイドバーのカラードット付き Watchlist |
| SMB / NFS | 任意のサーバーまたはNASからSMB共有(smbclient)とNFSエクスポート(showmount)を一覧表示;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経由のダウンロード/アップロード/ping;curl 以外の外部ツール不要;履歴グラフ(直近5回) |
| Bandwidth | インターフェースごとのリアルタイムスループット: 60秒スライディンググラフ、ライブ速度、セッション合計、ピーク |
| Wake on LAN | 純Pythonのマジックパケット(UDPブロードキャスト)、永続的なホストブック、外部ツール不要 |
| Topology Map | nmap -sn でLANデバイスを自動検出;ドラッグ可能なノード、ズーム/パン、詳細パネルを備えたインタラクティブグラフ |
| 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 | ファイル → ネットワークレポートをエクスポート(JSON/Markdown/Text/PDF);Interfaces、DNS、Firewall、SSH、Connections でのモジュール単位エクスポート |
| Tool | Feature | Linux | macOS |
|---|
xfreerdp / xfreerdp3 | Remote Desktop (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 |