Show GN: HyperDesk - Hyper-V/RDP 세션들을 하나의 창에 임베딩하는 데스크톱 앱

3 hours ago 3

VM 여러 개 띄워놓고 창 전환하다가 지쳐서 만들었습니다.

회사 업무에 적응하던 중 문득 이런 생각이 들었습니다.

유지보수 한 건 들어오면 해당 고객사 서버 원격 데스크탑 (MST),
클라이언트 버전에 맞는 개발환경 (Hyper-V), 특수한 환경을 요구하는 고객사 (VDI/Omnissa) 등등
화면이 너무 난잡한데.. 좋은 방법 없을까?

그래서 팀에 조금이라도 도움 될 수 있을까 하는 생각에 직접 만들어 보았습니다.

  • 동작 방식

HyperDesk는 Hyper-V(VMConnect)와 RDP 세션을 Win32 Window Swallowing으로 앱 안에 임베딩합니다.
미리보기나 탭이 아니라 실제 세션 창을 SetParent로 흡수하는 방식입니다.

  1. 단일 활성 뷰 + 즉시 전환: 활성 세션 하나를 전체 화면으로 보여주고, Alt+1~4(또는 헤더 탭)로 최대 4개 세션을 즉시 전환합니다. 나머지 세션은 백그라운드에 그대로 살아 있어서 전환해도 끊기지 않습니다.
  2. 키보드 라우팅: 활성 세션에 포커스가 있으면 Win 키, Alt+Tab 같은 시스템 단축키가 VM 내부로 전달됩니다.
  3. UI 멈춤 방지: 외부 클라이언트의 인증 모달이 떠도 메인 UI가 멈추지 않도록, AttachThreadInput 대신 독립 메시지 큐를 구성해 데드락을 피했습니다.
  4. Window 추적: 앱 창 리사이즈 등 레이아웃 변경 시 임베딩된 외부 창 위치를 requestAnimationFrame + 백엔드 델타 필터링으로 따라가게 했습니다.

이외에 스냅샷, 원격 자산별 별명/메모, 커맨드 팔레트, RDP, Hyper-V On/Off 같은 편의 기능을 넣었습니다.

  • 스택 / 환경

Tauri v2 + Rust + React 19
Windows 전용
랜딩페이지 : https://landinghyperdesk.netlify.app/ (Y2K)

  • 아직 안 되는 것

VMware/Omnissa Horizon은 클라이언트 실행 코드가 일부 있지만 실사용 검증은 안 됐습니다. 특히 Omnissa는 VM 자체가 아니라 대시보드의 형태라 창을 붙잡기가 까다로워서 임베딩은 비활성 상태입니다.

사이드 프로젝트로 만든 거라 부족한 점이 많습니다. 특히 Window Swallowing 방식 자체의 한계나, 이런 접근이 실무에서 안정적으로 쓰일 수 있을지에 대한 의견이 궁금합니다. 비슷한 고민 해보신 분들 피드백 주시면 적극 수용하겠습니다 !

Read Entire Article