# Remote Desktop Services

Remote Desktop Services, anciennement Terminal Services, est un composant de Microsoft Windows (dans les versions clientes et serveur) qui permet à un utilisateur d'accéder à des applications et des données sur un ordinateur distant, via n'importe quel type de réseau. Son utilisation est optimisée sur des réseaux locaux (LAN) ou régionaux (MAN), fournissant des meilleurs latences et débits que des réseaux plus larges comme Internet.
Le composant Terminal Services consiste en la mise en œuvre par Microsoft d'une architecture terminal-serveur pour client léger, où les applications Windows ou même également le bureau entier de l'ordinateur exécutant les services de terminal sont rendus disponibles à l'aide d'un terminal client à distance. Le client peut aussi bien être un ordinateur à part entière exécutant n'importe quel système d'exploitation tant que le protocole réseau qui permet la transmission des services de terminal soit supporté. Un ordinateur de type barebone assez puissant peut aussi supporter le protocole réseau utilisé par Terminal Services (tel que Windows FLP). Avec Terminal Services, seule l'interface utilisateur d'une application est présentée au poste client. Chaque opération est redirigée au travers du réseau vers le serveur où toutes les opérations des applications sont effectuées. Terminal Services représente un contraste avec les systèmes de virtualisation d'applications tel que Softgrid de Microsoft, avec lesquels les applications (stockées sur un serveur central) sont diffusées sur les postes clients à la demande et ensuite gérées par le poste client.

## Historique

Terminal Services a été initialement introduit sous Windows NT 4.0 Edition Terminal Server. Il a été amélioré de façon significative pour Windows 2000 et Windows Server 2003. Le protocole sous-jacent ainsi que le service ont été à nouveau modifiés pour Windows Vista et Windows Server 2008. Windows intègre deux applications clientes qui utilisent le service de terminal: L'Assistance à distance et Le Bureau à distance. La version initiale, disponible dans toutes les versions de Windows, permet à un utilisateur d'assister un autre utilisateur. La version actuelle, qui est disponible dans les versions Professionnelle et Media Center de Windows XP ainsi que les versions Windows Vista Business, Enterprise et Ultimate, permet à un utilisateur de se connecter à distance sur le système et d'accéder au bureau, aux applications et aux données sur le système mais également de contrôler celui-ci à distance. Dans la version cliente de Windows, le service de terminal ne permet qu'une seule connexion utilisateur à la fois, tandis que la version serveur des systèmes d'exploitation permet des connexions concurrentes.
Au départ, Remote Desktop Services (RDS) ou Services Bureau à distance est le nom donné à l'architecture centralisée qui permet à un utilisateur de se connecter sur un ordinateur distant utilisant Microsoft Terminal Services. Il utilise Remote Desktop Protocol (RDP) pour l'affichage sur le Terminal Léger (TL) ainsi que la communication des périphériques. Il a été implémenté à partir de la version R2 de Windows Server 2008.
En somme, RDS permet la virtualisation d'un poste en séparant l'environnement utilisateur de l'ordinateur (appelé TL) le résumant a un simple terminal. Un élément permet de gérer les machines virtuelles, et de répartir la charge des sessions utilisateur (en renvoyant la connexion utilisateur vers la machine virtuelle concernée) : le Connexion Broker.
RDS fait partie de la Virtual desktop infrastructure (VDI) mise en place par Microsoft.

## Logiciel client

Microsoft fournit le logiciel client Connexion au Bureau à Distance (appelé initialement Client Terminal Server), disponible dans la plupart des éditions 32 bits de Windows, y compris Windows Mobile, et Mac OS X d'Apple, qui permet à un utilisateur de se connecter à un serveur exécutant le service de terminal. Sous Windows, le client Terminal Services et le protocole Remote Desktop Protocol (RDP) utilisent par défaut le port TCP 3389, qui peut être modifié dans la base de registre. Il inclut également un contrôle ActiveX afin d'intégrer la fonctionnalité dans d'autres applications ou également une page Web. Une version Windows CE du logiciel client est également disponible. Les versions serveurs de Windows intègrent également le client Administration du bureau à distance (un mode spécifique du client Bureau à distance), qui permet d'établir une connexion à distance sur le serveur en ouvrant une nouvelle session, ou à partir de la version Windows 2003 Server sur la session 0 correspondant à la console du serveur. De là toutes les applications en ligne de commande peuvent être lancées. Des développeurs tiers ont créé des logiciels clients pour d'autres types de plate-forme, y compris le client open source rdesktop pour les plates-formes Unix.

## Utilisation en entreprise

Pour une entreprise, le service de terminal permet aux services informatiques d'installer des applications sur un serveur central. Par exemple, au lieu d'installer une base de données ou un logiciel de comptabilité sur tous les bureaux, l'application peut être installée sur un seul serveur et les utilisateurs distants se connectent et utilisent l'application à travers Internet ou le réseau. Cette centralisation simplifie les mises à jour, le dépannage et la gestion des logiciels. À partir du moment où les employés ont le client Bureau à Distance, ils pourront utiliser les logiciels d'entreprise. Le service de terminal peut également être couplé avec l'authentification Windows afin d'empêcher les utilisateurs non autorisés d'accéder aux applications et aux données.
Microsoft possède un accord de longue date avec Citrix afin de faciliter le partage de technologie et de brevets de licence entre Microsoft Terminal Services et Citrix XenApp (initialement Citrix MetaFrame). Dans cet arrangement, Citrix a accès au code source clé pour la plate-forme Windows permettant ainsi à leurs développeurs d'améliorer la sécurité et les performances des plates-formes Terminal Services. Fin décembre 2004 les deux sociétés ont annoncé le renouvellement de cet accord pour 5 ans afin de couvrir les besoins pour Windows Vista.

## Architecture

Le composant serveur du service de terminal (Terminal Server) écoute sur le port réseau TCP 3389 (termdd.sys). Lorsqu'un client RDP se connecte au serveur sur ce port, il se voit attribuer une ID de session unique (SessionID) et se voit associer à une nouvelle console de session (Session 0, clavier, souris et interface utilisateur uniquement). Le sous-système d'ouverture de session (winlogon.exe) et le sous-système graphique GDI sont ensuite initialisés et gèrent ensuite l'opération d'authentification et de présentation de l'interface utilisateur graphique (GUI). Ces binaires sont exécutés dans une nouvelle session plutôt que la session Console. Lors de la création d'une nouvelle session, les pilotes graphique et clavier/souris sont remplacés par des pilotes RDP spécifiques: RdpDD.sys et RdpWD.sys. Le fichier RdpDD.sys correspond au pilote de périphérique et encapsule les opérations de l'interface utilisateur dans un format qui est transmissible via le protocole RDP. RdpWD.sys agit comme le pilote de la souris et du clavier; il perçoit les entrées clavier et souris au travers de la connexion TCP et les présente au serveur comme des entrées clavier/souris. Il permet également la création de tunnels virtuels, qui permet à d'autres périphériques tels que les lecteurs, l'audio, les imprimantes, et les ports COM d'être redirigés (i.e.: le tunnel se substitue à ces périphériques. Le tunnel se connecte au client au travers de la connexion TCP; lorsque le tunnel est accédé pour des données, le client est informé de la requête qui est ensuite transmise au travers de la connexion TCP à l'application. Ce processus est entièrement réalisé par le client et le serveur de terminal avec l'aide du protocole RDP négociant le transfert correctement, et est entièrement transparent pour l'application). Les communications RDP sont chiffrées à l'aide du chiffrement RC4 128-bit. Avec l'arrivée de Windows Server 2003, le service de terminal peut utiliser un schéma de chiffrement compatible FIPS 140.
Une fois qu'un client initie une connexion et est informé du succès de l'invocation de la couche de service de terminal sur le serveur, il charge les périphériques ainsi que les pilotes clavier et souris. Les données de l'interface utilisateur reçues au travers de la connexion RDP sont décodées et retranscrites en Interface Utilisateur tandis que les entrées clavier et souris au niveau du client sont récupérées par le pilote et transmises via RDP au serveur. Il crée également les autres tunnels virtuels et met en place les redirections de périphériques. Les connexions RDP peuvent être chiffrées avec un niveau de chiffrement bas, moyen ou élevé. Avec un chiffrement bas, seuls les tunnels transmettant des données critiques, comme des mots de passe, sont chiffrés. Avec un chiffrement moyen, les paquets de l'Interface Utilisateur sont également chiffrés. Enfin avec le chiffrement élevé, les entrées clavier et souris sont aussi chiffrées.

## Terminal Server

Terminal Server correspond au composant serveur du service de terminal. Il gère les opérations d'authentification des clients et rend les applications disponibles à distance. Il s'occupe également de restreindre les accès clients en fonction du niveau d'accès qui leur est attribué. Le serveur de terminal respecte les stratégies de restriction logicielle en place, comme la limitation d'accès à certains logiciels à un groupe spécifique d'utilisateurs. Les informations de la session distante sont stockées dans un dossier spécifique appelé Session Directory qui est localisé sur le serveur. Les dossiers de session sont utilisés afin de stocker l'état de la connexion distante et peuvent être utilisés pour reprendre une session interrompue. Le serveur de terminal doit également gérer ces dossiers. Les serveurs de terminal peuvent également être utilisés en mode cluster.
Dans Windows Server 2008, le service de terminal a été grandement amélioré. Lors de l'ouverture de session, si l'utilisateur a ouvert une session sur le poste client local avec un compte utilisateur de domaine, alors les mêmes informations d'ouverture de session peuvent être utilisées pour ouvrir la session distante. Cependant cela requiert que Windows Server 2008 soit le système d'exploitation du serveur de terminal et que celui du poste client soit Windows Server 2008 ou Windows Vista. De plus, le serveur de terminal peut fournir l'accès à une application unique plutôt qu'au bureau distant complet, et ce en utilisant une fonctionnalité appelée RemoteApp. L'accès Web au service de terminal (TS Web Access) permet d'accéder à une session de type RemoteApp via un Navigateur web. Windows 2008 inclut également le module de contrôle TS Web Access Web Part qui maintient la liste d'applications de type RemoteApps déployée sur le serveur et maintient également cette liste à jour. Une session d'un serveur de terminal peut également être encapsulée dans un tunnel au travers d'une passerelle via le service Passerelle Terminal Server (TS Gateway). Il permet l'accès au serveur de terminal depuis l'Internet par l'encapsulation du protocole RDP dans un tunnel sécurisé HTTPS. Windows Server 2008 ainsi que Windows Server 2003, y compris Windows Home Server peuvent agir en tant que passerelle Terminal Server. Le serveur de terminal peut également incorporer le gestionnaire de ressources Windows (en) afin d'affiner l'utilisation des ressources par les applications distantes
Le serveur de terminal est géré par le composant enfichable MMC Gestionnaire de Serveur de Terminal (Terminal Server Manager). Il peut être utilisé afin de configurer les prérequis d'ouverture de session ainsi que pour forcer une instance unique de session distante. Il peut également être configuré via une stratégie de sécurité ou bien via WMI. Il n'est cependant pas disponible sur les versions clientes des systèmes d'exploitation où les serveurs sont préconfigurés pour n'autoriser qu'une seule session distante et où les droits de l'utilisateur sont forcés avec aucune modification possible.

## Remote Desktop Connection

La Connexion bureau à distance est l'application cliente (fichier exécutable mstsc.exe pour Microsoft Terminal Services Client en anglais) du serveur de terminal. Elle permet à un utilisateur de se connecter à distance à un serveur sur le réseau exécutant le service de terminal. RDC affiche l'interface du bureau du système distant de la même façon que s'il était accédé localement. Avec la dernière version disponible (version 6.0), si le composant Desktop Experience est activé sur le serveur distant, le visuel des applications sera identique aux applications locales plutôt que celles distantes. Dans ce scénario, les applications distantes vont supporter le thème Aero si Windows Vista est utilisé pour accéder à distance au serveur (en supposant que le système d'exploitation client exécute également le thème Aero).
Le client RDC supporte également le rendu de l'interface utilisateur en couleurs 24 bit, ainsi que la redirection de ressources pour les imprimantes, les ports COM, les disques durs, souris et claviers. Avec la redirection des ressources, les applications distantes peuvent utiliser les ressources de l'ordinateur client. L'audio est également redirigé afin que chaque son produit par l'application distante soit joué par le système client. En plus de l'utilisation standard des comptes de session et mot de passe afin d'autoriser l'accès à une session distante, RDC supporte également les autorisations via une carte à puce (smart card).
Avec la version 6.0 de RDC, la résolution graphique d'une session distante peut être définie de façon indépendante des paramètres du serveur distant. De plus, une session distante peut également être répartie sur plusieurs écrans du système client, et ce indépendamment des paramètres multi-écran du serveur distant. Il favorise également les données de l'interface utilisateur ainsi que les opérations clavier et souris vis-à-vis des opérations d'impressions ou de transfert de fichiers afin de rendre l'application plus réactive. Il redirige également les périphériques plug & play tels que les appareils photos, les lecteurs portables de musique et les scanneurs, afin que les entrées de ces périphériques puissent également être utilisées par les applications distantes. Le presse-papier est également redirigé avec la dernière version du client afin que les applications locales et distantes se partagent le même presse-papier, permettant ainsi aux données d'être copiées et collées entre les applications locales et distantes.
RDC peut également être utilisé pour se connecter à distance à un serveur de média distant (WMC) ; cependant, puisque les flux vidéo WMC ne peuvent pas être transmis via le protocole Remote Desktop Protocol, seules les applications peuvent être accessibles par ce moyen. RDC peut également être utilisé pour se connecter à des ordinateurs qui sont rendus accessibles sur Internet par la passerelle RDP de Windows Home Server.

## RemoteApp

Le mode d'application distante appelé RemoteApp (ou TS RemoteApp) est un mode spécial du serveur de terminal, disponible uniquement avec les connexions distantes RDC en version 6.0 et ultérieures (avec Windows Server 2008 étant le serveur applicatif RemoteApp), où la session distante se connecte à une application spécifique plutôt qu'au bureau Windows entier. L'interface utilisateur de l'application en mode RemoteApp est rendu dans une fenêtre au travers du bureau local, et est géré comme n'importe quelle autre fenêtre locale d'applications. Le résultat final est tel que les applications distantes se comportent fortement comme une application locale. L'opération d'établissement de la session distante ainsi que la redirection des ressources locales vers l'application distante sont transparentes pour l'utilisateur final. Plusieurs applications peuvent être démarrées dans une seule session de type RemoteApp, chacune avec leur propre fenêtre.
Une application de type RemoteApp peut être compilée aussi bien comme un fichier .rdp que distribué via un fichier Windows Installer .msi. Lorsque compilée en fichier .rdp (qui contient l'adresse du serveur distant RemoteApp, le schéma d'authentification à utiliser, et d'autres paramètres), une application de type RemoteApp peut être exécutée en double cliquant sur le fichier. Le fichier fait alors appel au client de Bureau à Distance qui va alors se connecter au serveur de terminal et retourner l'interface utilisateur. L'application de type RemoteApp peut également être compilée dans un fichier Windows Installer, dont l'installation va enregistrer l'application RemoteApp dans le Menu Démarrer ainsi que créer un raccourci pour son exécution. Une application RemoteApp peut également être enregistrée en tant que gestionnaire de type de fichiers et d'URIs. Ouvrir un fichier enregistré avec RemoteApp fera d'abord appel au client Bureau à Distance qui va alors se connecter au serveur de terminal puis ouvrir le fichier. Toute application pouvant être accessible via une connexion Bureau à Distance, peut être déployée en tant qu'une application de type RemoteApp.

## Windows Desktop Sharing

Windows Vista étant désormais disponible, le serveur de terminal inclut également la capacité de partage de bureau client appelé Windows Desktop Sharing. Contrairement au service de terminal qui crée une nouvelle session utilisateur pour chaque connexion RDP, le module Windows Desktop Sharing peut héberger plusieurs sessions distantes dans le même contexte utilisateur que la session cliente ouverte sans avoir à créer de nouvelle connexion, et rend ainsi le bureau ou une sous partie du bureau, disponible au travers du protocole Remote Desktop Protocol. Windows Desktop Sharing peut être utilisé pour partager le bureau en entier, ou bien une partie spécifique, ou encore une application particulière. Windows Desktop Sharing peut également être utilisé pour partager les bureaux sur plusieurs écrans. Lors du partage d'application de façon individuelle (plutôt que le bureau entier), les fenêtres sont gérées (qu'elles soient réduites ou plein écran) indépendamment du serveur au niveau du client.
Cette fonctionnalité n'est disponible que par l'intermédiaire d'une API publique, qui peut être utilisée par n'importe quelle application afin de permettre la fonctionnalité de partage d'écran. L'API Windows Desktop Sharing présente deux objets: le RDPSession pour le partage de session et le RDPViewer pour la visualisation. Plusieurs objets de visualisation peuvent être initiés pour un seul et même objet session. Une visualisation peut être soit une visualisation passive qui ne peut qu'afficher une application telle une capture vidéo, ou une visualisation interactive qui permet d'interagir en temps réel avec l'application distante. L'objet RDPSession contient toutes les applications partagées, représentées par les objets Application, chacune avec son objet Window représentant leur propre fenêtre à l'écran. Des filtres par application isolent la fenêtre d'application et les assemble en objet Window. Une visualisation doit d'abord s'authentifier avant de pouvoir se connecter à une session partagée. Ce processus s'effectue par la génération d'une Invitation utilisant l'objet RDPSession. Il contient un ticket d'authentification et un mot de passe. L'objet est sérialisé et envoyé à la visualisation qui doit alors présenter cette Invitation lors de la connexion.
L'API Windows Desktop Sharing est utilisée par l'espace de rencontre Windows Windows Meeting Space afin de fournir la fonctionnalité de partage d'application avec ses contacts; cependant l'application ne présente pas toutes les fonctionnalités supportées par l'API.

## Note et référence

* Cet article est partiellement ou en totalité issu de l'article intitulé « Remote Desktop Services » (voir la liste des auteurs).
* ↑ (en)« MSTSC », sur thefreedictionary.com, The Free Dictionary (consulté le 16 octobre 2015)