Retro gaming en la nube: RetroArch en un servidor con GPU, transmitido con Sunshine y Moonlight
Tu colección de juegos retro en un solo lugar, jugable desde tu portátil, tu móvil o tu televisor, con las mismas partidas guardadas en todas partes: eso es lo que ofrece un pequeño servidor en la nube con GPU. Instalamos RetroArch en un servidor Linux con una Intel UHD 770 y sin monitor, y lo transmitimos con Sunshine (en el servidor) a Moonlight (en el lado del jugador). La GPU hace dos trabajos: dibuja la imagen, incluidos los shaders CRT que dan a los juegos antiguos el aspecto que tenían en un televisor de tubo, y codifica el flujo de vídeo.
Usa tus propios juegos, obtenidos legalmente. Para esta prueba solo usamos juegos homebrew gratuitos, descargados de las páginas oficiales de sus autores: Tobu Tobu Girl (Game Boy, de Tangram Games, publicado gratis con su código fuente) y µCity (Game Boy Color, de código abierto). Muchos autores publican así juegos nuevos para consolas antiguas, y también puedes copiar tus propios cartuchos y discos con un dumper.
Resultados de un vistazo
- La emulación no es el problema: con la V-Sync desactivada, RetroArch ejecutó un juego de Game Boy a 1.863 fps y uno de Game Boy Color a 1.807 fps a 1080p, unas 30 veces la velocidad de la consola.
- La GPU importa para los shaders CRT: con crt-royale, uno de los shaders CRT más pesados, RetroArch seguía dibujando unos 255 fps a 1080p, cuatro veces lo necesario.
- Transmitir cuesta poco: H.264 1080p 60 fps codificado por la GPU, de 4,6 a 6,5 ms de procesamiento en el servidor de media durante el juego (con o sin shader), ningún fotograma perdido, y solo entre el 13 y el 17 % de un núcleo de CPU para Sunshine.
- iGPU Start basta para consolas de 8 y 16 bits; elige iGPU Power si también juegas a sistemas más pesados o quieres más margen cuando otros servidores usan la GPU.
Configuración de la prueba
| Elemento | Valor |
|---|---|
| Servidor | Debian 13, Linux 7.3, Intel UHD 770 (GPU compartida), 4 vCPU, 8 GB de RAM, sin monitor |
| Emulador | RetroArch 1.20.0 (paquetes de Debian), núcleos Gambatte (Game Boy) y mGBA (Game Boy Color) |
| Shaders | colección glsl-shaders de libretro (crt-royale, crt-lottes), controlador de vídeo OpenGL |
| Pantalla | sway headless (Wayland) a 1920×1080, dibujada por la GPU |
| Streaming | Sunshine 2026.914 en el servidor, Moonlight 6.2 en un cliente Linux, H.264 1080p 60 fps, decodificación por hardware |
| Red | cliente y servidor en el mismo centro de datos: por Internet, suma la latencia de tu conexión |
1. Una pantalla para un servidor que no tiene
Un servidor en la nube no tiene monitor, así que le damos uno virtual. Usamos sway, un pequeño
escritorio Wayland, en modo «headless»: crea una pantalla de 1920×1080 en memoria y la dibuja con la
GPU Intel. RetroArch se ejecuta en ella a pantalla completa, y Sunshine la captura directamente
(capture = wlr) y la codifica en la GPU (encoder = vaapi):
# ~/.config/sunshine/sunshine.conf
capture = wlr
encoder = vaapi
adapter_name = /dev/dri/renderD128
Sunshine encuentra entonces los codificadores por hardware (h264_vaapi, hevc_vaapi). El streaming
en AV1 no está disponible en esta GPU: usa H.264 o HEVC en Moonlight. Evita Xvfb, la «pantalla virtual»
habitual para X11: lo dibuja todo con la CPU, y la GPU no se usaría para los shaders.
2. ¿A qué velocidad va la emulación?
Para medir lo que puede hacer el servidor, desactivamos la V-Sync y la sincronización de audio, y pedimos a RetroArch que ejecutara un número fijo de fotogramas lo más rápido posible, a pantalla completa a 1080p. Cronometramos 600 y 3.600 fotogramas y dividimos la diferencia, para que el tiempo de arranque (carga, compilación de shaders) no cuente.
| RetroArch, 1080p, V-Sync desactivada | Sin shader | crt-royale | crt-lottes |
|---|---|---|---|
| Game Boy, Tobu Tobu Girl (Gambatte) | 1.863 fps | 257 fps | de 80 a 116 fps |
| Game Boy Color, µCity (mGBA) | 1.807 fps | 253 fps | no medido |
La emulación en sí casi no cuesta nada: estas consolas son diminutas para un procesador moderno. El shader CRT es trabajo de la GPU: redibuja cada píxel de la pantalla 1080p con las líneas de barrido, la máscara de sombra y el brillo de un televisor de tubo. Incluso con crt-royale, el servidor se mantiene muy por encima de los 60 fps necesarios. Las dos pasadas de crt-lottes dieron resultados distintos (80 y 116 fps): la GPU es compartida, y otros servidores de prueba la estaban usando en ese momento.
La V-Sync desactivada es solo para medir. Para jugar, configura RetroArch para que siga la tasa
propia del juego («Sync to Exact Content Framerate», vrr_runloop_enable = "true"): el juego va
entonces a la velocidad de la consola (59,73 Hz en una Game Boy), y Moonlight lo muestra con fluidez en
tu pantalla.
3. Transmitir con Moonlight: lo que cuesta
Lanzamos cada juego desde Moonlight (cada uno es una «aplicación» de Sunshine, ver más abajo), jugamos y anotamos las estadísticas de rendimiento de Moonlight y el uso de CPU del servidor:
| Moonlight, 1080p 60 fps H.264 | Juego, sin shader | Juego, crt-royale | Menú de RetroArch |
|---|---|---|---|
| Procesamiento en el servidor (captura + codificación), media | de 4,6 a 6,5 ms | de 5,8 a 6,4 ms | 12,2 ms |
| Procesamiento en el servidor, mín / máx | 4,3 / 7,1 ms | 4,2 / 11,7 ms | 4,5 / 21,5 ms |
| Fotogramas perdidos por la red o por jitter | 0 % | 0 % | 0 % |
| Tiempo de decodificación en el cliente | de 0,20 a 0,23 ms | de 0,21 a 0,24 ms | 0,29 ms |
| CPU de Sunshine (parte de un núcleo) | 14 % | 17 % | no medido |
| CPU de RetroArch (parte de un núcleo) | 4 % | 6 % | no medido |
El flujo usaba 15 Mbit/s, el valor por defecto de Sunshine a 1080p. El codificador es una parte de la GPU distinta de la que dibuja los shaders: por eso el shader CRT no ralentiza el flujo. El menú de RetroArch, con su fondo animado, tarda un poco más en capturarse que un juego de Game Boy. Tu latencia total dependerá sobre todo de tu conexión a Internet hasta el servidor (en Alemania): una buena conexión de fibra en Europa suele añadir de 10 a 30 ms.
4. Una aplicación de Sunshine por juego
Sunshine lanza un programa cuando Moonlight pide una «aplicación». Creamos una para el menú de RetroArch
y una por juego, para poder lanzar un juego directamente desde Moonlight (~/.config/sunshine/apps.json):
{
"name": "Tobu Tobu Girl (CRT)",
"cmd": "retroarch --appendconfig=/root/play.cfg --set-shader /root/glsl-shaders/crt/crt-royale.glslp -L /usr/lib/x86_64-linux-gnu/libretro/gambatte_libretro.so /root/roms/tobu.gb",
"auto-detach": "true",
"wait-all": "true"
}
play.cfg contiene los pocos ajustes de RetroArch que importan para jugar a través de Sunshine:
video_driver = "gl"
video_fullscreen = "true"
video_vsync = "false"
vrr_runloop_enable = "true"
video_scale_integer = "true"
video_shader_enable = "true"
pause_nonactive = "false"
audio_driver = "pulse"
config_save_on_exit = "false"
pause_nonactive = "false" impide que RetroArch se ponga en pausa cuando cree haber perdido el foco, y
config_save_on_exit = "false" evita que una prueba o un cambio en el menú sobrescriba tus ajustes.
Sunshine crea un mando, un teclado y un ratón virtuales en el servidor para el jugador de Moonlight, así
que tu propio mando funciona como si estuviera conectado al servidor. Si prefieres una biblioteca de
juegos al estilo de una consola, con carátulas, puedes añadir ES-DE (EmulationStation Desktop
Edition) como otra aplicación de Sunshine por encima de RetroArch; no lo incluimos en esta prueba.
5. ¿iGPU Start o iGPU Power?
Para consolas de 8 y 16 bits, iGPU Start (2 vCPU, 8 GB de RAM, 14,99 € al mes sin IVA) es suficiente: RetroArch y Sunshine juntos usaban alrededor de un cuarto de núcleo en nuestra prueba. iGPU Power (4 vCPU, 14 GB de RAM, el doble de cuota de GPU que Start, 29,99 € al mes sin IVA) es la mejor opción si usas shaders CRT pesados, juegas a sistemas más exigentes o quieres que el flujo se mantenga estable cuando otros servidores usan la GPU al mismo tiempo.
6. Ponerlo en marcha en un servidor Linux GPU
¿Lo quieres listo para jugar? Pídelo por correo al hacer el pedido (contact@linuxgpu.eu): podemos entregarte el servidor con todo lo siguiente ya instalado y configurado (pantalla virtual, RetroArch, shaders, Sunshine). Solo tienes que instalar Moonlight en tu ordenador, móvil o TV box, emparejarlo y añadir tus propios juegos.
Para hacerlo tú mismo:
- Instala RetroArch y los núcleos:
apt install retroarch libretro-gambatte libretro-mgba libretro-nestopia, y los shaders:git clone https://github.com/libretro/glsl-shaders. - Inicia una sesión de sway headless en la GPU (
WLR_BACKENDS=headless WLR_RENDER_DRM_DEVICE=/dev/dri/renderD128 sway) con una salida de 1920×1080. - Instala Sunshine (paquete para Debian 13 de sus releases oficiales en GitHub), con la configuración de arriba, y añade una aplicación por juego.
- Abre la interfaz web de Sunshine a través de un túnel SSH
(
ssh -L 47990:localhost:47990 you@your-server), crea la cuenta de Sunshine y empareja Moonlight (Windows, macOS, Linux, Android, iOS, cajas de TV). - Copia tus juegos al servidor (
scp) y juega.
Tu servidor es accesible por IPv6 por defecto. Si tu conexión no tiene IPv6, añade la opción de IPv4 dedicada, o conéctate a través de Tailscale sin abrir ningún puerto: consulta jugar en tu servidor en la nube desde cualquier lugar con Moonlight y Tailscale.
Para juegos de PC, lee Windows 11 en la nube con Sunshine y Moonlight y ejecutar juegos de Windows en un servidor Linux GPU con Wine.
Sistemas listos para jugar desde el primer momento. Los sistemas que instalamos por defecto ya están optimizados para ello: Debian 13 con un kernel reciente (7.3), los drivers de GPU de Intel y Mesa (OpenGL, Vulkan, codificación de vídeo VA-API), y Windows 11 (opción) con el driver gráfico de Intel y el Escritorio remoto renderizado en la GPU. Sin buscar drivers: instala tu juego y Sunshine, y a jugar.
Pruébalo
Ver los planes: iGPU Start cuesta 14,99 € e iGPU Power 29,99 € al mes sin IVA.