# Moonshine - PC 게임을 Moonlight가 실행되는 모든 기기로 스트리밍

> Clean Markdown view of GeekNews topic #31660. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=31660](https://news.hada.io/topic?id=31660)
- GeekNews Markdown: [https://news.hada.io/topic/31660.md](https://news.hada.io/topic/31660.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2026-07-21T22:33:31+09:00
- Updated: 2026-07-21T22:33:31+09:00
- Original source: [github.com/hgaiser](https://github.com/hgaiser/moonshine)
- Points: 1
- Comments: 1

## Topic Body

- **Moonshine**은 PC 게임 화면을 Moonlight 클라이언트로 전송하고 키보드·마우스·컨트롤러 입력을 호스트로 돌려보내 원격 플레이를 지원하는 Linux 호스트임
- 스트림마다 별도의 **Wayland 컴포지터**를 사용해 데스크톱과 격리하며, 스트리밍 중에도 호스트 PC를 계속 사용하고 모니터 없는 서버에서도 실행할 수 있음
- GPU를 통한 H.264·H.265·AV1 인코딩, 10비트 HDR, 모션·터치패드·햅틱을 포함한 입력, Opus 기반 저지연 5.1·7.1채널 오디오를 지원함
- Linux와 systemd, Vulkan 비디오 인코딩이 가능한 NVIDIA RTX·AMD RDNA2+·Intel Arc GPU, **Moonlight v6.0.0 이상**이 필요함
- GameStream 프로토콜 트래픽은 애플리케이션 계층에서 완전히 암호화되지 않으므로 포트를 인터넷에 직접 노출하면 안 되며, 외부 접속에는 Tailscale·WireGuard·ZeroTier 같은 **VPN**이 필요함

---

### 격리된 게임 스트리밍
- 각 애플리케이션은 호스트 데스크톱과 분리된 자체 **스트리밍 세션**에서 실행됨
  - 스트리밍 중에도 호스트 PC를 다른 작업에 사용할 수 있음
  - 활성 데스크톱 세션이나 모니터, HDMI 더미 플러그 없이 헤드리스 서버에서 동작함
- GPU의 Vulkan 비디오 인코딩으로 **H.264·H.265·AV1**을 처리함
- 지원 게임에서는 실제 **10비트 HDR** 스트리밍을 제공함
- 마우스, 키보드, 게임패드를 지원하며 게임패드의 모션·터치패드·햅틱 입력도 처리함
- 오디오는 저지연 Opus 인코딩을 사용하며 스테레오와 **5.1·7.1 서라운드**를 지원함

### 실행 요구사항
- 현재 **Linux 전용**이며 Arch Linux에서 테스트됐고 다른 Linux 배포판에서도 동작 사례가 있음
- 애플리케이션 프로세스 실행과 관리에 **systemd**가 필요함
- Vulkan 비디오 인코딩을 지원하는 NVIDIA RTX, AMD RDNA2 이상 또는 Intel Arc GPU가 필요함
- 클라이언트는 **Moonlight v6.0.0 이상**이어야 하며 이전 버전이나 비공식 포트의 호환성은 보장하지 않음

### 설치와 실행
- Arch Linux에서는 AUR을 통해 `yay -S moonshine`으로 설치할 수 있음
- 사용자 로그아웃 상태에서도 애플리케이션을 실행하려면 `sudo loginctl enable-linger $USER`를 사용함
  - 스트리밍할 때 사용자가 항상 로그인돼 있다면 이 단계는 생략 가능함
- `sudo systemctl enable --now moonshine@$USER`로 부팅 시 서비스를 시작하고 즉시 실행함
- 소스 빌드에는 clang, CMake, Rust, Wayland, Vulkan 헤더, shaderc, Mesa, Opus, PulseAudio 관련 라이브러리 등이 필요함
- 빌드 후 `cargo run --release -- /path/to/config.toml`로 실행함

### 설정과 클라이언트 연결
- 지정한 경로에 파일이 없으면 **설정 파일**을 자동 생성함
  - AUR 패키지의 기본 경로는 `$XDG_CONFIG_HOME/moonshine/config.toml`임
- Moonlight가 최초 연결 시 PIN을 표시하며, 호스트 알림이나 `http://localhost:47989/pin`에서 페어링할 수 있음
- `/submit-pin` 엔드포인트에 `uniqueid`와 `pin`을 POST해 명령줄에서도 페어링 가능함

### 애플리케이션 구성
- `config.toml`의 `[[application]]`마다 격리 세션에서 실행할 프로그램을 정의함
  - `title`: Moonlight에 표시할 이름
  - `boxart`: 선택적인 표지 이미지 경로
  - `command`: 실행 파일과 인수 목록
- `pre_command`는 애플리케이션 시작 전에 명령을 순서대로 동기 실행하며 모두 끝날 때까지 세션이 대기함
- `post_command`는 스트리밍 종료 후 명령을 순서대로 동기 실행하며 모두 끝날 때까지 서버가 대기함
- 이를 이용해 충돌하는 서비스를 중지하거나 스트리밍 전후에 GPU 상태를 변경할 수 있음

### 자동 애플리케이션 탐색
- **Steam 스캐너**는 지정한 Steam 라이브러리에서 설치된 게임을 찾아 게임 ID가 포함된 실행 명령을 구성함
- **Desktop 스캐너**는 지정한 디렉터리의 `.desktop` 파일에서 애플리케이션을 찾음
  - 터미널 애플리케이션 포함 여부와 아이콘 경로 해석 여부를 설정할 수 있음

### Sunshine과의 차이 및 제한
- [Sunshine](https://github.com/LizardByte/Sunshine)은 더 많은 플랫폼과 전반적으로 더 많은 기능을 지원하지만, Moonshine은 **Linux 전용**임
- Moonshine의 차별점은 스트리밍 세션을 데스크톱과 격리해 호스트를 계속 사용할 수 있고 활성 데스크톱 없이도 동작한다는 점임
- 두 클라이언트로의 **동시 스트리밍**은 현재 지원하지 않으며 프로젝트의 중점도 아님

### 네트워크 보안
- Moonshine은 **공용 네트워크용으로 설계되지 않았음**
- 기반 GameStream 프로토콜의 한계로 트래픽이 애플리케이션 계층에서 완전히 암호화되지 않음
- 인터넷을 통한 스트리밍에는 [Tailscale](https://tailscale.com/), [WireGuard](https://www.wireguard.com/), [ZeroTier](https://www.zerotier.com/) 같은 VPN을 사용해야 하며 Moonshine 포트를 직접 공개하면 안 됨

### 기반 프로젝트
- [Moonlight](https://moonlight-stream.org/): Moonshine용 클라이언트 제공
- [Sunshine](https://github.com/LizardByte/Sunshine): 호스트 API의 기반 제공
- [Inputtino](https://github.com/games-on-whales/inputtino): 입력 장치 구현 기반 제공
- [magic-mirror](https://github.com/colinmarc/magic-mirror): Vulkan과 Wayland 컴포지터를 이용한 헤드리스 스트리밍에 영감을 제공함

## Comments



### Comment 62176

- Author: neo
- Created: 2026-07-21T22:33:33+09:00
- Points: 1

###### [Hacker News 의견들](https://news.ycombinator.com/item?id=48972970) 
- 정리하면 **Nvidia GameStream**은 독점 기술이었다가 Nvidia가 폐기했고, 이후 Sunshine과 Moonlight가 모든 플랫폼에서 저지연 스트리밍을 지원하는 오픈소스 서버·클라이언트로 등장함  
  Game on Whales는 다중 사용자 스트리밍과 가상 디스플레이를 더해 기존 로그인 세션에 영향을 주지 않는 자체 호스팅 Stadia/GeForce Now에 가까우며, Steam·Firefox 등을 선별된 컨테이너로 실행함  
  이후 Apollo와 Artemis가 가상 디스플레이 스트리밍을 간단히 만들었지만 Apollo의 가상 디스플레이는 사실상 Windows 전용이고, **Moonshine**은 이를 Linux 서버에서 구현함  
  Apollo에서 갈라진 Vibepollo는 거의 전부 바이브 코딩으로 만든 개선판이라 개인적으로는 사용하지 않을 생각인데, 이 계보에서 빠진 것이 있는지 궁금함
  - **Steam Link**도 빠졌음. 하드웨어 판매는 끝났지만 Android 앱 등을 통해 소프트웨어는 계속 살아 있음  
    Steam은 Google과 달리 이미 고객 기반까지 갖췄으므로, 당장 내일이라도 모든 하드웨어에서 보유 게임을 실행하는 Stadia식 서비스를 발표해도 놀랍지 않을 것 같음
  - 소비자용 GPU를 여러 가상화 호스트가 공유하기는 여전히 사실상 불가능해 활용도가 제한됨. 강력한 서버 한 대에 씬 클라이언트를 연결해 구형 COD 같은 게임을 즐기는 구성이 이상적임
  - Moonshine은 Linux에서 **헤드리스 Sunshine**처럼 동작하는 것인지 궁금함  
    Sunshine은 스트리밍 중 호스트 화면에도 게임이 표시되지만, Moonshine은 물리 디스플레이 없이 실행하거나 여러 게임을 동시에 실행할 수 있다는 의미인지 확인하고 싶음
  - Proxmox 안의 Fedora가 부팅할 때 실제 모니터 사양을 흉내 내는 **가짜 디스플레이**를 만들도록 커널 인자를 설정함  
    Sunshine이 이를 실제 디스플레이로 인식하므로 전원과 LAN 케이블만 남겨도 되고, HDMI 더미 플러그나 가상 디스플레이 드라이버 없이 Linux 게임 서버가 잘 작동함
  - Sunshine과 Moonlight는 다시 활발히 개발돼 Apollo와 Artemis보다 최근 릴리스도 나온 것으로 보임  
    Windows에서 원격 게임 중에도 다른 사람이 서버를 사용할 수 있는지 궁금함. 찾아본 가상 디스플레이 솔루션 대부분은 서버 디스플레이를 꺼버림

- Moonshine 개발자임. 핵심은 Sunshine과 비슷하지만 기존 데스크톱 환경에 의존하지 않고 **자체 컴포지터**를 생성한다는 차이가 있음  
  데스크톱 환경 없이 헤드리스로 실행하고, 더미 플러그 없이 임의 해상도·주사율을 만들며, 모니터가 지원하지 않아도 HDR을 사용할 수 있음. 기존 데스크톱을 사용하면서 동시에 게임을 스트리밍하는 것도 가능함  
  기술적으로는 Vulkan 인코더 하나, Linux 하나, GUI 없음, 구형 Moonlight 클라이언트 미지원이라는 좁은 범위를 의도적으로 택해 코드베이스를 가볍게 유지함. 대신 비교적 최신 GPU·드라이버와 새 Moonlight 클라이언트가 필요함  
  2022년부터 만들던 취미 프로젝트로, 처음에는 Sunshine보다 못해 README에서 사용하지 말라고 권했지만 차별화된 기능이 생긴 뒤 그 문구를 제거함  
  신규 사용자에게는 자료가 풍부하고 잘 작동할 가능성이 높은 **Sunshine을 우선 권장**하며, 새로운 것을 만져보길 좋아한다면 Moonshine도 괜찮음
  - 월 20달러짜리 Claude나 Codex 요금제만 있어도 Linux를 만져보기 위한 진입 장벽이 크게 낮아졌음. 예전에는 몇 시간이나 며칠씩 막히던 일을 커피 한 잔 마시는 동안 해결할 수 있어, Bazzite 머신에서 시험할 때 다소 거친 부분도 예전만큼 방해가 되지 않을 듯함
  - 너무 겸손하게 소개한 것 같음. Linux의 Sunshine에서는 **임의 해상도**를 사용할 수 없다는 차이가 매우 큼
  - Sunshine의 여러 Linux 문제에 답답해하다가 어젯밤 [Moonshine을 발견](<https://bsky.app/profile/philpax.me/post/3mqzrgzitm22f>)했고, 지금까지 매우 만족스러움
  - 10분 정도 사용해봤는데 인상적이었음. VS Code는 실행하지 못했지만 원격 모드가 있어 크게 중요하지 않고, 나중에 다른 앱으로 다시 시도할 예정임  
    자체 컴포지터 구조상 완전한 데스크톱 환경을 구동하기는 어려워 보이지만, Linux에는 앱 하나씩이라도 안정적으로 원격 실행할 방법이 절실함. KDE와 GNOME 내장 서버는 전반적으로 문제가 있고 모니터도 켜져 있어야 함

- Sunshine과 Moonlight로 데스크톱에서 에뮬레이션하고 업스케일한 PS2 게임 **SSX Tricky**를 7년 이상 된 Android 셋톱박스에 매우 부드럽게 스트리밍할 수 있었음  
  다만 데스크톱 화면에 게임이 그대로 표시돼 다른 사람이 게임하는 동안 호스트를 사용할 수 없었는데, Moonshine이 이를 해결하는 것으로 보임. 이미 훌륭했던 조합에 화룡점정을 더한 셈임
  - SSX 시리즈가 그리움. EA Big이 문을 닫고 다른 회사도 이어받지 않은 것이 아쉬우며, 그중에서도 **Tricky**를 가장 좋아했음

- MacBook에 DualSense를 연결하고 Moonlight를 열어 게임용 데스크톱에 전체 화면으로 접속한 뒤 Steam의 AAA 게임을 실행하는 방식으로 **Moonlight와 Apollo**를 사용 중임  
  Wi-Fi 7에서는 체감할 만한 지연이 거의 없고, 대형 TV에 연결한 Minisforum도 DualSense의 다른 버튼 조합으로 접속할 수 있음. Apollo가 설정을 저장해 두 기기 사이를 거의 문제없이 전환 가능함
  - Android 휴대전화에서도 시도해볼 만함. 컨트롤러를 장착한 6.7인치 OLED 2340×1080, 120Hz HDR 화면으로 침대에서 Diablo 2 Remastered를 하면 Steam Deck보다도 만족스러움  
    휴대전화는 영상만 재생하므로 뜨거워지지 않고 배터리도 오래감
  - 스트리밍 중 지연 급증을 막으려면 **AWDL을 종료**해야 하는지도 궁금함
  - Steam 외부 게임 지원 외에도 **Steam Link보다 더 잘 작동하는지** 궁금함

- Moonshine이 세션마다 가상 데스크톱 같은 것을 생성하는지, 단순한 별도 화면인지 아니면 완전히 독립된 **컴포지터 인스턴스**인지 궁금함
  - 기능 설명대로 각 스트림이 데스크톱 환경과 완전히 분리된 자체 컴포지터에서 실행됨. 여러 인스턴스를 호스팅할 수 있는 게임 서버라는 발상이 매우 매력적임

- PC에서 Switch 게임을 에뮬레이션해 구형 **Wii U와 3DS**로 스트리밍하는 데 이런 방식을 사용함
  - Android 기반의 Ayn Odin·Thor 같은 최신 휴대용 기기에서도 사용함
  - 몇 년 전 Rust로 모든 에뮬레이터에 다인용 네트워크 플레이를 지원하는 도구를 만들었는데, 의외로 구현이 쉬웠음

- **Moonlight와 Sunshine** 조합을 RTX 4000 Pro GPU 서버에서 만족스럽게 사용 중임  
  연결된 클라이언트에 맞춘 자동 해상도 조정만 아쉬웠지만 Home Assistant Windows 클라이언트로 스크립트를 작성해 해결함

- 노트북에서 휴대전화로 Sunshine과 Moonlight 스트리밍을 설정하려고 안내서를 따라갔지만 쓸 만한 결과를 얻지 못했음  
  쉬려고 하는 게임에 제한된 여가 일주일을 코덱·지연·Wi-Fi 설정·여러 앱을 만지는 데 써버려 포기했는데, 약 3년이 지난 지금은 개선됐는지 궁금함
  - 가끔 완벽하게 작동한 세션도 있어 기술적으로 가능하다는 것은 확인했지만, 90% 정도는 이상한 오류·설정 문제·업데이트의 호환성 파괴에 시달렸음. 잘 쓰는 사람도 있지만 문제를 다듬으려면 아직 많은 작업이 필요해 보임
  - 약 일주일 전 LLM의 도움으로 Windows 호스트와 Ubuntu 클라이언트를 **30분 만에 설정**했고, 외부 네트워크 연결 문제도 15분 정도 만에 해결함  
    결국 하려던 게임은 로컬 다인용만 지원했고 ProtonDB의 제한적 호환 판정과 달리 노트북에서 바로 실행돼 스트리밍이 필요 없었지만, 설정 자체는 수월했음. Tailscale도 사용함
  - 호스트 PC는 유선 LAN에 연결하고 클라이언트는 1080p 60fps 이상에서 최소 **Wi-Fi 6**를 사용해야 함. 일부 공유기는 패킷 손실이 심하므로 괜찮은 장비를 쓰거나 직접 구성하는 편이 좋음
  - 데스크톱과 PS Vita 사이에서 Sunshine과 Moonlight를 사용 중이며, 핵심은 최소한 호스트를 유선으로 연결하고 무선 공유기까지의 지연을 낮추는 것임  
    무선은 이상적인 환경에서도 재전송이 필요한 패킷이 훨씬 많으므로 Wi-Fi는 클라이언트 쪽에서만 쓰는 편이 좋음

- GPU를 직접 연결한 **ROS 2 개발용 VM**에 원격 접속하려고 Sunshine과 Moonlight를 사용 중임  
  구형 Ubuntu가 필요해 VM을 택했고 Gazebo 시뮬레이션 때문에 GPU 직접 연결이 필요했음. RDP에서는 데스크톱이 심하게 느리고 반응이 없었지만 이 조합으로 쓸 만해짐

- 자체 PC 게임 스트리밍은 Nvidia 기능을 켜기만 하던 시절보다 설정이 훨씬 어려워졌음  
  마지막으로 시도했을 때 작동 방법을 알아내지 못해 포기했으며, 다른 장점에도 불구하고 오픈소스 개발자들은 **사용성**을 제대로 챙기지 못하는 듯함
  - 지금은 Nvidia 독점 기능 시절보다 훨씬 좋은 환경이 됐으니 다시 시도해볼 만함. 가장 간단한 방법은 Steam 내장 **Remote Play**와 공식 앱이며, Sunshine과 Moonlight는 더 나은 결과와 세밀한 설정, Steam 외부 앱 지원을 제공함  
    YouTube 안내서나 AI의 도움도 받을 수 있고, 실제로 Linux 배포판 방화벽이 스트리밍 포트를 막고 있다는 원인을 AI와 함께 찾아낸 적이 있음  
    처음에는 로컬 네트워크에서 시작하고 인터넷 스트리밍은 나중에 설정하는 편이 좋지만, WireGuard나 Tailscale 같은 홈 VPN이 있다면 어렵지 않을 수 있음. 호스트는 유선이 가장 좋고 클라이언트 Wi-Fi도 6GHz를 지원하면 대체로 괜찮음  
    PS Remote Play만큼 마법처럼 간편하지는 않지만 다시 시도해보길 권함
  - 5년 전에는 비슷한 문제로 게임 스트리밍을 완전히 포기했지만, 한 달 전 오래된 Linux 노트북으로 소파에서 Oxygen Not Included를 하려고 **5분 만에 Sunshine과 Moonlight를 설정**했고 곧바로 완벽하게 작동함  
    권장 사항과 달리 호스트도 Wi-Fi였는데 잘 됐으며, 최근 몇 년간 기술로 해본 일 중 가장 마법 같은 순간이었음. 다만 로컬 Wi-Fi 스트리밍만 사용함
