업데이트로 돌아가기
New releaseAug 3, 2026

nmlinux v1.7.11

Linux용 통합 네트워크 툴킷 — Python 3 + PySide6

공유

NMLinux · v1.7.11

Version Python License: GPL-2.0 Platform Languages Donate Bitcoin

Linux 및 macOS를 위한 통합 네트워크 툴킷 — 검사, 연결, 진단.

NMLinux는 29개의 네트워크 모듈을 하나의 창에 통합한 단일 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 위젯 테스트(메뉴, 테이블) 몇 개가 포함되어 있으며, 흥미로운 부분을 mocking으로 대체하지 않습니다.
  • docs/Decisions-Techniques.md — 명확하지 않은 모든 기술적 결정, 기각된 대안, 발견되어 수정된 버그(AI가 유발한 것 포함)와 그 근거가 기록되어 있습니다.
  • docs/Architecture.mddocs/Carte-des-Modules.md — 코드의 실제 구조를 배포되는 내용과 동기화하여 유지합니다.
  • 모든 릴리스 전에 실행되는 i18n 일관성 검사로 8개 지원 언어에서 누락된 번역 키를 찾아냅니다.

이러한 것들은 AI를 신뢰할 수 없기 때문에 존재하는 것이 아닙니다. 손으로 작성한 코드를 포함해, 검증 프로세스 없이 배포되어서는 안 되기 때문에 존재합니다. 결과물과 검증 방식을 평가하세요, 작성에 도움을 준 도구가 아니라.

그래도 버그를 발견했다면? 그것은 부끄러운 일이 아니라 유용한 일입니다 — 이슈를 열어주세요.


커뮤니티

GitHub Discussions가 열려 있습니다 — 피드백을 공유하고, 아이디어를 제보하고, 질문하거나 그냥 인사해 보세요. 저자는 인프라 및 운영 분야에서 30년 이상의 경력을 갖고 있으며, Linux에도 좋고 무료이며 단순한 소프트웨어가 존재해야 한다는 신념으로 이 도구를 만들었습니다.


스크린샷

Linux 스크린샷은 v1.2.7, macOS 스크린샷은 v1.3.5 기준입니다. 이 앱은 현재 29개 모듈과 8개 인터페이스 언어(FR/EN/ES/DE/IT/PT/JA/ZH)를 지원합니다.

Linux (KDE)

DashboardTopology
DashboardTopology
TracerouteWi-Fi
TracerouteWi-Fi

macOS

DashboardTraceroute
macOS DashboardmacOS Traceroute

변경 내역

v1.7.11 — 2026-08-03

  • Flatpak 패키징(KDE Linux): packaging/flatpak/ 아래의 로컬 빌드 매니페스트는 KDE Linux 및 기타 Flatpak 전용 배포판을 대상으로 합니다. nmlinux가 외부 명령으로 호출하는 호스트 CLI 도구(nmcli, pkexec, mount.cifs, ssh, nmap, …)는 각각을 개별적으로 샌드박싱하는 대신 PATHflatpak-spawn --host 셔를 통해 연결됩니다; PySide6는 PyPI 휠 대신 Flathub의 io.qt.PySide.BaseApp에서 가져옵니다. Flathub에는 게시되지 않으며 — packaging/flatpak/build-bundle.sh로 단일 .flatpak 번들을 빌드하여 AppImage와 동일한 방식으로 각 릴리스에 첨부합니다.

v1.7.10 — 2026-08-03

  • SSH 터미널 — 수정: 세션 시작 시 터미널 위젯의 실제 크기가 아직 알려지지 않은 경우 PTY가 잘못된 크기(기본 24×80)로 시작되어 크기 조정 요청이 조용히 유실되는 경쟁 조건(race condition)을 수정했습니다. 이로 인해 원격 전체 화면 앱(예: 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

  • 속도 테스트 — 새로운 LAN(iperf3) 탭: 기존 인터넷 속도 테스트와 함께, 새 탭은 번들된 공용 서버 목록(26개국) 또는 저장된 사용자 지정 서버(예: 내부 조직 서버)를 대상으로 클라이언트 전용 iperf3 테스트를 실행합니다. TCP/UDP, IPv4/IPv6/자동 및 역방향(다운로드) 방향을 지원하며, UDP 테스트에는 지터/손실이 표시됩니다. issue #6에서 제안되었습니다.
  • 새로운 선택적 종속성: iperf3 — LAN 탭을 활성화하려면 설치하세요; 그렇지 않으면 탭에 배너가 표시되고 비활성 상태로 유지됩니다.

v1.7.6 — 2026-07-05

  • 자산 인벤토리 — 오른쪽 클릭 새로고침: 이미 스캔된 행 하나 이상을 오른쪽 클릭하고(다중 선택 지원) "Refresh selected"를 선택하면 전체 네트워크 스캔을 다시 실행하지 않고 해당 호스트만 제자리에서 재스캔합니다.
  • 자산 인벤토리 — SSH 인증 실패 피드백: 거부된 SSH 로그인은 이제 조용히 실패하는 대신 "SSH auth failed"를 표시하며, Nmap으로 감지된 호스트 이름/OS 기준 정보를 잃지 않습니다 — 실제 Synology NAS에서 확인했으며, 다른 구성된 자격 증명 세트가 먼저 시도된 후 DSM의 Auto Block이 올바른 비밀번호를 거부하는 경우였습니다.

v1.7.5 — 2026-07-04

  • 핑 모니터 — 저장된 대상 디렉터리: 새로운 왼쪽 패널에서 핑 대상(이름, 호스트, 간격)을 영구 목록에 저장할 수 있어, 모니터링 중인 호스트를 다시 입력할 필요 없이 앱 재시작 후에도 유지됩니다. 활성 모니터링 중인 각 행의 ★ 버튼은 세션 중 언제든 해당 호스트를 디렉터리에 저장합니다 — 앱이 예기치 않게 종료되기 전에 미리 계획해 둘 필요가 없습니다.
  • 핑 모니터 — "Start monitoring": 저장된 대상을 선택하고 저장된 간격을 재사용하여 한 번의 클릭으로 모니터링을 시작합니다.

v1.7.4 — 2026-07-04

  • 자산 인벤토리 — 비일관적인 스캔 결과 수정: 활성 검사가 재시도 없이 1초 타임아웃 핑 한 번만 보내서, 스캐너 자체의 동시 부하(한 번에 최대 40개 호스트 프로빙) 또는 Wi-Fi 호스트가 비콘 사이에 잠시 절전 상태일 때 실제 장치를 놓칠 수 있었습니다 — 동일 범위를 반복 실행할 때 장치 수가 다르게 나온 실제 서브넷에서 실측 확인했습니다. 이제 검사는 TCP 포트 프로브로 폴백하기 전에 핑을 재시도합니다.
  • 자산 인벤토리 — 새로운 "Refresh empty" 버튼: 스캔 후 전체 범위를 다시 스캔하는 대신 데이터를 반환하지 않은 IP만 재스캔합니다; 새로 발견된 호스트는 기존 결과에 병합됩니다.

v1.7.3 — 2026-07-03

  • SMB — 오른쪽 클릭 메뉴에서 공유 마운트: SMB 탭에서 공유를 오른쪽 클릭하고 Mount/Unmount를 선택하면 일시적인 탐색 뷰가 아닌 터미널과 다른 앱에서 사용할 수 있는 안정적인 로컬 경로(~/mnt/<host>_<share>)에 마운트합니다. 세션 전용(fstab/systemd 영속성 없음)이며, 기존 사용자/비밀번호 필드의 자격 증명을 재사용합니다. Linux는 제한된 권한의 자격 증명 파일(ps로 노출되지 않음)과 함께 pkexec mount -t cifs를 사용합니다; 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 추가: v1.7.0에서 제공된 모듈 간 오른쪽 클릭 시스템에서 SmbNfsPage는 유일하게 누락된 대상 페이지였습니다; 이제 호스트를 오른쪽 클릭하고 SMB를 선택하면 호스트 필드가 미리 채워지고 즉시 스캔이 시작되며, 포트 445가 열린 것으로 감지되면 메뉴에서 굵게 표시됩니다.
  • i18n — 나머지 대시보드 문자열 번역: 게이트웨이 지연 시간 레이블, TLS Watchlist 카드 제목 및 상태 행이 여전히 하드코딩된 프랑스어였습니다; 이제 8개 인터페이스 언어 모두로 번역되었습니다.

v1.7.1 — 2026-07-02

  • macOS 26 (Tahoe) — Wi-Fi SSID 수정: 기본 데이터 소스를 system_profiler(위치 서비스 없이는 <redacted> 반환)에서 CoreWLAN으로 전환했습니다; 앱은 이제 첫 실행 시 위치 서비스 권한을 요청합니다; 권한이 부여되면 Wi-Fi 페이지에 실제 이름의 모든 네트워크가 표시됩니다.
  • macOS — 연결 관리자: 연결된 SSID를 이제 CoreWLAN으로 읽으며, 보안 모드는 system_profiler를 사용합니다.
  • macOS — SMB: NAS가 자격 증명을 요구할 때 명확한 "인증 필요" 메시지 표시; Homebrew smbclient의 불필요한 smb.conf 경고 수정.
  • macOS — 첫 번째 위치 서비스 권한 대화상자 후 종료 시 발생할 수 있는 충돌 수정.

v1.7.0 — 2026-07-02

  • 모든 IP 또는 호스트 이름이 포함된 테이블의 범용 오른쪽 클릭 컨텍스트 메뉴 — 복사-붙여넣기 없이 모듈 간 직접 이동: 발견된 호스트를 오른쪽 클릭하고 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 발견 단계 건너뜀)
  • 대시보드 — 게이트웨이 핑 그래프: 2초마다 업데이트되는 실시간 지연 시간 스파크라인; 색상 코드(<20 ms 녹색 / 20–100 ms 주황색 / >100 ms 빨간색 / 타임아웃 빨간색)
  • 대시보드 — TLS Watchlist 요약: 대시보드의 상태 카드가 재쿼리 없이 TLS Watchlist 상태(OK / 만료 임박 / 경고)를 자동으로 반영합니다.
  • 대시보드 — 지리 지도 크기 조정: 창 크기를 조정하면 세계 지도가 이제 가로로 확장됩니다.

v1.6.4 — 2026-06-28

  • macOS: 메뉴 바가 이제 Python 대신 NMLinux를 표시합니다 — 근본 원인: exec()로 Python에 진입한 후 NSBundle.mainBundle()이 Qt가 QApplication 구성 중에 읽는 Python.framework 번들(CFBundleName = "Python")으로 확인됩니다; 애플리케이션 메뉴가 생성되기 전에 번들의 infoDictionary()를 패치하고 AppKit을 통해 네이티브 메뉴 항목 이름을 변경하여 수정했습니다.

v1.6.3 — 2026-06-28

  • macOS: pyobjc-framework-Cocoa를 통한 NSProcessInfo.setProcessName_을 사용한 메뉴 바 수정의 첫 시도(v1.6.4로 대체됨)

v1.6.2 — 2026-06-28

  • macOS: install_macos_app.sh에서 bash 런처 스크립트를 컴파일된 C 스텁으로 교체하여 macOS가 .app 번들을 실행 중인 프로세스와 올바르게 연결하도록 했습니다; 폴백으로 setprognamesys.argv[0] 오버라이드를 추가했습니다.

v1.6.1 — 2026-06-25

  • SSH 터미널 — 원격 에코 수정: 내장 SSH 터미널에서 입력한 키 입력이 원격 셸로 전송되었지만 다시 에코되지 않았습니다(로그인 후 키보드가 "죽은" 것처럼 보임). nmlinux가 로컬 PTY 에코를 강제로 끄도록 했고, ssh가 해당 터미널 모드(pty-req)를 통해 "에코 없음"을 원격 pty로 전파하여 원격 셸이 입력 에코를 중단했습니다. 새 Ubuntu 26.04 VM에서 재현했습니다(최신 OpenSSH는 이러한 모드를 충실히 적용합니다). 이제 터미널은 PTY를 일반 모드로 유지하고 ssh가 에코를 관리하도록 하여 실제 터미널 에뮬레이터와 일치합니다.

v1.6.0 — 2026-06-24

  • 자산 인벤토리 — WinRM Windows(완전): Windows 방화벽이 ICMP를 차단할 때 TCP 포트 프로브로 호스트 감지; PowerShell은 이제 cmd.exe가 파이프 |를 해석하지 못하도록 전체 절대 경로 + **EncodedCommand(base64)**를 사용합니다; 관리자 권한 없이 전체 폴백 체인: OS는 ver, CPU는 레지스트리, RAM은 systeminfo, 디스크는 wmicfsutil(로케일 인식 EN 쉼표 / FR 공백) → dir /-C
  • 자산 인벤토리 — 다중 자격 증명 SSH: 여러 SSH 자격 증명 세트 지원; macOS 디스크 수정(/System/Volumes/Data), Apple Silicon CPU 폴백(hw.model), Synology(/volume1), Unraid(/mnt/user)
  • 버그 수정: WinRM 오류가 이제 조용한 폴백 대신 테이블에 표시됩니다; WinRM/SNMP 호스트 감지가 더 이상 SSH 자격 증명 존재로 차단되지 않습니다; pywinrm 타임아웃 수정.

v1.5.3 — 2026-06-24

  • macOS .app — Homebrew 도구 감지: Homebrew로 설치된 sshpass, nmap, snmpget을 이제 절대 경로로 찾아 호출합니다; macOS의 .app 번들은 Homebrew PATH(/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

  • 자산 인벤토리 — 새 모듈(29번째); CIDR 범위를 스캔하고 SSH, WinRM, SNMP 또는 Nmap을 통해 각 호스트에서 OS, CPU, RAM, 디스크 및 업타임을 수집합니다; 프로토콜별 다중 자격 증명 세트 지원(각각 순서대로 시도); 무보존 정책: 자격 증명을 디스크에 절대 기록하지 않으며 스캔 후 메모리에서 제거됩니다; 결과를 JSON, CSV 또는 Markdown으로 내보내기; 대시보드 IP Geolocation 섹션에 애니메이션 지리 지도 추가.
  • SSH 수집 수정: 디스크 명령의 awk 따옴표 오류 수정; free -h를 BusyBox 호환 free로 대체; macOS 코드 경로는 이제 OS 이름에 sw_vers, Apple Silicon CPU에 hw.model 폴백, APFS 사용자 데이터 볼륨에 /System/Volumes/Data를 사용합니다; Synology/Unraid 볼륨(/volume1, /mnt/user)을 루트보다 먼저 감지; df | tail -1 || …의 오탐 패턴을 test -d 가드로 수정; lsb_release 출력에서 주변 따옴표 제거; 다중 SSH/WinRM 자격 증명 세트 지원(호스트별로 각각 순서대로 시도).

v1.5.0 — 2026-06-17

  • 파일 전송 서버 — 앱에서 직접 경량 TFTP 또는 HTTP 서버를 시작/중지하는 새 모듈; 대표적인 사용 사례: 라우터, 스위치 또는 프린터 구성 백업 및 복원; 한 번에 하나의 서버만 활성화(TFTP 또는 HTTP), 포트와 루트 디렉터리 구성 가능, 로컬 IP가 클립보드 복사 버튼으로 표시됩니다; HTTP는 디렉터리 목록(LAN의 모든 브라우저에서 탐색), GET(다운로드) 및 POST/PUT(업로드)을 포함합니다; TFTP는 GET 및 PUT(양방향)을 지원하며, 포트 69는 root 권한이 필요 — 권한 오류 시 앱에 "Start as root (pkexec)" 버튼이 표시됩니다; 실시간 전송 로그 테이블(타임스탬프, 파일 이름, 클라이언트 IP, 방향 ↑/↓, 크기); 포트 순회 보호; 8개 인터페이스 언어; 새 종속성: tftpy.

v1.4.3 — 2026-06-14

  • TLS Watchlist 수정: 자체 서명 및 신뢰할 수 없는 인증서가 이제 녹색 대신 "⚠ Invalid / untrusted cert"(주황색)로 올바르게 표시됩니다; SSL 예외 처리를 모든 ssl.SSLError 하위 클래스를 포괄하도록 확장; 항목은 이제 백그라운드 검사 중 "… (checking)"을 표시하고 호스트에 연결할 수 없으면 "— (unreachable)"을 표시합니다.

v1.4.2 — 2026-06-14

  • TLS Watchlist — 인증서 만료를 모니터링할 호스트 이름의 영구 목록; + Watch(현재 호스트/포트 사용) 또는 패널에서 수동으로 호스트 추가; 백그라운드 검사는 실행 2초 후 자동으로 수행됩니다; 사이드바의 "TLS Inspector" 항목에 색상 점이 표시됩니다: 인증서가 만료되면 빨간색, 30일 이내에 만료되면 주황색; 패널의 재검사 버튼; 목록은 항목별 상태(✓ / ⚠ / EXPIRED)를 색상 코드로 표시합니다.

v1.4.1 — 2026-06-14

  • macOS — IP 스캐너: macOS에서 MAC 주소, 벤더 및 인터페이스 조회 수정; _arp_entry()는 이제 Linux 전용인 /proc/net/arp를 읽는 대신 macOS에서 arp -n <ip>를 호출하고 출력 형식(? (IP) at AA:BB:CC on en0)을 파싱합니다; 네 개의 스캐너 열이 모두 macOS에서 올바르게 채워집니다.
  • VNC 도움말: Linux에는 기본 VNC 서버가 없으며 설치할 수 있는 일반적인 옵션(x11vnc, tigervnc-server, wayvnc)을 설명하는 메모를 8개 언어 모두에 추가했습니다.

v1.4.0 — 2026-06-14

  • macOS — IP 스캐너: 크로스 플랫폼 역방향 DNS 해석을 위해 Linux 전용 getent를 Python의 socket.gethostbyaddr()로 대체; 호스트 이름 조회가 이제 추가 도구 없이 macOS에서 기본적으로 작동합니다.
  • macOS — SMB 브라우저: smbclient(Homebrew samba 필요)에서 smbutil view(macOS 내장 도구)로 전환; SMB 공유 목록이 이제 설치 없이 macOS에서 작동합니다.
  • macOS — NFS 브라우저: showmount는 macOS에 내장되어 있지만 --no-headers를 지원하지 않습니다; macOS에서는 플래그를 제거하고 파서에서 헤더 행을 건너뜁니다; NFS 내보내기 목록이 이제 기본적으로 작동합니다.
  • macOS — RDP: xfreerdp를 찾을 수 없으면 open rdp:// URL 스킴으로 폴백합니다; 설치된 경우 Microsoft Remote Desktop(App Store)을 호스트, 포트, 사용자 이름 및 도메인이 미리 채워진 상태로 엽니다.
  • macOS — VNC: vncviewer를 찾을 수 없으면 open vnc:// URL 스킴으로 폴백합니다; macOS 화면 공유(내장, 설치 불필요)를 엽니다.

v1.3.9 — 2026-06-13

  • SSH 에이전트 포워딩 — SSH 연결 양식에 새로운 "Agent forwarding" 체크박스; ssh 명령에 -A를 추가합니다; 개인 키를 복사하지 않고 서버 간 점프(PC → 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

  • Topology — 장치 아이콘 — 이제 각 노드는 일반적인 원 대신 장치 유형에 해당하는 Lucide SVG 아이콘(라우터/와이파이, 컴퓨터/노트북, 프린터, NAS/서버, 스마트폰, 네트워크 스위치, 라즈베리 파이)을 표시합니다. 번들에 새로 포함된 SVG 아이콘 5개(printer, server, smartphone, cpu, laptop)가 추가되었습니다.
  • Topology — mDNS 감지avahi-browse로 장치 유형을 감지합니다(선택 사항, nmap 스캔과 병렬 실행). 프린터(_ipp._tcp, PDL Printer), Android 휴대폰 및 TV(_googlecast._tcp, _androidtvremote2._tcp), Apple Mac(AirPlay TXT의 am=Mac16,x 모델), NAS 장치(Synology가 model=Xserve 보고), KDE Connect 데스크톱을 식별합니다. avahi를 사용할 수 없으면 MAC 벤더 OUI 및 호스트명 휴리스틱으로 대체합니다.
  • Topology — 상세 패널 — 일반 "Host" 라벨 대신 감지된 장치 클래스(Printer, Smartphone, NAS…)를 표시합니다. 8개 언어 모두 i18n 지원.
  • Traceroute — 자동 확대/축소 — 세계 지도는 각 경로가 끝나면 지리적 위치가 확인된 홉의 경계 상자에 자동으로 확대 및 중앙 정렬합니다. 사용자가 수동으로 이동하거나 확대/축소하면 비활성화되고, 다음 traceroute에서 복원됩니다. 마우스 오른쪽 버튼 클릭 시 전체 세계 지도 보기로 재설정됩니다.

v1.3.5 — 2026-06-06

  • macOS 호환성 — 이제 9개 네트워크 모듈이 Linux 동작을 깨뜨리지 않고 macOS에서 실행됩니다. 각 모듈은 시작 시 플랫폼을 감지(_IS_MACOS)하고 기본 macOS 명령으로 분기합니다: route -n get default, ifconfig, scutil --dns, networksetup, system_profiler SPAirPortDataType, pfctl, netstat -ib. 권한 상승은 pkexec 대신 osascript + with administrator privileges를 사용하며, 고정 폭 글꼴은 Monospace 대신 Menlo를 사용합니다.
  • 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, 日本語(일본어), 中文(중국어 간체) 추가. 전체 UI(27개 모듈 전체, 약 720개 번역 키)가 이제 FR / EN / ES / DE / IT / PT / JA / ZH로 제공됩니다. 설정에서 언어를 변경한 후 다시 시작하라는 메시지가 표시됩니다.
  • 8개 언어 상황별 도움말? 배지 패널(설명, 사용 예시 및 해당 CLI 명령)이 이제 모든 모듈에서 8개 언어를 지원합니다. 이전에는 JA와 ZH가 영어로 대체되었습니다.
  • 버그 수정 — SMB/NFS 및 Hosts File의 내비게이션 툴팁이 선택한 언어와 관계없이 프랑스어로 표시되던 문제를 수정했습니다. 누락된 nav_hint_smb_nfsnav_hint_hosts 키를 7개 비프랑스어 언어 블록에 추가했습니다.

v1.3.1 — 2026-06-05

  • SSH Key Manager~/.ssh/의 모든 키 페어 나열(파일, 유형, 비트, 주석, SHA256 지문). 선택적 암호문구로 Ed25519 또는 RSA 4096 키 생성(불일치 감지, 유형별 자동 파일 이름). 공개 키를 클립보드에 복사. 비밀번호 프롬프트에 대한 stdin 입력을 지원하는 인라인 터미널에서 ssh-copy-id를 통해 원격 서버에 배포. 확인 후 키 페어 삭제. ~/.ssh/가 없으면 자동 생성. i18n: fr / en / es / de

v1.3.0 — 2026-06-03

  • TLS / SSL Inspector — 모든 서버의 인증서를 검사합니다: 주체 CN, SAN, 발급자, 유효 기간(색상 코드: 녹색 / 주황색 < 30일 / 빨간색 만료), 일련 번호, TLS 프로토콜, 암호화 스위트 및 인증서 체인(openssl s_client 이용). 유효, 만료 및 자체 서명 인증서 모두에서 작동합니다. 연결할 수 없는 호스트에 대해 친숙한 오류 메시지를 표시합니다.
  • SMB / NFS Browser — 모든 서버에서 공유 및 내보내기 목록 표시. SMB 탭: 선택적 자격 증명이 포함된 smbclient -L, 공유 이름 / 유형 / 설명 표시. NFS 탭: showmount -e, 내보내기 경로 및 액세스 목록 표시. 배포판별 설치 지침과 함께 누락된 도구를 감지합니다.
  • Hosts File Editor/etc/hosts 보기 및 편집. 활성화/비활성화 토글이 있는 테이블, 대화상자를 통한 항목 추가/편집/삭제. IP 또는 호스트명으로 필터링. pkexec cp로 저장(polkit 인증 대화상자).
  • install.sh — Debian / Ubuntu / Linux Mint용 새 스크립트: ~/.local/share/nmlinux/venv에 venv 생성, apt로 시스템 종속성 설치, 런처 및 .desktop 항목 생성(PEP 668 externally-managed-environment 오류 수정).

v1.2.9 — 2026-05-30

  • VNC — VNC 연결 프로필을 관리하는 새 모듈. SSH 및 RDP와 같은 그룹/하위 그룹 지원. vncviewer(TigerVNC) 실행. macOS ARD와 호환(DH30 인증은 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를 외부 프로세스로 실행. 연결 시 비밀번호를 묻고 저장하지 않음. 필드: host, port, username, domain, resolution, fullscreen. 배포판별 설치 지침(Arch / Debian / Fedora)과 함께 xfreerdp 누락을 감지합니다.

v1.2.7 — 2026-05-26

  • Lucide 아이콘 번들Lucide(MIT)의 SVG 아이콘 21개가 이제 assets/icons/에 번들로 포함됩니다. 런타임에 QSvgRenderer로 렌더링되며 #60a5fa 색상으로 표시됩니다. 앱은 더 이상 시스템 아이콘 테마(Breeze, Adwaita, Papirus…)를 요구하지 않습니다.

v1.2.6 — 2026-05-24

  • GNOME/Adwaita 호환성 — 비 KDE 데스크톱에서 아이콘 수정: main.py는 이제 gsettings를 통해 GTK 아이콘 테마를 자동 감지하여 Qt에 적용합니다. Wi-Fi, Traceroute, Speed Test, Interfaces, Port Scanner, Firewall, MTR에 대한 대체 체인 확장. themed_icon()은 이제 테마 아이콘을 수락하기 전에 실제 pixmap이 존재하는지 검증합니다.
  • NixOS/KDE 호환성 — NixOS의 모든 아이콘 수정: Breeze 6.x는 SVGZ 전용 아이콘을 제공합니다. Nix 래퍼는 이제 QT_PLUGIN_PATHqt6.qtsvg를 추가하여 Qt가 SVG 아이콘을 렌더링할 수 있게 합니다. themed_icon()은 크기 22/24/16/32/48을 시도합니다(Breeze는 24가 아닌 22px 사용). Nix 번들 아이콘 세트가 감지되면 테마를 breeze로 강제합니다. 또한 시스템 전체 KDE 구성을 위해 /etc/xdg/kdeglobals를 확인합니다.

v1.2.5 — 2026-05-23

  • MTR — 내장 My Traceroute: mtr --report 실행, 텍스트 출력 파싱, 홉별 손실률 %, RTT Last/Avg/Best/Worst/Jitter를 표시하는 실시간 테이블 제공, 손실 심각도에 따라 색상 코드 표시. 연속 모드; CSV + TXT 내보내기.
  • Speed Testcurl + Cloudflare(speed.cloudflare.com)를 통한 종속성 없는 속도 테스트: 다운로드(25MB), 업로드(10MB), 1.1.1.1 핑. 최대 5회 실행이 JSON으로 저장됩니다. 기록 선 그래프(다운로드/업로드).
  • Firewall Viewer — 읽기 전용 규칙 집합 뷰어: 루트 없이 /etc/nftables.conf/etc/iptables/*.rules 파싱. pkexec nft list ruleset을 통한 실시간 규칙 집합. 열: Table / Chain / Rule / Port / Action / Comment. 색상 코드 동작, 실시간 필터.
  • 사이드바 힌트 — 이제 각 내비게이션 항목에 은은한 ? 배지가 표시됩니다. 마우스를 올리면 모듈이 수행하는 작업을 설명하는 툴팁이 표시됩니다. 사이드바와 콘텐츠 영역 사이에 세로 구분선이 추가되었습니다.
  • i18n — 모든 새 모듈이 프랑스어, 영어, 스페인어로 번역되었습니다.

v1.2.0 — 2026-05-22

  • 테마 적응 — 모든 페이지에서 전체 런타임 라이트/다크 전환 지원. is_dark(), color_ok(), color_err()가 포함된 새 core/theme.py. 사용자 정의 페인터 위젯(_Graph, _MapWidget)이 페인트 시 팔레트를 읽습니다. 하드코딩된 모든 Catppuccin Mocha 색상이 의미론적 Qt 팔레트 역할로 대체되었습니다.
  • 서브넷 마스크 — Dashboard, Interfaces 및 Connexions 페이지에서 이제 CIDR 접두사에서 파생된 점으로 구분된 십진수 서브넷 마스크(예: 255.255.255.0)를 표시합니다.
  • Bandwidth Monitor — 페이지 로드 시 신뢰할 수 없는 자동 시작을 명시적인 시작/중지 버튼으로 대체.
  • CSV/TXT 내보내기 — Nmap 및 Traceroute 페이지에서 이제 스캔/추적 완료 후 나타나는 CSV 내보내기 및 TXT 내보내기 버튼을 제공합니다.
  • i18n — 위 모든 기능에 대한 새 번역 키(fr/en/es/de).

v1.1.1 — 2026-05-16

  • SSH 터미널pyte(VT100/xterm 에뮬레이터) + QPainter 렌더러로 완전히 재작성. 2000줄 스크롤백, 커서 깜빡임, 256색 지원.
  • Visual Traceroute — 세계 지도(Natural Earth 110m), 홉별 실시간 지리적 위치(ip-api.com), 대화형 확대/축소 및 이동, 이중 파서(traceroute / tracepath 대체).
  • Bandwidth Monitor — 인터페이스별 실시간 처리량, 60초 슬라이딩 그래프, 실시간 속도, 세션 합계 및 최고값.
  • Wake on LAN — 순수 Python 매직 패킷(UDP 브로드캐스트), 영구 호스트 목록(JSON).
  • IP Scannergetent/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 Managernmcli를 통한 NetworkManager 프로필: 목록, 필터, 연결/연결 해제/편집/삭제
Interfaces인터페이스별 세부 정보가 포함된 네트워크 인터페이스 테이블(ip + nmcli)
Wi-Fi사용 가능한 네트워크, 신호 강도, 보안, 연결된 네트워크 강조
Subnet CalculatorCIDR의 네트워크/브로드캐스트/호스트 범위, 최대 4096개 항목의 호스트 테이블
DNS LookupA, AAAA, MX, TXT, NS, CNAME, PTR, SOA, ANY 레코드에 대한 dig 기반 조회
Ping Monitor여러 호스트에 대한 지속적인 ping, RTT 통계, 패킷 손실 %
IP ScannerCIDR/범위 ping 스캔, 50개 스레드, 호스트명(DNS/mDNS/NetBIOS), MAC 주소, 벤더(OUI), 인터페이스, CSV + TXT 내보내기
Port ScannerTCP 연결 스캔, 200개 스레드, 서비스 사전 설정, CSV + TXT 내보내기
Nmap7가지 스캔 모드, XML 출력 파싱, Host/Port/Protocol/State/Service 테이블, CSV + TXT 내보내기
Whois고정 폭 글꼴의 원시 whois 출력
SNMPsnmpwalk/snmpget, v1/v2c, 10개 OID 사전 설정, 결과 테이블
SNTP / NTP순수 Python RFC 4330 UDP 클라이언트, 오프셋/지연/계층/참조
SSH내장 PTY 터미널(pyte/VT100), 저장된 연결(JSON), 키 인증, 스크롤백
Remote DesktopRDP 연결 프로필(그룹/하위 그룹); xfreerdp 실행; 비밀번호는 저장되지 않음
VNCVNC 연결 프로필(그룹/하위 그룹); vncviewer(TigerVNC) 실행; macOS ARD 호환; 비밀번호는 저장되지 않음
SSH Key Manager~/.ssh/ 키 페어 목록(유형, 비트, 지문); Ed25519/RSA 4096 생성; 공개 키 복사; ssh-copy-id로 서버에 배포; 확인 후 페어 삭제
TLS Inspector인증서 세부 정보: CN, SAN, 발급자, 유효 기간 + 만료 카운트다운, 일련 번호, 프로토콜, 암호화, 체인; 백그라운드 만료 모니터 및 사이드바 색상 점이 있는 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 규칙 집합(루트 불필요); pkexec로 실시간; 테이블/체인/동작별 필터
Speed TestCloudflare를 통한 다운로드/업로드/ping; curl 외 외부 도구 불필요; 기록 그래프(최근 5회 실행)
Bandwidth인터페이스별 실시간 처리량: 60초 슬라이딩 그래프, 실시간 속도, 세션 합계, 최고값
Wake on LAN순수 Python 매직 패킷(UDP 브로드캐스트), 영구 호스트 목록, 외부 도구 불필요
Topology Mapnmap -sn으로 LAN 장치 자동 검색; 드래그 가능한 노드가 있는 대화형 그래프, 확대/축소 및 이동, 상세 패널
Settings언어 선택(FR / EN / ES / DE / IT / PT / JA / ZH), 영구 저장; 변경 후 다시 시작 필요
Command PaletteCtrl+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에서 모듈별 내보내기

요구 사항

시스템 도구

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를 기본으로 제공합니다. networksetupscutil은 macOS 내장 도구이므로 설치가 필요 없습니다. IP 스캐너의 OUI 제조업체 조회도 설치가 필요 없습니다 — Wireshark manuf 데이터베이스가 첫 사용 시 백그라운드에서 자동으로 다운로드되어 로컬에 캐시됩니다.

선택 도구

도구기능LinuxmacOS
xfreerdp / xfreerdp3원격 데스크톱 (RDP)Arch: freerdp · Ubuntu ≤24.04: freerdp2-x11 · Ubuntu 26.04+: freerdp3-x11선택 사항 — Microsoft Remote Desktop으로 대체됨 (open rdp://)
vncviewerVNCArch: tigervnc · Debian: tigervnc-viewer선택 사항 — macOS 화면 공유로 대체됨 (open vnc://, 내장)
nm-connection-editor연결 관리자에서 연결 편집Arch: nm-connection-editor— (대신 시스템 환경설정이 열림)
tracerouteTraceroute 대안 (기본적으로 tracepath 사용)Arch: traceroute내장
mount.cifs (cifs-utils)오른쪽 클릭 메뉴에서 SMB 공유 마운트Arch/Debian: cifs-utils내장 (mount_smbfs)
iperf3속도 테스트 — LAN 탭Arch: iperf3 · Debian/Ubuntu: iperf3brew install iperf3

Python

  • Python 3.11+
  • PySide6 6.6+
  • ptyprocess 0.7+
  • pyte 0.8+ (pip install pyte or sudo pacman -S python-pyte)
  • tftpy 0.8+ (pip install tftpy or 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 배포판, 설치 불필요)

[최신 릴리스](https://github.com/thongor77/nmlinux/releases/latest)에서 `NMLinux-x.y.z-x86_64.AppImage`를 다운로드하세요:```bash
chmod +x NMLinux-*.AppImage
./NMLinux-*.AppImage

설치 불필요 — Python, Qt 및 모든 NMLinux 모듈이 단일 파일에 번들로 포함되어 있습니다.
glibc 2.17+가 있는 모든 x86_64 Linux에서 작동합니다 (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 Developer 계정이나 유료 공증(notarization)이 필요 없습니다 — 내부적으로는 동일한 오픈소스 install_macos_app.sh를 가져와서 실행할 뿐입니다. 스크립트는 단순하고 읽을 수 있는 bash입니다. 실행 전에 /tmp/bootstrap_macos.sh를 열어 읽어 보거나, 여기에서 직접 확인할 수 있습니다: packaging/bootstrap_macos.sh.

다운로드 후 실행(bash로 직접 파이프하는 대신)은 의도적인 방식입니다. 새 Mac에서 스크립트는 중첩된 대화형 단계(Xcode Command Line Tools 설치 프로그램, 사용자의 sudo 암호를 묻는 Homebrew 설치 프로그램)를 트리거하며, 이 단계들은 터미널에서 입력을 읽습니다. 스크립트를 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` — 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에 가상 환경을 생성합니다
  • venv 내부에 NMLinux 및 해당 Python 종속성을 설치합니다
  • ~/.local/bin/nmlinux에 실행기를 생성합니다
  • .desktop 항목을 추가하여 NMLinux가 애플리케이션 메뉴에 표시되도록 합니다

설치 후 터미널에서 nmlinux를 실행하거나 애플리케이션 메뉴에서 시작하십시오.

옵션 7 — Wheel (모든 배포판 / macOS)

최신 릴리스에서 .whl을 다운로드하여 설치합니다:```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

Option 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는 런타임에 `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 socket)는 `sudo`로 실행해야 합니다. macOS에서는 권한 상승에 `osascript` + `administrator privileges`를 사용합니다
- 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&currency_code=EUR)
- **Bitcoin** — `bc1qspe0tky7552qas72wgn8w9dswr0dxlv24w39t6ztjqk3nz6kc5tqv753a4`

---

## 라이선스

GPL-2.0 — [LICENSE](https://github.com/thongor77/nmlinux/blob/HEAD/LICENSE)를 참조하세요.

이 프로젝트는 독립적인 재구현입니다. NETworkManager의 코드는 사용되거나 번역되지 않았습니다.

카테고리