1 puntos por GN⁺ 3 시간 전 | 1 comentarios | Compartir por WhatsApp
  • 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@$USER inicia 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
  • 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 uniqueid y pin al endpoint /submit-pin

Configuración de aplicaciones

  • Cada [[application]] en config.toml define un programa que se ejecutará en una sesión aislada
    • title: nombre que se mostrará en Moonlight
    • boxart: ruta opcional de la imagen de portada
    • command: ejecutable y lista de argumentos
  • pre_command ejecuta comandos de forma síncrona y en orden antes de iniciar la aplicación, y la sesión espera hasta que todos terminen
  • post_command ejecuta 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 .desktop en 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

 
GN⁺ 3 시간 전
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

    • También faltó Steam Link. La venta del hardware terminó, pero el software sigue vivo mediante la app de Android y otros medios
      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
    • Sigue siendo prácticamente imposible que varios hosts virtualizados compartan una GPU de consumo, así que su utilidad es limitada. La configuración ideal sería conectar clientes ligeros a un servidor potente para disfrutar juegos como los COD viejos
    • Me pregunto si Moonshine funciona como un Sunshine headless en Linux
      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
    • Configuré argumentos del kernel para que Fedora dentro de Proxmox, al arrancar, cree una pantalla falsa que imita las especificaciones de un monitor real
      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
    • Parece que Sunshine y Moonlight volvieron a desarrollarse activamente y tienen lanzamientos más recientes que Apollo y Artemis
      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

    • Con solo tener un plan de Claude o Codex de 20 dólares al mes, la barrera de entrada para meterse con Linux bajó muchísimo. Cosas que antes te bloqueaban por horas o días ahora se resuelven mientras te tomas un café, así que al probarlo en una máquina Bazzite, algunas asperezas ya no parecen tan molestas como antes
    • Creo que lo presentaste con demasiada modestia. La diferencia de que en Sunshine para Linux no se pueden usar resoluciones arbitrarias es enorme
    • Después de frustrarme con varios problemas de Sunshine en Linux, anoche descubrí Moonshine y hasta ahora estoy muy satisfecho
    • Lo probé unos 10 minutos y me impresionó. No pude ejecutar VS Code, pero como existe el modo remoto no importa mucho, y luego volveré a probar con otras apps
      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

    • Extraño la serie SSX. Me da pena que EA Big cerrara y que ninguna otra compañía la retomara; de todos, Tricky era mi favorito
  • 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

    • También valdría la pena probarlo en un teléfono Android. Con una pantalla OLED de 6.7 pulgadas, 2340×1080, 120Hz HDR y un control acoplado, jugar Diablo 2 Remastered en la cama resulta incluso más satisfactorio que en una Steam Deck
      Como el teléfono solo reproduce video, no se calienta y la batería dura mucho
    • También me pregunto si para evitar picos de latencia durante el streaming hay que desactivar AWDL
    • Además del soporte para juegos fuera de Steam, me pregunto si funciona mejor que Steam Link
  • 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

    • Según la descripción de funciones, cada stream se ejecuta en su propio compositor completamente separado del entorno de escritorio. La idea de un servidor de juegos que pueda alojar varias instancias es muy atractiva
  • Uso este método para emular juegos de Switch en una PC y transmitirlos a una Wii U y 3DS antiguas

    • También lo uso en dispositivos portátiles modernos basados en Android como Ayn Odin y Thor
    • Hace unos años hice en Rust una herramienta que daba soporte de juego multijugador en red para todos los emuladores, y sorprendentemente fue fácil de implementar
  • 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

    • Hubo sesiones ocasionales en las que funcionó perfectamente, así que confirmé que técnicamente sí era posible, pero en el 90% de los casos sufría errores raros, problemas de configuración y actualizaciones que rompían la compatibilidad. Hay gente a la que le funciona bien, pero parece que todavía falta mucho trabajo para pulir los problemas
    • Hace como una semana, con ayuda de un LLM, configuré un host Windows y un cliente Ubuntu en 30 minutos, y también resolví el problema de conexión por red externa en unos 15 minutos
      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
    • Conviene que la PC host esté conectada por LAN cableada y que el cliente use al menos Wi‑Fi 6 para 1080p a más de 60 fps. Algunos routers tienen mucha pérdida de paquetes, así que es mejor usar equipo decente o armarlo uno mismo
    • Uso Sunshine y Moonlight entre una desktop y una PS Vita, y la clave es conectar al menos el host por cable y mantener baja la latencia hasta el router inalámbrico
      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

    • Ahora el entorno es mucho mejor que en la época de las funciones exclusivas de Nvidia, así que vale la pena intentarlo otra vez. La forma más simple es Remote Play integrado en Steam con la app oficial, y Sunshine con Moonlight ofrecen mejores resultados, ajustes más finos y soporte para apps fuera de Steam
      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
    • Hace 5 años abandoné por completo el streaming de juegos por problemas parecidos, pero hace un mes configuré Sunshine y Moonlight en 5 minutos para jugar Oxygen Not Included desde el sofá con una vieja laptop Linux, y funcionó perfecto de inmediato
      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