Blog

Steam y Proton en un servidor GPU en la nube, en streaming con Sunshine y Moonlight

Instalamos Steam en un servidor Linux sin pantalla con una Intel UHD 770, lanzamos un juego de Windows con Proton (umu-launcher) y lo transmitimos con Sunshine a Moonlight: de 85 a 96 fps en 1080p, 9 ms de procesamiento en el servidor.

Steam y Proton en un servidor GPU en la nube, en streaming con Sunshine y Moonlight

La Steam Deck y la nueva Steam Machine de Valve ejecutan juegos de Windows en Linux con Proton, la versión de Wine de Valve. El mismo software funciona en un servidor Linux en un centro de datos: instala Steam, deja que Proton ejecute tus juegos de Windows en la GPU del servidor y juega en cualquier pantalla con Sunshine (en el servidor) y Moonlight (en tu lado). Lo probamos en un servidor Linux con GPU Intel UHD 770.

La versión Windows de SuperTuxKart con Proton en el servidor Linux, tal como la recibe un cliente Moonlight (5 segundos, estadísticas de Moonlight arriba a la izquierda).

Resultados en resumen

  • El cliente de Steam arranca en un servidor sin pantalla: unos 3 minutos desde el primer inicio hasta la ventana de inicio de sesión, en una pantalla Wayland virtual dibujada por la GPU.
  • Proton ejecuta el juego de Windows en la GPU: de 85 a 96 fps en 1080p (V-Sync desactivada) en el benchmark de SuperTuxKart, cerca de Wine (unos 95 fps) y de Windows 11 (111 fps) en la misma GPU.
  • El streaming con Sunshine no ralentiza el juego: de 83 a 95 fps mientras se transmitía 1080p a 60 fps a Moonlight, 9,3 ms de procesamiento en el servidor de media, ninguna imagen perdida.
  • No podíamos iniciar sesión en Steam para esta prueba, así que Proton se lanzó con umu-launcher, la herramienta que ejecuta el Proton de Valve sin el cliente de Steam. Con Steam, inicias sesión con tu propia cuenta y activas Steam Play.
  • Para jugar, elige iGPU Power: con la parte de GPU de iGPU Start, mientras otros servidores usaban la GPU, el mismo benchmark bajó a entre 67 y 84 fps.

Configuración de la prueba

ElementoValor
ServidorLinux (Debian 13), 4 vCPU (como iGPU Power), 10 GB de RAM, Intel UHD 770 (GPU compartida), kernel 7.3, Mesa 25.0
Pantallasway en modo headless + Xwayland, 1920 × 1080, dibujado por la GPU
Steampaquete Debian steam-installer (cliente de Steam, contrib/non-free)
Protonumu-launcher 1.4.4 (release de GitHub), que descargó UMU-Proton 10.0-4 y el Steam Linux Runtime 3.0
JuegoSuperTuxKart 1.5, versión Windows, benchmark integrado (carrera grabada, 38 s), OpenGL, V-Sync desactivada
StreamingSunshine 2026.914 en el servidor (captura Wayland, H.264 codificado por la GPU con VA-API), Moonlight 6.2 en un segundo servidor Linux, 1080p 60 fps
Redcliente y servidor en el mismo centro de datos: por Internet, añade la latencia de tu conexión

Otras máquinas virtuales usaban mucho la GPU compartida durante toda la prueba (entre dos tercios y el 87 % del tiempo de GPU cuando nuestro servidor estaba en reposo): las cifras de abajo son las de una GPU compartida cargada, no las de una GPU vacía.

1. Una pantalla para Steam en un servidor

Steam necesita una pantalla y se niega a ejecutarse como root. Creamos un usuario normal y lanzamos sway, un compositor Wayland que funciona sin monitor y dibuja con la GPU, más Xwayland para Steam y los juegos de Windows (Xvfb dibujaría con la CPU):

dpkg --add-architecture i386
apt install sway xwayland steam-installer mesa-vulkan-drivers mesa-vulkan-drivers:i386 \
  libgl1-mesa-dri:i386 intel-media-va-driver-non-free
# como usuario de juego:
mkdir -p ~/.config/sway
printf 'output HEADLESS-1 resolution 1920x1080\nxwayland enable\n' > ~/.config/sway/config
WLR_BACKENDS=headless WLR_RENDERER=gles2 WLR_LIBINPUT_NO_DEVICES=1 \
  WLR_RENDER_DRM_DEVICE=/dev/dri/renderD128 sway &
DISPLAY=:0 steam &

En el primer inicio, Steam descarga y actualiza su cliente (1,4 GB en ~/.local/share/Steam) y luego muestra la ventana de inicio de sesión, unos 3 minutos y 20 segundos después del primer arranque.

Ventana de inicio de sesión de Steam en la pantalla virtual sway de un servidor Linux en la nube
El cliente de Steam en la pantalla virtual del servidor, esperando el inicio de sesión (captura con grim).

Con tu propia cuenta: inicia sesión (la primera vez, a través de Moonlight o de un escritorio remoto), luego en Steam → Parámetros → Compatibilidad, activa Steam Play para todos los demás títulos y elige una versión de Proton. Los juegos de Windows se instalan y se inician entonces como juegos de Linux. Para jugar con mando desde el sofá, inicia Steam en modo Big Picture (steam -gamepadui), que es también la interfaz de la Steam Machine.

2. Proton sin cuenta de Steam: umu-launcher

No era posible iniciar sesión en Steam para esta prueba, así que usamos umu-launcher, el lanzador que usan Lutris y Heroic para ejecutar Proton fuera de Steam. Ejecuta un juego de Windows con Proton dentro del mismo contenedor Steam Linux Runtime que usa Steam:

export WINEPREFIX=~/prefixes/stk GAMEID=umu-default
./umu-run supertuxkart.exe --screensize=1920x1080 --fullscreen --benchmark

En la primera ejecución, umu-launcher descargó UMU-Proton 10.0-4 (1,4 GB descomprimido) y el Steam Linux Runtime 3.0 «sniper» (800 MB), y creó el prefijo de Windows (900 MB), en menos de un minuto con la conexión del servidor. El registro del juego confirma que Proton dibuja en la GPU:

IrrDriver: OpenGL renderer: Mesa Intel(R) UHD Graphics 770 (ADL-S GT1)
IrrDriver: OpenGL version string: 4.6 (Core Profile) Mesa 25.0.7
Versión Windows de SuperTuxKart con Proton en un servidor Linux en la nube con una Intel UHD 770
El juego de Windows con Proton en el servidor, en 1080p (captura de la pantalla virtual).

3. Resultados

V-Sync desactivada en el juego (swap-interval-vsync="0" en el config.xml de SuperTuxKart): la pantalla del servidor es virtual y la V-Sync solo hace que el juego la espere.

SuperTuxKart (versión Windows), 1080p, ProtonTypicalMostly stableSteady
Parte de GPU de iGPU Power, 2 pasadas85 a 96 fps70 a 83 fps52 a 69 fps
Parte de GPU de iGPU Power, en streaming a Moonlight, 2 pasadas83 a 95 fps58 a 75 fps44 a 58 fps
Parte de GPU de iGPU Start, 4 pasadas67 a 84 fps59 a 71 fps45 a 61 fps
Gráfico de barras: fps de SuperTuxKart en 1080p con Proton según la parte de GPU, con streaming, comparado con Wine y Windows 11
Tasa de imágenes media de SuperTuxKart según la configuración (más alto es mejor).

Como comparación, en la misma GPU: unos 95 fps con Wine y 111 fps en Windows 11. Proton es un Wine con los añadidos de Valve; para un juego OpenGL como este, la velocidad es la misma.

El juego usaba de media alrededor del 10 % de las 4 vCPU, alrededor del 30 % con Sunshine capturando y codificando a la vez. Todo el servidor usaba 3,2 GB de RAM durante la prueba (sway, juego, Sunshine).

4. Streaming con Sunshine y Moonlight

Sunshine para Linux captura la pantalla de sway y codifica en la GPU. Su configuración:

capture = wlr
encoder = vaapi
adapter_name = /dev/dri/renderD128

Necesita el controlador multimedia de Intel (intel-media-va-driver-non-free); sin él, Sunshine no encuentra ningún codificador. Con él:

Creating encoder [h264_vaapi]
vaapi vendor: Intel iHD driver for Intel(R) Gen Graphics - 25.2.3

Emparejamos un cliente Moonlight instalado en un segundo servidor Linux del mismo centro de datos y anotamos sus estadísticas durante la partida:

Estadística de Moonlight (1080p, H.264, 60 fps)Valor
Imágenes recibidas y mostradas59,8 fps
Procesamiento en el servidor (captura + codificación), mín / media / máx4,2 / 9,3 / 14,8 ms
Imágenes perdidas (red o jitter)0 %
Latencia de red (mismo centro de datos)1 ms
Tiempo de decodificación en el cliente0,29 ms
Gráfico de barras: tiempos del stream de Moonlight, procesamiento del servidor mín, media y máx, red y decodificación
Dónde se va el tiempo en el stream de Moonlight (más bajo es mejor).
Cliente Moonlight mostrando SuperTuxKart transmitido desde el servidor Linux, con sus estadísticas de rendimiento
Lo que ve el jugador en Moonlight: el juego ejecutado con Proton en el servidor y las estadísticas.

Abre la interfaz web de Sunshine mediante un túnel SSH (ssh -L 47990:localhost:47990 usuario@tu-servidor) en lugar de exponerla en Internet. Sunshine para Linux trae ya una entrada «Steam Big Picture» que puedes elegir en Moonlight. Tu latencia total dependerá sobre todo de tu conexión a Internet hasta el servidor (Alemania): una buena fibra en Europa suele añadir de 10 a 30 ms.

Límites que conviene conocer

  • Antitrampas: muchos juegos en línea con antitrampas rechazan Proton o las máquinas virtuales. Consulta ProtonDB antes de comprar un juego para esto.
  • Es una GPU integrada: adecuada para juegos indie, juegos antiguos y juegos 2D/3D de la década de 2010, no para los grandes juegos AAA recientes en 1080p.
  • Sonido: el servidor no tiene tarjeta de sonido. Para tener sonido en Moonlight, ejecuta PipeWire o PulseAudio en la sesión de juego; aquí no probamos el sonido.

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.

¿Qué plan?

Recomendamos iGPU Power (4 vCPU, 14 GB de RAM, el doble de parte de GPU que iGPU Start). Cuando otros servidores usan la GPU, el tiempo de GPU de cada uno sigue su parte: en nuestra prueba, el mismo benchmark pasó de 67 a 84 fps con la parte de Start a 85 a 96 fps con la de Power. iGPU Start (2 vCPU, 8 GB) sigue siendo suficiente para juegos 2D y herramientas ligeras.

¿Lo quieres listo para jugar? Pídelo por correo al hacer el pedido (contact@linuxgpu.eu): podemos entregarte el servidor con Steam, la pantalla virtual y Sunshine ya instalados y configurados. Tú inicias sesión en Steam con tu propia cuenta e instalas Moonlight en tu ordenador, móvil o TV box.

Si un juego no funciona con Proton, la opción Windows 11 (10 €, en un único pago) te da un Windows completo: consulta Windows 11 en la nube con Sunshine y Moonlight.

Ver los planes: iGPU Power cuesta 29,99 € al mes sin IVA.