- Moonshine es un host para Linux que transmite la imagen de juegos de PC al cliente Moonlight y devuelve al host la entrada de teclado, mouse y controladores para permitir juego remoto
- Usa un compositor Wayland independiente por cada transmisión para aislarla del escritorio, por lo que se puede seguir usando la PC host mientras se transmite y también puede ejecutarse en servidores sin monitor
- Soporta codificación H.264·H.265·AV1 por GPU, HDR real de 10 bits, entradas que incluyen movimiento·touchpad·hápticos y audio Opus de baja latencia en 5.1·7.1 canales
- Requiere Linux y systemd, una GPU NVIDIA RTX·AMD RDNA2+·Intel Arc con codificación de video Vulkan, y Moonlight v6.0.0 o superior
- Como el tráfico del protocolo GameStream no está completamente cifrado en la capa de aplicación, no se deben exponer los puertos directamente a Internet; para acceso externo se necesita una VPN como Tailscale·WireGuard·ZeroTier
Streaming de juegos aislado
- Cada aplicación se ejecuta en su propia sesión de streaming, separada del escritorio del host
- La PC host puede usarse para otras tareas incluso mientras se transmite
- Funciona en servidores headless sin una sesión de escritorio activa, monitor ni dongle HDMI dummy
- Procesa H.264·H.265·AV1 con codificación de video Vulkan de la GPU
- Ofrece streaming con HDR real de 10 bits en juegos compatibles
- Soporta mouse, teclado y gamepad, y también maneja entrada de movimiento·touchpad·hápticos del gamepad
- El audio usa codificación Opus de baja latencia y soporta estéreo y surround 5.1·7.1
Requisitos de ejecución
- Actualmente es solo para Linux; fue probado en Arch Linux y hay casos reportados de funcionamiento en otras distribuciones Linux
- Requiere systemd para ejecutar y administrar los procesos de las aplicaciones
- Se necesita una GPU NVIDIA RTX, AMD RDNA2 o superior, o Intel Arc con soporte para codificación de video Vulkan
- El cliente debe ser Moonlight v6.0.0 o superior; no se garantiza compatibilidad con versiones anteriores ni con ports no oficiales
Instalación y ejecución
- En Arch Linux puede instalarse desde AUR con
yay -S moonshine - Para ejecutar aplicaciones incluso cuando la sesión del usuario está cerrada, se usa
sudo loginctl enable-linger $USER- Si el usuario siempre permanece con sesión iniciada al transmitir, este paso puede omitirse
sudo systemctl enable --now moonshine@$USERinicia el servicio al arrancar y lo ejecuta de inmediato- Para compilar desde el código fuente se necesitan clang, CMake, Rust, Wayland, headers de Vulkan, shaderc, Mesa, Opus y bibliotecas relacionadas con PulseAudio
- Después de compilar, se ejecuta con
cargo run --release -- /path/to/config.toml
Configuración y conexión del cliente
- Si no existe un archivo en la ruta indicada, se genera automáticamente un archivo de configuración
- La ruta predeterminada del paquete AUR es
$XDG_CONFIG_HOME/moonshine/config.toml
- La ruta predeterminada del paquete AUR es
- Moonlight muestra un PIN en la primera conexión, y se puede emparejar desde la notificación del host o en
http://localhost:47989/pin - También es posible emparejar desde la línea de comandos haciendo POST de
uniqueidypinal endpoint/submit-pin
Configuración de aplicaciones
- Cada
[[application]]enconfig.tomldefine un programa que se ejecutará en una sesión aisladatitle: nombre que se mostrará en Moonlightboxart: ruta opcional de la imagen de portadacommand: ejecutable y lista de argumentos
pre_commandejecuta comandos de forma síncrona y en orden antes de iniciar la aplicación, y la sesión espera hasta que todos terminenpost_commandejecuta comandos de forma síncrona y en orden después de terminar el streaming, y el servidor espera hasta que todos terminen- Esto puede usarse para detener servicios en conflicto o cambiar el estado de la GPU antes y después del streaming
Detección automática de aplicaciones
- El escáner de Steam busca juegos instalados en la biblioteca de Steam indicada y construye comandos de ejecución que incluyen el ID del juego
- El escáner de Desktop encuentra aplicaciones a partir de archivos
.desktopen el directorio especificado- Se puede configurar si incluir aplicaciones de terminal y si resolver rutas de íconos
Diferencias y limitaciones frente a Sunshine
- Sunshine soporta más plataformas y, en general, más funciones, pero Moonshine es solo para Linux
- La diferencia clave de Moonshine es que aísla la sesión de streaming del escritorio, permitiendo seguir usando el host y funcionar incluso sin un escritorio activo
- El streaming simultáneo hacia dos clientes no está soportado actualmente y tampoco es un enfoque principal del proyecto
Seguridad de red
- Moonshine no está diseñado para redes públicas
- Debido a limitaciones del protocolo GameStream subyacente, el tráfico no está completamente cifrado en la capa de aplicación
- Para hacer streaming por Internet se debe usar una VPN como Tailscale, WireGuard, o ZeroTier, y no se deben exponer directamente los puertos de Moonshine
Proyectos base
- Moonlight: proporciona el cliente para Moonshine
- Sunshine: proporciona la base de la API del host
- Inputtino: proporciona la base para la implementación de dispositivos de entrada
- magic-mirror: aportó la inspiración para el streaming headless usando Vulkan y un compositor Wayland
1 comentarios
Comentarios de Hacker News
En resumen, Nvidia GameStream era una tecnología propietaria que Nvidia descartó, y después aparecieron Sunshine y Moonlight como servidor y cliente de código abierto con soporte de streaming de baja latencia en todas las plataformas
Game on Whales añade streaming multiusuario y pantallas virtuales, acercándose más a un Stadia/GeForce Now autoalojado que no afecta la sesión iniciada existente, y ejecuta Steam, Firefox, etc. en contenedores seleccionados
Después Apollo y Artemis facilitaron el streaming con pantallas virtuales, pero la pantalla virtual de Apollo en la práctica es casi exclusiva de Windows, y Moonshine implementa esto en un servidor Linux
Vibepollo, que se separó de Apollo, es una versión mejorada hecha casi por completo con vibe coding, así que personalmente no pienso usarla, pero me pregunto si falta algo en este linaje
A diferencia de Google, Steam ya tiene incluso una base de clientes, así que no me sorprendería que mañana mismo anunciara un servicio estilo Stadia para ejecutar tus juegos comprados en cualquier hardware
En Sunshine el juego también se muestra en la pantalla del host mientras haces streaming, pero quiero confirmar si Moonshine significa que puede ejecutarse sin pantalla física o incluso correr varios juegos al mismo tiempo
Sunshine la reconoce como una pantalla real, así que basta con dejar conectados la energía y el cable LAN, y el servidor de juegos Linux funciona bien sin dummy plug HDMI ni drivers de pantalla virtual
Me pregunto si en Windows otra persona puede usar el servidor mientras se juega en remoto. La mayoría de las soluciones de pantalla virtual que encontré apagan la pantalla del servidor
Soy el desarrollador de Moonshine. La idea central es parecida a Sunshine, pero la diferencia es que no depende del entorno de escritorio existente y crea su propio compositor
Puede ejecutarse en modo headless sin entorno de escritorio, crear resoluciones y tasas de refresco arbitrarias sin dummy plug, y usar HDR aunque el monitor no lo soporte. También es posible usar el escritorio existente y al mismo tiempo transmitir juegos
A nivel técnico, elegí deliberadamente un alcance limitado —un codificador Vulkan, Linux, sin GUI y sin soporte para clientes Moonlight antiguos— para mantener ligera la base de código. A cambio, se necesita una GPU y drivers relativamente recientes, además de clientes Moonlight nuevos
Es un proyecto hobby que hago desde 2022; al principio era peor que Sunshine y en el README recomendaba no usarlo, pero quité ese texto después de que aparecieran funciones diferenciadoras
A los usuarios nuevos les recomiendo primero Sunshine, porque tiene más material disponible y más probabilidades de funcionar bien; pero si te gusta probar cosas nuevas, Moonshine también está bien
Por la estructura de compositor propio, parece difícil ejecutar un entorno de escritorio completo, pero en Linux hace mucha falta una forma de ejecutar aunque sea una app remota de manera estable. Los servidores integrados de KDE y GNOME tienen problemas en general y además requieren que el monitor esté encendido
Con Sunshine y Moonlight pude transmitir con mucha fluidez SSX Tricky, un juego de PS2 emulado y reescalado en el escritorio, a un Android TV box de más de 7 años
Eso sí, el juego se mostraba tal cual en la pantalla del escritorio, así que no se podía usar el host mientras otra persona jugaba; Moonshine parece resolver eso. Es como ponerle el broche de oro a una combinación que ya era excelente
Estoy usando Moonlight y Apollo conectando un DualSense a una MacBook, abriendo Moonlight y entrando en pantalla completa a mi desktop gamer para lanzar juegos AAA de Steam
En Wi‑Fi 7 casi no hay latencia perceptible, y un Minisforum conectado a una TV grande también puede entrar con otra combinación de botones del DualSense. Apollo guarda la configuración, así que cambiar entre ambos dispositivos funciona casi sin problemas
Como el teléfono solo reproduce video, no se calienta y la batería dura mucho
Me pregunto si Moonshine crea algo como un escritorio virtual por sesión, si es simplemente una pantalla separada o si es una instancia de compositor completamente independiente
Uso este método para emular juegos de Switch en una PC y transmitirlos a una Wii U y 3DS antiguas
Estoy usando la combinación de Moonlight y Sunshine con buenos resultados en un servidor GPU RTX 4000 Pro
Lo único que extrañaba era el ajuste automático de resolución según el cliente conectado, pero lo resolví escribiendo un script con el cliente de Windows de Home Assistant
Seguí una guía para configurar streaming con Sunshine y Moonlight de una laptop a un teléfono, pero no logré un resultado usable
Terminé gastando mi limitada semana de tiempo libre para jugar en códecs, latencia, configuración de Wi‑Fi y varias apps, así que me rendí; me pregunto si habrá mejorado ahora, unos 3 años después
Al final, el juego que quería usar solo tenía multijugador local y, a diferencia de la evaluación limitada de compatibilidad en ProtonDB, corría directo en la laptop, así que no necesitaba streaming, pero la configuración en sí fue sencilla. También usé Tailscale
Incluso en condiciones ideales, lo inalámbrico tiene muchos más paquetes que necesitan retransmisión, así que lo mejor es usar Wi‑Fi solo del lado del cliente
Estoy usando Sunshine y Moonlight para acceder de forma remota a una VM de desarrollo ROS 2 con la GPU conectada directamente
Elegí una VM porque necesitaba una versión antigua de Ubuntu, y por la simulación con Gazebo hacía falta el acceso directo a la GPU. En RDP el escritorio iba lentísimo y casi no respondía, pero con esta combinación quedó bastante usable
El streaming propio de juegos de PC se ha vuelto mucho más difícil de configurar que en la época en que bastaba con activar la función de Nvidia
La última vez que lo intenté no pude descubrir cómo hacerlo funcionar y me rendí; pese a otras ventajas, parece que los desarrolladores de código abierto no cuidan bien la usabilidad
También puedes apoyarte en guías de YouTube o en una IA; de hecho, una vez encontré junto con una IA que la causa era que el firewall de una distro Linux estaba bloqueando los puertos de streaming
Lo mejor es empezar en red local y dejar el streaming por internet para después, pero si tienes una VPN casera como WireGuard o Tailscale puede que no sea difícil. Lo ideal es que el host vaya por cable, y si el Wi‑Fi del cliente soporta 6 GHz por lo general basta
No es tan mágicamente sencillo como PS Remote Play, pero recomiendo volver a intentarlo
Aunque contra las recomendaciones el host también estaba por Wi‑Fi, funcionó bien, y fue uno de los momentos más mágicos que he vivido con tecnología en los últimos años. Eso sí, solo uso streaming local por Wi‑Fi