Moonshine - PC 게임을 Moonlight가 실행되는 모든 기기로 스트리밍
4 hours ago
2
- 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은 더 많은 플랫폼과 전반적으로 더 많은 기능을 지원하지만, Moonshine은 Linux 전용임
- Moonshine의 차별점은 스트리밍 세션을 데스크톱과 격리해 호스트를 계속 사용할 수 있고 활성 데스크톱 없이도 동작한다는 점임
- 두 클라이언트로의 동시 스트리밍은 현재 지원하지 않으며 프로젝트의 중점도 아님
네트워크 보안
- Moonshine은 공용 네트워크용으로 설계되지 않았음
- 기반 GameStream 프로토콜의 한계로 트래픽이 애플리케이션 계층에서 완전히 암호화되지 않음
- 인터넷을 통한 스트리밍에는 Tailscale, WireGuard, ZeroTier 같은 VPN을 사용해야 하며 Moonshine 포트를 직접 공개하면 안 됨
기반 프로젝트
-
Homepage
-
Tech blog
- Moonshine - PC 게임을 Moonlight가 실행되는 모든 기기로 스트리밍