1 points par GN⁺ 3 시간 전 | 1 commentaires | Partager sur WhatsApp
  • Moonshine est un hôte Linux qui envoie l’image des jeux PC aux clients Moonlight et renvoie les entrées clavier, souris et manette vers l’hôte pour permettre le jeu à distance
  • Il utilise un compositeur Wayland distinct pour chaque flux afin de l’isoler du bureau, ce qui permet de continuer à utiliser le PC hôte pendant le streaming et de l’exécuter même sur un serveur sans écran
  • Prend en charge l’encodage H.264, H.265 et AV1 via GPU, le HDR 10 bits, les entrées incluant motion, pavé tactile et haptique, ainsi que l’audio faible latence 5.1 et 7.1 canaux basé sur Opus
  • Nécessite Linux et systemd, un GPU NVIDIA RTX, AMD RDNA2+ ou Intel Arc capable d’encoder de la vidéo Vulkan, ainsi que Moonlight v6.0.0 ou ultérieur
  • Le trafic du protocole GameStream n’étant pas entièrement chiffré au niveau applicatif, il ne faut pas exposer directement les ports à Internet ; pour un accès externe, un VPN comme Tailscale, WireGuard ou ZeroTier est nécessaire

Streaming de jeux isolé

  • Chaque application s’exécute dans sa propre session de streaming, séparée du bureau de l’hôte
    • Le PC hôte peut continuer à être utilisé pour d’autres tâches pendant le streaming
    • Fonctionne sur un serveur headless sans session de bureau active, sans moniteur ni bouchon HDMI factice
  • Traite H.264, H.265 et AV1 grâce à l’encodage vidéo Vulkan du GPU
  • Offre un véritable streaming HDR 10 bits dans les jeux compatibles
  • Prend en charge la souris, le clavier et les manettes, ainsi que les entrées motion, pavé tactile et haptique des manettes
  • L’audio utilise l’encodage Opus à faible latence et prend en charge la stéréo ainsi que le surround 5.1 et 7.1

Prérequis d’exécution

  • Actuellement réservé à Linux ; testé sur Arch Linux, avec des cas de fonctionnement sur d’autres distributions Linux
  • systemd est nécessaire pour lancer et gérer les processus d’application
  • Nécessite un GPU NVIDIA RTX, AMD RDNA2 ou ultérieur, ou Intel Arc prenant en charge l’encodage vidéo Vulkan
  • Le client doit être Moonlight v6.0.0 ou ultérieur ; la compatibilité avec les versions antérieures ou les ports non officiels n’est pas garantie

Installation et exécution

  • Sur Arch Linux, l’installation est possible via l’AUR avec yay -S moonshine
  • Pour exécuter des applications même lorsque l’utilisateur est déconnecté, utilisez sudo loginctl enable-linger $USER
    • Cette étape peut être ignorée si l’utilisateur est toujours connecté lors du streaming
  • sudo systemctl enable --now moonshine@$USER démarre le service au boot et l’exécute immédiatement
  • La compilation depuis les sources nécessite notamment clang, CMake, Rust, les en-têtes Wayland et Vulkan, shaderc, Mesa, Opus et des bibliothèques liées à PulseAudio
  • Après compilation, lancez avec cargo run --release -- /path/to/config.toml

Configuration et connexion du client

  • Si aucun fichier n’existe au chemin indiqué, un fichier de configuration est généré automatiquement
    • Le chemin par défaut du paquet AUR est $XDG_CONFIG_HOME/moonshine/config.toml
  • Moonlight affiche un PIN lors de la première connexion ; l’appairage peut se faire via la notification de l’hôte ou sur http://localhost:47989/pin
  • Il est aussi possible d’appairer depuis la ligne de commande en envoyant uniqueid et pin en POST à l’endpoint /submit-pin

Configuration des applications

  • Chaque [[application]] dans config.toml définit un programme à exécuter dans une session isolée
    • title : nom affiché dans Moonlight
    • boxart : chemin optionnel vers une image de jaquette
    • command : exécutable et liste d’arguments
  • pre_command exécute des commandes de manière synchrone et dans l’ordre avant le démarrage de l’application ; la session attend qu’elles soient toutes terminées
  • post_command exécute des commandes de manière synchrone et dans l’ordre après la fin du streaming ; le serveur attend qu’elles soient toutes terminées
  • Cela permet d’arrêter des services conflictuels ou de modifier l’état du GPU avant et après le streaming

Découverte automatique des applications

  • Le scanner Steam trouve les jeux installés dans les bibliothèques Steam indiquées et construit une commande d’exécution incluant l’ID du jeu
  • Le scanner Desktop trouve des applications à partir des fichiers .desktop dans les répertoires indiqués
    • Il est possible de configurer l’inclusion des applications de terminal et la résolution des chemins d’icônes

Différences avec Sunshine et limites

  • Sunshine prend en charge davantage de plateformes et globalement plus de fonctionnalités, tandis que Moonshine est réservé à Linux
  • Le principal différenciateur de Moonshine est l’isolation des sessions de streaming par rapport au bureau, ce qui permet de continuer à utiliser l’hôte et de fonctionner sans bureau actif
  • Le streaming simultané vers deux clients n’est actuellement pas pris en charge et n’est pas non plus un axe majeur du projet

Sécurité réseau

  • Moonshine n’est pas conçu pour les réseaux publics
  • En raison des limites du protocole GameStream sous-jacent, le trafic n’est pas entièrement chiffré au niveau applicatif
  • Pour streamer via Internet, il faut utiliser un VPN comme Tailscale, WireGuard ou ZeroTier ; les ports Moonshine ne doivent pas être exposés directement

Projets de base

  • Moonlight : fournit le client pour Moonshine
  • Sunshine : fournit la base de l’API hôte
  • Inputtino : fournit la base de l’implémentation des périphériques d’entrée
  • magic-mirror : source d’inspiration pour le streaming headless avec Vulkan et un compositeur Wayland

1 commentaires

 
GN⁺ 3 시간 전
Avis sur Hacker News
  • En résumé, Nvidia GameStream était une technologie propriétaire qu'Nvidia a abandonnée, puis Sunshine et Moonlight sont apparus comme serveur et client open source prenant en charge le streaming à faible latence sur toutes les plateformes
    Game on Whales ajoute le streaming multi-utilisateur et des écrans virtuels, ce qui le rapproche d'un Stadia/GeForce Now auto-hébergé sans effet sur la session connectée existante, et exécute Steam, Firefox, etc. dans des conteneurs sélectionnés
    Ensuite, Apollo et Artemis ont simplifié le streaming sur écran virtuel, mais l'écran virtuel d'Apollo est en pratique réservé à Windows, et Moonshine implémente cela sur un serveur Linux
    Vibepollo, dérivé d'Apollo, est une version améliorée presque entièrement faite en vibe coding, donc personnellement je ne compte pas l'utiliser, mais je me demande s'il manque quelque chose dans cette lignée

    • Il manque aussi Steam Link. La vente du matériel est terminée, mais le logiciel continue de vivre via l'application Android, etc.
      Contrairement à Google, Steam dispose déjà d'une base de clients, donc je ne serais pas surpris qu'ils annoncent dès demain un service façon Stadia permettant de lancer les jeux possédés sur n'importe quel matériel
    • Il reste pratiquement impossible de faire partager un GPU grand public entre plusieurs hôtes virtualisés, ce qui limite encore son utilité. La configuration idéale serait un serveur puissant relié à des clients légers pour jouer à d'anciens jeux comme COD
    • Je me demande si Moonshine fonctionne comme un Sunshine headless sous Linux
      Sunshine affiche le jeu aussi sur l'écran de l'hôte pendant le streaming, mais j'aimerais vérifier si Moonshine permet de fonctionner sans écran physique ou de lancer plusieurs jeux en même temps
    • Dans Proxmox, j'ai configuré des paramètres du noyau pour que Fedora crée au démarrage un faux écran imitant les caractéristiques d'un vrai moniteur
      Sunshine le reconnaît comme un vrai écran, donc on peut ne laisser que l'alimentation et le câble LAN, et un serveur de jeu Linux fonctionne bien sans dongle HDMI factice ni pilote d'écran virtuel
    • Sunshine et Moonlight semblent de nouveau développés activement, avec des sorties plus récentes qu'Apollo et Artemis
      Je me demande si, sous Windows, quelqu'un d'autre peut utiliser le serveur pendant qu'on joue à distance. La plupart des solutions d'écran virtuel que j'ai vues désactivent l'affichage du serveur
  • Je suis le développeur de Moonshine. Le principe est proche de Sunshine, mais la différence est qu'il crée son propre compositeur sans dépendre d'un environnement de bureau existant
    Il peut fonctionner en headless sans environnement de bureau, créer des résolutions et fréquences de rafraîchissement arbitraires sans dummy plug, et utiliser le HDR même si le moniteur ne le prend pas en charge. Il est aussi possible d'utiliser le bureau existant tout en diffusant un jeu en streaming en parallèle
    Techniquement, j'ai volontairement choisi un périmètre restreint — un seul encodeur Vulkan, Linux uniquement, pas d'interface graphique, pas de prise en charge des anciens clients Moonlight — afin de garder une base de code légère. En contrepartie, il faut un GPU et des pilotes relativement récents ainsi que de nouveaux clients Moonlight
    C'est un projet hobby que je développe depuis 2022 ; au début, il était inférieur à Sunshine au point que le README déconseillait de l'utiliser, mais j'ai retiré cette mention après l'ajout de fonctionnalités différenciantes
    Pour les nouveaux utilisateurs, je recommande d'abord Sunshine, car la documentation est abondante et il a plus de chances de bien fonctionner ; mais si vous aimez essayer de nouvelles choses, Moonshine est aussi un bon choix

    • Même avec seulement un abonnement Claude ou Codex à 20 dollars par mois, la barrière d'entrée pour bricoler Linux a nettement baissé. Ce qui bloquait pendant des heures ou des jours se résout maintenant le temps d'un café, donc même des aspects un peu bruts lors des essais sur une machine Bazzite gêneront probablement moins qu'avant
    • La présentation est trop modeste. Le fait que les résolutions arbitraires ne soient pas possibles avec Sunshine sur Linux est une différence énorme
    • Frustré par plusieurs problèmes de Sunshine sur Linux, j'ai découvert Moonshine hier soir et jusqu'ici j'en suis très satisfait
    • Je l'ai utilisé une dizaine de minutes et c'était impressionnant. Je n'ai pas réussi à lancer VS Code, mais comme il existe un mode distant ce n'est pas très important, et je réessaierai plus tard avec d'autres applications
      Avec son architecture à base de compositeur maison, il semble difficile de faire tourner un environnement de bureau complet, mais sous Linux on a vraiment besoin d'un moyen fiable d'exécuter des applications à distance, même une par une. Les serveurs intégrés de KDE et GNOME ont globalement des problèmes, et il faut en plus que le moniteur soit allumé
  • Avec Sunshine et Moonlight, j'ai pu streamer de manière très fluide SSX Tricky, un jeu PS2 émulé et upscalé sur mon desktop, vers un boîtier Android de salon vieux de plus de sept ans
    En revanche, le jeu s'affichait tel quel sur l'écran du desktop, donc on ne pouvait pas utiliser l'hôte pendant que quelqu'un jouait ; Moonshine semble résoudre ce problème. C'est comme ajouter la touche finale à une combinaison déjà excellente

    • La série SSX me manque. C'est dommage qu'EA Big ait fermé et qu'aucune autre société n'ait repris le flambeau, et parmi les jeux de la série Tricky était mon préféré
  • J'utilise Moonlight et Apollo en connectant une DualSense à mon MacBook, en ouvrant Moonlight et en me connectant en plein écran à mon desktop de jeu, puis en lançant les jeux AAA de Steam
    En Wi-Fi 7, la latence perceptible est quasi inexistante, et mon Minisforum branché à une grande TV peut aussi se connecter avec une autre combinaison de boutons de la DualSense. Apollo enregistre la configuration, ce qui permet de passer d'un appareil à l'autre presque sans problème

    • Ça vaut aussi le coup d'essayer sur un téléphone Android. Avec un écran OLED 6,7 pouces 2340×1080, 120 Hz HDR et une manette fixée dessus, jouer à Diablo 2 Remastered au lit est encore plus satisfaisant qu'avec une Steam Deck
      Le téléphone ne fait que lire la vidéo, donc il ne chauffe pas et la batterie tient longtemps
    • Je me demande aussi s'il faut désactiver AWDL pour éviter les pics de latence pendant le streaming
    • Je me demande aussi si, en plus de la prise en charge des jeux hors Steam, ça fonctionne mieux que Steam Link
  • Je me demande si Moonshine crée quelque chose comme un bureau virtuel par session, s'il s'agit simplement d'un écran séparé, ou d'une instance de compositeur totalement indépendante

    • D'après la description des fonctionnalités, chaque flux s'exécute dans son propre compositeur complètement séparé de l'environnement de bureau. L'idée d'un serveur de jeu capable d'héberger plusieurs instances est très séduisante
  • J’utilise ce genre de méthode pour émuler des jeux Switch sur PC et les streamer vers une ancienne Wii U et une 3DS

    • Je l’utilise aussi sur des appareils portables récents comme les Ayn Odin et Thor basés sur Android
    • Il y a quelques années, j’ai créé en Rust un outil qui ajoute le multijoueur en réseau à tous les émulateurs, et c’était étonnamment facile à implémenter
  • J’utilise avec satisfaction le duo Moonlight et Sunshine sur un serveur GPU RTX 4000 Pro
    Le seul point qui me manquait était l’ajustement automatique de la résolution selon le client connecté, mais j’ai réglé ça en écrivant un script avec le client Windows de Home Assistant

  • J’ai suivi un guide pour configurer le streaming Sunshine et Moonlight d’un ordinateur portable vers un téléphone, mais je n’ai pas obtenu de résultat exploitable
    J’ai fini par abandonner après avoir passé ma semaine de temps libre limitée pour me détendre à bricoler codecs, latence, réglages Wi‑Fi et diverses applis, et je me demande si cela s’est amélioré environ 3 ans plus tard

    • Il y a bien eu quelques sessions où tout fonctionnait parfaitement, donc j’ai confirmé que c’était techniquement possible, mais dans environ 90 % des cas j’ai subi d’étranges bugs, des problèmes de configuration et des mises à jour qui cassaient la compatibilité. Certains s’en servent bien, mais il semble qu’il reste encore beaucoup de travail pour fiabiliser tout ça
    • Il y a environ une semaine, avec l’aide d’un LLM, j’ai configuré un hôte Windows et un client Ubuntu en 30 minutes, puis résolu les problèmes de connexion au réseau externe en environ 15 minutes
      Au final, le jeu que je voulais lancer ne prenait en charge que le multijoueur local et, contrairement à l’évaluation de compatibilité limitée sur ProtonDB, il se lançait directement sur le portable, donc le streaming n’était pas nécessaire, mais la configuration elle-même a été simple. J’utilise aussi Tailscale
    • Le PC hôte doit être connecté en LAN filaire, et côté client il faut au minimum du Wi‑Fi 6 pour du 1080p à 60 fps ou plus. Certains routeurs perdent beaucoup de paquets, donc mieux vaut avoir du bon matériel ou le configurer soi-même
    • J’utilise Sunshine et Moonlight entre un desktop et une PS Vita, et l’essentiel est au minimum de connecter l’hôte en filaire et de réduire la latence jusqu’au routeur sans fil
      Même dans des conditions idéales, le sans-fil entraîne bien plus de paquets à retransmettre, donc il vaut mieux réserver le Wi‑Fi au client uniquement
  • J’utilise Sunshine et Moonlight pour accéder à distance à une VM de développement ROS 2 avec un GPU passé en direct
    J’ai choisi une VM parce qu’il me fallait une ancienne version d’Ubuntu, et le passthrough GPU était nécessaire à cause de la simulation Gazebo. Avec RDP, le bureau était extrêmement lent et peu réactif, mais avec cette combinaison c’est devenu utilisable

  • Le streaming de jeux PC en auto-hébergement est devenu bien plus difficile à configurer que du temps où il suffisait d’activer une fonction Nvidia
    La dernière fois que j’ai essayé, je n’ai pas réussi à comprendre comment le faire fonctionner et j’ai abandonné ; malgré leurs autres qualités, les développeurs open source semblent encore mal gérer la facilité d’usage

    • Aujourd’hui, l’environnement est bien meilleur qu’à l’époque des fonctions exclusives à Nvidia, donc cela vaut la peine de réessayer. La méthode la plus simple est Remote Play intégré à Steam avec l’appli officielle ; Sunshine et Moonlight offrent de meilleurs résultats, des réglages plus fins et la prise en charge d’applis hors Steam
      On peut aussi s’aider de guides YouTube ou de l’IA, et j’ai déjà trouvé avec l’IA que le pare-feu d’une distribution Linux bloquait les ports de streaming
      Il vaut mieux commencer sur le réseau local et configurer le streaming via Internet plus tard, mais si vous avez un VPN domestique comme WireGuard ou Tailscale, ce n’est pas forcément difficile. L’idéal est un hôte en filaire, et si le Wi‑Fi du client prend en charge le 6 GHz, ça se passe généralement bien
      Ce n’est pas aussi magiquement simple que PS Remote Play, mais je recommande d’essayer à nouveau
    • Il y a 5 ans, j’avais complètement abandonné le streaming de jeux à cause de problèmes similaires, mais il y a un mois, pour jouer à Oxygen Not Included depuis le canapé avec un vieux portable Linux, j’ai configuré Sunshine et Moonlight en 5 minutes et tout a parfaitement fonctionné immédiatement
      Contrairement aux recommandations, l’hôte était aussi en Wi‑Fi et ça marchait bien ; ça a été l’un des moments les plus magiques que j’ai vécus avec la technologie ces dernières années. En revanche, je n’utilise que le streaming Wi‑Fi en local