Romain Canu

Shadow OS

Temps de lecture : 7 min

Présentation et objectifs du projet

Le projet consiste à pouvoir lancer une application de cloud gaming sur une Raspberry Pi et de reproduire ce que fait la Shadow Box.

Le boîtier Shadow Box permet d'accéder directement à un PC dématérialisé Shadow hébergé dans le Cloud. Cette box est l'interface idéale pour profiter au mieux des performances et fonctionnalités de la technologie Shadow, qui consiste à "streamer" depuis un serveur distant un environnement PC sous Windows 10. Le fonctionnement de la Shadow Box est assez simple. Il suffit de la connecter à Internet, de la relier à la TV, écran ou vidéoprojecteur (via un DisplayPort ou un HDMI), de brancher les périphériques (clavier, souris ou manette de jeu) et d’accéder directement au PC dématérialisé surpuissant. Ce n’est pas plus compliqué que cela.

Les objectifs du projet sont de pouvoir jouer à des jeux utilisant énormément de ressources sur un PC léger et transportable.

Les étapes

Tout d'abord, il a fallu que j'analyse les solutions possibles à mettre en œuvre sur la Raspberry Pi.

En regardant si le logiciel de base délivré par Shadow était compatible des systèmes ARM, je me suis aperçu que, malheureusement, le seul logiciel compatible était la version Android de Shadow qui présente non seulement un certain nombre d'incompatibilités sur les drivers (manette par exemple), mais également des problèmes de latences sur des périphériques (clavier, souris...). La solution qui consistait à utiliser un logiciel de Shadow n'était donc pas la bonne.

J'ai donc dû comparer les logiciels de bureau à distance pour le gaming.

Parsec Moonlight Dixper Rainway
Vidéo 10 8 8 6
Audio 8 8 5 3
Prise en charge du jeu 10 8 10 8
Prise en charge du contrôleur 8 10 6 8
Interface 8 6 6 10
Total

8.8/10

8/10 7/10 7/10

Un des logiciels les plus connus est Parsec, un SDK (kit de développement logiciel) complet qui offre de bonnes performances. Après avoir testé l'utilisation de Parsec sur Raspberry Pi pour vérifier qu’il était efficace en termes de fluidité et de latence, il s’avérait que c’est bien le cas. Néanmoins, après quelques heures de jeu, j’ai constaté que la Raspberry Pi se mettait systématiquement en mode sécurisé (s'éteignait) car le processeur était trop chaud. La solution a été d’installer un ventilateur sur celui-ci.

J'ai ensuite regardé le fonctionnement du launcher Shadow officiel, en analysant les API utilisés, la génération des token, l’allumage du Shadow ... Puis j'ai dû reproduire en JavaScript toute la chaîne utilisée par le launcher officiel permettant d’allumer ou d’éteindre le Shadow. J'ai alors remarqué que le Shadow se mettait en veille au bout de 30 minutes si aucune action n’était effectuée sur celui-ci. Le seul moyen de le sortir de veille était de passer par tous les processus d’authentification, puis de l'allumer.

Enfin, pour finir j'ai développé une interface en JavaScript compatible de l’utilisation d’une manette, qui se lance automatiquement au démarrage de la machine Hôte et qui affiche un certain nombre d'informations, comme :

  • Les composants sur le Shadow (Carte graphique / Ram / ...), des informations récupérées depuis l'API de Shadow

  • Le ping et la latence du réseau où est connectée la Raspberry Pi

  • Le statut indiquant si le processus Parsec a bien été lancé sur la Raspberry Pi et sur le Shadow à distance

  • Des statuts d'utilisation des disques, de la RAM, du CPU et du processeur par le biais d'un serveur MQTT

  • les boutons « allumer » et « éteindre » de l’ordinateur à distance Shadow

Les acteurs

J'ai réalisé le projet seul en quelques semaines. Je me suis appuyé sur mes connaissances en cybersécurité pour pouvoir découvrir le cheminement étape par étape qui était utilisé pour authentifier et gérer le serveur shadow par le launcher officiel. Peu de temps après avoir terminé le développement, j'ai demandé à des amis d'utiliser la solution pendant quelques semaines pour avoir leur avis.

Les résultats

Shadow OS fonctionne parfaitement. Il a été développé pour être installé sur une télévision avec une manette sans fil. L’ interface que j’ai développée permet de commander entièrement le PC à distance (Shadow) via la manette. Shadow OS peut donc remplacer une console de jeux. Je l'utilise régulièrement et je constate que le système tel que développé reste très stable dans le temps, ce qui est certainement un gage de qualité de réalisation. Par ailleurs, mes amis ont tous apprécié la solution, notamment son interface et sa fluidité d'exécution.

Grâce à ce projet, j'ai pu enrichir non seulement mes connaissances en JavaScript, mais également comprendre le fonctionnement de certains logiciels d'analyse réseau.

Les lendemains du projet

Il y a actuellement une expiration des codes et des clés d'authentification générés, qui intervient au bout de plusieurs mois (environ 2 à 3 mois). Une solution serait de générer automatiquement ces codes pour ne pas avoir à se reconnecter sur Shadow OS. Je n'ai cependant pas prévu de travailler sur ce point.

Mon regard critique

Ce projet a été très formateur. J'ai adoré reproduire et analyser le fonctionnement et l'enchainement des appels aux différentes API du serveur Shadow pour pouvoir générer les codes d’authentification. En outre, j'ai amélioré de manière significative mon niveau en JavaScript, une compétence que j’ai utilisée par la suite pour développer des applications personnelles (par exemple, une application qui récupère les photos en noir et blanc de Mars mis en ligne par la Nasa et qui colorise ces images avec un algorithme d’intelligence artificielle).

Ce projet personnel est typique de ma façon d'appréhender l'acquisition des connaissances depuis plusieurs années : J'identifie un objectif concret à atteindre qui m'intéresse, j'explore l'existant, je recherche des solutions et j'expérimente beaucoup. Une fois l'objectif atteint, je bascule sur un autre projet personnel. Cette façon de travailler (par la pratique) m'apporte beaucoup de satisfactions personnelles et permet non seulement de renforcer mes compétences, mais aussi d'en développer de nouvelles.