- 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@$USERdé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
- Le chemin par défaut du paquet AUR est
- 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
uniqueidetpinen POST à l’endpoint/submit-pin
Configuration des applications
- Chaque
[[application]]dansconfig.tomldéfinit un programme à exécuter dans une session isoléetitle: nom affiché dans Moonlightboxart: chemin optionnel vers une image de jaquettecommand: exécutable et liste d’arguments
pre_commandexé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éespost_commandexé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
.desktopdans 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
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
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
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
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
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
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
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
Le téléphone ne fait que lire la vidéo, donc il ne chauffe pas et la batterie tient longtemps
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
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
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
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
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
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
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