Correr jogos Windows num servidor Linux com GPU usando o Wine, e fazer streaming
Nem sempre é preciso o Windows para correr um programa Windows. O Wine executa software Windows diretamente no Linux, e o DXVK traduz Direct3D 9, 10 e 11 para Vulkan. Num servidor Linux com GPU, isso significa: sem licença Windows, um sistema mais leve e os controladores de GPU que já vêm com o Linux. Testámos com a versão Windows do SuperTuxKart, um conhecido jogo livre e de código aberto, num servidor Linux com GPU Intel UHD 770.
Resultados em resumo
- O jogo Windows corre com o Wine e é renderizado pela GPU (OpenGL 4.6, Mesa, Intel UHD 770).
- Cerca de 95 fps em 1080p sem V-Sync, enquanto outra máquina virtual usava a GPU ao mesmo tempo.
- Desligue o V-Sync: o ecrã do servidor é virtual e o V-Sync só faz o jogo esperar por ele. O Moonlight limita a taxa de imagens do seu lado.
- O Sunshine também corre no servidor Linux: captura o ecrã e codifica em H.264 ou HEVC na GPU (VA-API), pronto para o Moonlight.
- Não use o Xvfb para jogos: o OpenGL dele corre no CPU (9 fps no nosso primeiro teste Direct3D com o Xvfb). Use antes um compositor Wayland sem ecrã (ver abaixo).
Configuração do teste
| Elemento | Valor |
|---|---|
| Servidor | Linux (Debian 13), 4 vCPU, Intel UHD 770 (GPU partilhada), kernel 7.3, Mesa 25.0 |
| Wine | Wine 10.0 e DXVK 2.6 (pacotes Debian) |
| Ecrã | sway em modo headless + Xwayland, 1920 × 1080 a 60 Hz |
| Jogo | SuperTuxKart 1.5, versão Windows, benchmark integrado (corrida gravada, 38 s), renderizador OpenGL |
1. Um ecrã para um servidor sem ecrã
Os jogos precisam de um ecrã. Num servidor, a resposta fácil é o Xvfb, um servidor X virtual, mas o OpenGL dele é renderizado pelo CPU: o nosso primeiro teste Direct3D com o Xvfb correu a 9 fps. A solução é o sway, um compositor Wayland que funciona sem monitor e renderiza com a GPU, mais o Xwayland para programas X11 como o Wine:
apt install sway xwayland wine wine64 dxvk-wine64 mesa-vulkan-drivers
mkdir -p ~/.config/sway
cat > ~/.config/sway/config <<'EOF'
output HEADLESS-1 resolution 1920x1080 position 0,0
default_border none
xwayland enable
EOF
export XDG_RUNTIME_DIR=/run/user/$(id -u)
WLR_BACKENDS=headless WLR_RENDERER=gles2 WLR_LIBINPUT_NO_DEVICES=1 \
WLR_RENDER_DRM_DEVICE=/dev/dri/renderD128 sway &
Confirme que o OpenGL corre na GPU:
DISPLAY=:0 glxinfo -B | grep renderer
# OpenGL renderer string: Mesa Intel(R) UHD Graphics 770 (ADL-S GT1)
2. Correr o jogo Windows
export DISPLAY=:0 WINEPREFIX=~/.wine-games
wineboot -i
dxvk-setup install --prefix "$WINEPREFIX" # Direct3D 9/10/11 -> Vulkan
cd SuperTuxKart-1.5-win/stk-code/build-x86_64/bin
wine supertuxkart.exe --screensize=1920x1080 --fullscreen
O registo do jogo confirma a GPU:
IrrDriver: OpenGL renderer: Mesa Intel(R) UHD Graphics 770 (ADL-S GT1)
Para jogos Direct3D, o DXVK faz o mesmo trabalho através do Vulkan: no nosso teste, encontrou a
Intel(R) UHD Graphics 770 (ADL-S GT1).
3. Resultados
| SuperTuxKart (versão Windows), 1080p | Típico | Quase estável | Constante |
|---|---|---|---|
| Wine no Linux, V-Sync desligado, GPU partilhada com outra VM ocupada | 95 a 98 fps | — | — |
| Windows 11 na mesma GPU, V-Sync desligado, para comparação | 111 fps | 96 fps | 69 fps |
Com o Wine, o jogo corre quase tão depressa como no Windows, mesmo com a GPU partilhada (valores do Windows do nosso teste com Windows 11 e Sunshine).
Desligue o V-Sync no jogo. Com o V-Sync, o jogo espera pela próxima atualização do ecrã antes de mostrar uma imagem. Aqui o ecrã é virtual e ninguém olha para ele: um jogo que falha uma atualização por pouco espera pela seguinte e perde imagens sem motivo. Deixe antes o Moonlight limitar a taxa de imagens (60 fps por omissão).
4. Fazer streaming com Sunshine e Moonlight
O Sunshine tem uma versão Linux que captura o ecrã do sway e codifica na GPU. Com
capture = wlr e encoder = vaapi na configuração, encontrou:
Found H.264 encoder: h264_vaapi [vaapi]
Found HEVC encoder: hevc_vaapi [vaapi]
Emparelhe o Moonlight no seu computador, telemóvel ou box de TV, e joga o jogo Windows que corre no
servidor Linux. Abra a interface web do Sunshine através de um túnel SSH
(ssh -L 47990:localhost:47990 root@your-server) em vez de a expor à Internet.
Wine ou Windows?
| Wine no Linux | Windows 11 | |
|---|---|---|
| Preço | incluído | 10 € uma única vez (opção) |
| Compatibilidade | muito boa para jogos antigos e independentes; consulte o ProtonDB ou a Wine AppDB | tudo o que corre no Windows |
| Anti-batota | normalmente não | muitas vezes recusado numa máquina virtual |
| Instalação | sway + Wine + Sunshine | controlador Windows + ecrã virtual + Sunshine |
Comece pelo Wine se o seu jogo é conhecido por funcionar com ele; escolha o Windows se não for o caso, ou se precisar de outras ferramentas Windows.
Sistemas prontos para jogar logo à partida. Os sistemas que instalamos por predefinição já estão otimizados para isso: Debian 13 com um kernel recente (7.3), os drivers de GPU da Intel e o Mesa (OpenGL, Vulkan, codificação de vídeo VA-API), e o Windows 11 (opção) com o driver gráfico da Intel e o Ambiente de Trabalho Remoto renderizado na GPU. Nada de procurar drivers: instale o seu jogo e o Sunshine, e jogue.
Que plano?
Os jogos precisam de CPU e de GPU ao mesmo tempo. Recomendamos o iGPU Power (4 vCPU, 14 GB de RAM, o dobro da quota de GPU do Start): sem V-Sync, no Windows, este jogo usava sozinho mais de metade dos 2 vCPU do iGPU Start, e quando outros servidores usam a GPU, o Power recebe o dobro do tempo de GPU, logo menos quebras de imagem. O iGPU Start chega para jogos 2D e ferramentas leves.
Ver os planos, iGPU Power a partir de 29,99 € por mês s/ IVA.