
nmlinux v1.7.9
Linux向け統合ネットワークツールキット — Python 3 + PySide6
NMLinux · v1.7.12
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 が何か間違えたときに、それを誰が検出するのか?
私の言葉を信じるより確認したい場合のために、その答えは次のとおりです。
- 162 のテスト —
pytest tests/ -v。純粋なロジックに加え、実際の Qt ウィジェットテスト(メニュー、テーブル)も少し含まれ、興味深い部分をモックでごまかすことはありません。 docs/Decisions-Techniques.md— 明白でない技術的判断、却下された代替案、そして見つかって修正されたバグ(AI によって持ち込まれたものを含む)の理由がすべて文書化されています。docs/Architecture.mdとdocs/Carte-des-Modules.md— 実際のコード構造であり、出荷されるものと同期が保たれています。- i18n 整合性チェック — すべてのリリース前に実行され、8 つのサポート言語間で欠落した翻訳キーを検出します。
これらは 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
| ダッシュボード | トレースルート |
|---|---|
![]() | ![]() |
変更履歴
v1.7.12 — 2026-08-12
- トレースルート — 修正: Flatpak 環境(v1.7.11、後述 — 現在は削除済み)では、ホストに実際の
tracerouteバイナリがインストールされていなくても、tracerouteが常にホスト側のシム経由でPATHから解決されていました。そのためワーカーはtracepathにフォールバックせず、トレースはホップなし・エラー表示なしで即座に終了していました。現在は、tracerouteが解析可能な出力をまったく生成しなかった場合、失敗の理由にかかわらずtracepathにフォールバックするようになりました。 - SSH ターミナル — askpass 修正:
DISPLAY/WAYLAND_DISPLAYが設定されている場合(任意の GUI セッション)で、ssh がクリーンな tty を持たないとき、パスワードプロンプトに埋め込みターミナルではなく$SSH_ASKPASSを使用しようとすることがあり、askpass ヘルパーがインストールされていないと認証が静かに失敗していました。現在はSSH_ASKPASS_REQUIRE=neverにより、パスワードプロンプトが常にターミナル自体を経由するよう強制されます。 - Flatpak パッケージングを削除: v1.7.11 で同梱されたローカル KDE Linux マニフェストは廃止されました。上記の SSH パスワードプロンプトのバグを調査したところ、カーネルレベルの制限が判明しました。
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 専用ディストリビューションを対象としています。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 で廃止 — 上記参照。
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 ページでは、各接続が単一の共有セッションではなく、それぞれ独自のタブで開かれるようになりました。保存済み接続への再接続(同じ接続を 2 回でも)を行うと、以前はアクティブなセッションが強制終了され、正常な代替セッションが開かれませんでした。現在は、接続アクションのたびに新しい独立したタブが開かれます。
v1.7.8 — 2026-07-14
- スピードテスト — 新しい LAN(iperf3)タブ: 既存のインターネット速度テストに加えて、新しいタブでは、同梱のパブリックサーバーリスト(26 か国)または保存済みのカスタムサーバー(例: 社内組織サーバー)に対してクライアント専用の
iperf3テストを実行します。TCP/UDP、IPv4/IPv6/自動、および逆方向(ダウンロード)をサポートし、UDP テストではジッター/損失が表示されます。issue #6 により提案されました。 - 新しいオプション依存関係:
iperf3— LAN タブを有効にするにはインストールしてください。タブはバナーを表示し、それ以外の場合は無効のままです。
v1.7.6 — 2026-07-05
- アセットインベントリ — 右クリック更新: スキャン済みの 1 つ以上の行を右クリック(複数選択対応)して「選択項目を更新」を選択すると、ネットワーク全体の再スキャンを実行する代わりに、それらのホストだけをその場で再スキャンします。
- アセットインベントリ — SSH 認証失敗のフィードバック: 拒否された SSH ログインは、Nmap が検出したホスト名/OS ベースラインを失うことなく、静かに失敗する代わりに「SSH 認証に失敗しました」と表示されるようになりました。実際の Synology NAS で確認済みです。DSM の Auto Block が、他の設定済み資格情報セットが最初に試行された後、正しいパスワードを拒否しました。
v1.7.5 — 2026-07-04
- Ping モニター — 保存済みターゲットディレクトリ: 新しい左側パネルで、ping ターゲット(名前、ホスト、間隔)を永続的なリストに保存できます。アプリを再起動しても監視中のホストが維持され、再入力する必要がありません。監視中の各行の ★ ボタンを押すと、セッション中の任意のタイミングでそのホストをディレクトリに保存できます — アプリが予期せず終了する前に事前に計画しておく必要はありません。
- Ping モニター — 「監視を開始」: 保存済みターゲットを選択し、保存されている間隔を再利用して 1 クリックで監視を開始します。
v1.7.4 — 2026-07-04
- アセットインベントリ — スキャン結果の不一致を修正: 生存確認チェックは、再試行なしの 1 秒タイムアウトの ping を 1 回送信していたため、スキャナー自身の同時負荷(最大 40 ホストを同時にプローブ)や、Wi-Fi ホストがビーコン間で一時的にスリープしている場合に、実際のデバイスを見逃す可能性がありました。同じ範囲を繰り返し実行した際にデバイス数が異なる実際のサブネットで確認済みです。現在は、TCP ポートプローブにフォールバックする前に ping を再試行します。
- アセットインベントリ — 新しい「空欄を更新」ボタン: スキャン後、範囲全体を再スキャンする代わりに、データが返されなかった IP のみを再スキャンします。新しく見つかったホストは既存の結果にマージされます。





