1 pontos por GN⁺ 3 시간 전 | 1 comentários | Compartilhar no WhatsApp
  • Moonshine é um host Linux que envia a tela de jogos de PC para clientes Moonlight e devolve entradas de teclado, mouse e controle ao host, oferecendo suporte a jogo remoto
  • Usa um compositor Wayland separado para cada stream, isolando-o do desktop; permite continuar usando o PC host durante o streaming e também roda em servidores sem monitor
  • Suporta codificação H.264, H.265 e AV1 via GPU, HDR de 10 bits, entradas incluindo movimento, touchpad e háptica, e áudio de baixa latência baseado em Opus em 5.1 e 7.1 canais
  • Requer Linux e systemd, GPU NVIDIA RTX, AMD RDNA2+ ou Intel Arc com codificação de vídeo Vulkan, e Moonlight v6.0.0 ou superior
  • O tráfego do protocolo GameStream não é totalmente criptografado na camada de aplicação, portanto as portas não devem ser expostas diretamente à internet; para acesso externo, é necessária uma VPN como Tailscale, WireGuard ou ZeroTier

Streaming de jogos isolado

  • Cada aplicação é executada em sua própria sessão de streaming, separada do desktop do host
    • O PC host pode continuar sendo usado para outras tarefas durante o streaming
    • Funciona em servidores headless sem uma sessão de desktop ativa, monitor ou plug HDMI dummy
  • Processa H.264, H.265 e AV1 com codificação de vídeo Vulkan pela GPU
  • Em jogos compatíveis, oferece streaming com HDR real de 10 bits
  • Suporta mouse, teclado e gamepads, e também processa entradas de movimento, touchpad e háptica dos gamepads
  • O áudio usa codificação Opus de baixa latência e oferece suporte a estéreo e surround 5.1 e 7.1

Requisitos de execução

  • Atualmente é exclusivo para Linux; foi testado no Arch Linux e há relatos de funcionamento em outras distribuições Linux
  • systemd é necessário para executar e gerenciar processos de aplicações
  • Requer uma GPU NVIDIA RTX, AMD RDNA2 ou superior, ou Intel Arc com suporte a codificação de vídeo Vulkan
  • O cliente deve ser Moonlight v6.0.0 ou superior; a compatibilidade com versões anteriores ou ports não oficiais não é garantida

Instalação e execução

  • No Arch Linux, pode ser instalado via AUR com yay -S moonshine
  • Para executar aplicações mesmo quando o usuário estiver desconectado, use sudo loginctl enable-linger $USER
    • Se o usuário estiver sempre logado ao fazer streaming, esta etapa pode ser omitida
  • Use sudo systemctl enable --now moonshine@$USER para iniciar o serviço no boot e executá-lo imediatamente
  • Para compilar a partir do código-fonte, são necessários clang, CMake, Rust, cabeçalhos Wayland e Vulkan, shaderc, Mesa, Opus, bibliotecas relacionadas ao PulseAudio, entre outros
  • Após a compilação, execute com cargo run --release -- /path/to/config.toml

Configuração e conexão do cliente

  • Se não houver arquivo no caminho especificado, um arquivo de configuração será gerado automaticamente
    • O caminho padrão do pacote AUR é $XDG_CONFIG_HOME/moonshine/config.toml
  • Na primeira conexão, o Moonlight exibe um PIN, e o pareamento pode ser feito pela notificação do host ou em http://localhost:47989/pin
  • Também é possível parear pela linha de comando fazendo POST de uniqueid e pin no endpoint /submit-pin

Configuração de aplicações

  • Cada [[application]] em config.toml define um programa a ser executado em uma sessão isolada
    • title: nome exibido no Moonlight
    • boxart: caminho opcional para a imagem de capa
    • command: lista do executável e argumentos
  • pre_command executa comandos de forma síncrona, em ordem, antes do início da aplicação, e a sessão aguarda até que todos terminem
  • post_command executa comandos de forma síncrona, em ordem, após o fim do streaming, e o servidor aguarda até que todos terminem
  • Isso pode ser usado para interromper serviços conflitantes ou alterar o estado da GPU antes e depois do streaming

Descoberta automática de aplicações

  • O scanner do Steam encontra jogos instalados nas bibliotecas Steam especificadas e monta comandos de execução que incluem o ID do jogo
  • O scanner de Desktop encontra aplicações em arquivos .desktop nos diretórios especificados
    • É possível configurar se aplicações de terminal serão incluídas e se caminhos de ícones serão resolvidos

Diferenças em relação ao Sunshine e limitações

  • Sunshine oferece suporte a mais plataformas e, em geral, a mais recursos, enquanto o Moonshine é exclusivo para Linux
  • O diferencial do Moonshine é isolar a sessão de streaming do desktop, permitindo continuar usando o host e funcionar mesmo sem um desktop ativo
  • Streaming simultâneo para dois clientes não é suportado atualmente e também não é um foco do projeto

Segurança de rede

  • Moonshine não foi projetado para redes públicas
  • Devido a limitações do protocolo GameStream subjacente, o tráfego não é totalmente criptografado na camada de aplicação
  • Para streaming pela internet, use uma VPN como Tailscale, WireGuard ou ZeroTier, e não exponha diretamente as portas do Moonshine

Projetos base

  • Moonlight: fornece o cliente para Moonshine
  • Sunshine: fornece a base da API de host
  • Inputtino: fornece a base para a implementação de dispositivos de entrada
  • magic-mirror: inspirou o streaming headless usando Vulkan e um compositor Wayland

1 comentários

 
GN⁺ 3 시간 전
Opiniões no Hacker News
  • Em resumo, o Nvidia GameStream era uma tecnologia proprietária que a Nvidia descontinuou; depois disso, Sunshine e Moonlight surgiram como servidor e cliente open source com suporte a streaming de baixa latência em todas as plataformas.
    O Game on Whales acrescenta streaming multiusuário e telas virtuais, ficando mais próximo de um Stadia/GeForce Now auto-hospedado que não afeta a sessão de login existente, executando Steam, Firefox etc. em contêineres selecionados.
    Depois, Apollo e Artemis simplificaram o streaming com telas virtuais, mas a tela virtual do Apollo é, na prática, exclusiva do Windows, enquanto o Moonshine implementa isso em servidores Linux.
    O Vibepollo, derivado do Apollo, é uma versão aprimorada feita quase inteiramente com vibe coding, então pessoalmente não pretendo usá-lo; fico curioso se há algo faltando nessa linhagem.

    • O Steam Link também ficou de fora. A venda do hardware acabou, mas o software continua vivo por meio do app para Android e afins.
      Como a Steam, ao contrário do Google, já tem até uma base de clientes, não me surpreenderia se anunciasse amanhã mesmo um serviço no estilo Stadia para rodar seus jogos em qualquer hardware.
    • Ainda é, na prática, quase impossível várias máquinas host de virtualização compartilharem uma GPU de consumo, o que limita a utilidade. A configuração ideal seria conectar thin clients a um servidor potente para jogar títulos como COD antigos.
    • Fico curioso se o Moonshine funciona no Linux como um Sunshine headless.
      No Sunshine, durante o streaming, o jogo também aparece na tela do host; quero confirmar se o Moonshine permite rodar sem tela física ou executar vários jogos simultaneamente.
    • Configurei parâmetros do kernel para que o Fedora dentro do Proxmox crie uma tela falsa que imita as especificações de um monitor real ao inicializar.
      Como o Sunshine a reconhece como uma tela real, posso deixar apenas energia e cabo LAN conectados; o servidor Linux de jogos funciona bem sem plug HDMI dummy nem driver de tela virtual.
    • Sunshine e Moonlight voltaram a ser desenvolvidos ativamente e parecem ter lançamentos mais recentes que Apollo e Artemis.
      Fico curioso se, no Windows, outra pessoa consegue usar o servidor enquanto há jogo remoto. A maioria das soluções de tela virtual que encontrei simplesmente desliga a tela do servidor.
  • Sou o desenvolvedor do Moonshine. A ideia central é parecida com a do Sunshine, mas a diferença é que ele cria seu próprio compositor, sem depender de um ambiente desktop existente.
    Ele roda de forma headless, sem ambiente desktop, cria resoluções e taxas de atualização arbitrárias sem plug dummy e permite usar HDR mesmo que o monitor não ofereça suporte. Também é possível usar o desktop existente e, ao mesmo tempo, fazer streaming de jogos.
    Tecnicamente, escolhi de propósito um escopo estreito — um único codificador Vulkan, Linux, sem GUI e sem suporte a clientes Moonlight antigos — para manter a base de código leve. Em troca, exige GPU e drivers relativamente recentes, além de um cliente Moonlight novo.
    É um projeto de hobby que venho fazendo desde 2022; no começo era pior que o Sunshine e eu recomendava no README que não o usassem, mas removi essa frase depois que ele ganhou recursos diferenciados.
    Para novos usuários, recomendo primeiro o Sunshine, que tem mais material disponível e maior chance de funcionar bem; se você gosta de mexer com coisas novas, o Moonshine também é uma boa.

    • Só de ter um plano do Claude ou Codex de US$ 20 por mês, a barreira de entrada para mexer com Linux caiu muito. Coisas em que antes eu ficava travado por horas ou dias agora dá para resolver enquanto tomo um café; então, ao testar numa máquina Bazzite, acho que eventuais arestas não vão atrapalhar tanto quanto antigamente.
    • Acho que você apresentou de um jeito modesto demais. A diferença de não ser possível usar resoluções arbitrárias no Sunshine no Linux é enorme.
    • Eu estava frustrado com vários problemas do Sunshine no Linux e ontem à noite descobri o Moonshine; até agora estou muito satisfeito.
    • Usei por uns 10 minutos e fiquei impressionado. Não consegui abrir o VS Code, mas como ele tem modo remoto isso não importa muito; vou tentar de novo depois com outros apps.
      Pela arquitetura de compositor próprio, parece difícil rodar um ambiente desktop completo, mas no Linux faz muita falta uma forma estável de executar remotamente até mesmo apps individuais. Os servidores embutidos do KDE e do GNOME têm problemas em geral e ainda exigem que o monitor esteja ligado.
  • Com Sunshine e Moonlight, consegui fazer streaming de SSX Tricky, jogo de PS2 emulado e com upscaling no desktop, para uma set-top box Android com mais de 7 anos de idade, de forma extremamente fluida.
    O problema é que o jogo aparecia igual na tela do desktop, então não dava para usar o host enquanto outra pessoa jogava; o Moonshine parece resolver isso. É como colocar a cereja no bolo de uma combinação que já era excelente.

    • Sinto falta da série SSX. É uma pena que a EA Big tenha fechado e nenhuma outra empresa tenha dado continuidade; dentre eles, Tricky era o meu favorito.
  • Estou usando Moonlight e Apollo assim: conecto um DualSense ao MacBook, abro o Moonlight, acesso em tela cheia meu desktop de jogos e rodo jogos AAA da Steam.
    No Wi‑Fi 7 quase não há latência perceptível, e um Minisforum conectado à TV grande também consegue acessar usando outra combinação de botões do DualSense. Como o Apollo salva as configurações, dá para alternar entre os dois dispositivos quase sem problemas.

    • Vale tentar também em um celular Android. Com controle acoplado a uma tela OLED de 6,7 polegadas, 2340×1080, 120 Hz e HDR, jogar Diablo 2 Remastered na cama é ainda mais satisfatório que no Steam Deck.
      Como o celular só reproduz vídeo, ele não esquenta e a bateria dura bastante.
    • Também fico curioso se é preciso encerrar o AWDL para evitar picos de latência durante o streaming.
    • Além do suporte a jogos externos à Steam, fico curioso se ele funciona melhor que o Steam Link.
  • Fico curioso se o Moonshine cria algo como um desktop virtual por sessão, se é apenas uma tela separada ou se é uma instância de compositor totalmente independente.

    • Pelo que a descrição dos recursos diz, cada stream roda em seu próprio compositor, completamente separado do ambiente desktop. A ideia de um servidor de jogos capaz de hospedar várias instâncias é muito atraente.
  • Uso esse método para emular jogos de Switch no PC e fazer streaming para Wii U e 3DS antigos

    • Também uso em portáteis modernos baseados em Android, como Ayn Odin e Thor
    • Alguns anos atrás, criei em Rust uma ferramenta para oferecer jogo em rede multiplayer em todos os emuladores, e a implementação foi surpreendentemente fácil
  • Estou usando de forma satisfatória a combinação Moonlight e Sunshine em um servidor com GPU RTX 4000 Pro
    Só sentia falta de ajuste automático de resolução conforme o cliente conectado, mas resolvi isso escrevendo scripts com o cliente Windows do Home Assistant

  • Segui um guia para configurar streaming com Sunshine e Moonlight do notebook para o celular, mas não consegui um resultado utilizável
    Acabei gastando uma semana do meu tempo livre limitado, que era para relaxar jogando, mexendo em codec, latência, configurações de Wi‑Fi e vários apps, e desisti; agora, cerca de 3 anos depois, fico curioso para saber se melhorou

    • Às vezes havia sessões que funcionavam perfeitamente, então confirmei que tecnicamente era possível, mas em uns 90% do tempo sofri com erros estranhos, problemas de configuração e atualizações quebrando compatibilidade. Há quem use bem, mas parece que ainda há muito trabalho para aparar as arestas
    • Cerca de uma semana atrás, com ajuda de um LLM, configurei um host Windows e um cliente Ubuntu em 30 minutos, e também resolvi o problema de conexão por rede externa em cerca de 15 minutos
      No fim, o jogo que eu queria jogar só tinha multiplayer local e, apesar da avaliação de compatibilidade limitada no ProtonDB, rodou direto no notebook, então nem precisei de streaming, mas a configuração em si foi tranquila. Também usei Tailscale
    • O PC host deve ficar conectado por LAN cabeada, e o cliente deve usar no mínimo Wi‑Fi 6 para 1080p 60 fps ou mais. Alguns roteadores têm muita perda de pacotes, então é melhor usar um equipamento decente ou configurar tudo diretamente
    • Uso Sunshine e Moonlight entre um desktop e um PS Vita, e o ponto principal é conectar pelo menos o host por cabo e reduzir a latência até o roteador sem fio
      Mesmo em condições ideais, redes sem fio têm muito mais pacotes que precisam de retransmissão, então é melhor usar Wi‑Fi só no lado do cliente
  • Estou usando Sunshine e Moonlight para acessar remotamente uma VM de desenvolvimento em ROS 2 com GPU em passthrough
    Escolhi uma VM porque precisava de um Ubuntu antigo, e o passthrough de GPU era necessário por causa da simulação no Gazebo. No RDP, a área de trabalho ficava muito lenta e sem resposta, mas com essa combinação ficou utilizável

  • Fazer streaming de jogos de PC por conta própria ficou muito mais difícil de configurar do que na época em que bastava ativar um recurso da Nvidia
    Na última vez que tentei, desisti porque não consegui descobrir como fazer funcionar; apesar de outras vantagens, parece que os desenvolvedores open source não cuidam direito da usabilidade

    • Hoje o ambiente está muito melhor do que na época do recurso proprietário da Nvidia, então vale tentar de novo. O jeito mais simples é o Remote Play integrado do Steam e o app oficial; já Sunshine e Moonlight oferecem resultados melhores, ajustes mais finos e suporte a apps fora do Steam
      Também dá para usar guias no YouTube ou ajuda de IA; na prática, uma vez descobri com ajuda de IA que o firewall de uma distribuição Linux estava bloqueando as portas de streaming
      No começo, é melhor iniciar pela rede local e deixar o streaming pela internet para depois, mas, se você tiver uma VPN doméstica como WireGuard ou Tailscale, pode não ser difícil. O host fica melhor cabeado, e o Wi‑Fi do cliente também costuma ir bem se tiver suporte a 6 GHz
      Não é tão magicamente simples quanto o PS Remote Play, mas recomendo tentar de novo
    • Há 5 anos, abandonei completamente streaming de jogos por problemas parecidos, mas há um mês configurei Sunshine e Moonlight em 5 minutos num notebook Linux antigo para jogar Oxygen Not Included no sofá, e funcionou perfeitamente de imediato
      Ao contrário das recomendações, o host também estava no Wi‑Fi, mas deu certo; foi um dos momentos mais mágicos que tive com tecnologia nos últimos anos. Porém, usei apenas streaming por Wi‑Fi local