Laboratoire virtuel via RDP
IsThereAnyFreeDesktop a été développé lors des confinements causés par la pandémie, et se veut être une solution à la fois simple, open source et libre de droits pour rendre disponible à distance les postes physiques d’un laboratoire informatique.
Il existe bien entendu de nombreuses autres solutions, comme reproduire cet environnement dans une infrastructure VDI ou DaaS qui gère déjà nativement la disponibilité des postes et l’attribution aléatoire de places dès qu'un usager accède au service. Cependant, l’objectif ici est de rendre disponible à distance une infrastructure déjà existante, à coût nul ou moindre. Néanmoins, IsThereAnyFreeDesktop peut être déployé dans un environnement de postes virtuels ou hybride (postes physiques et virtuels).
Avec la fin du confinement, IsThereAnyFreeDesktop a évolué pour permettre de définir des plages durant lesquelles les postes sont disponibles à distance ou exclusivement en présentiel (ex. : accès à distance désactivé de 8h à 22h en semaine, et disponible 24/7 les fins de semaine).
IsThereAnyFreeDesktop repose sur 2 composantes :
- L’activation du Bureau à distance (RDP) sur les postes du laboratoire.
- Un site web sur lequel est affichée une liste des postes disponibles.
IsThereAnyFreeDesktop repose sur un environnement simple et très courant, c’est-à-dire :
- L’utilisation du langage PHP et d’une base de données MySQL pour le site web affichant la liste des postes.
- Un script Batch de "service" qui s’exécute en tâche de fond au démarrage du poste qui :
- Renseigne périodiquement la base de données du statut du poste (disponible, occupé, ou indisponible).
- Peuple ou dépeuple le groupe local « Utilisateurs du Bureau à distance » avec un groupe du domaine des utilisateurs autorisés à se connecter.
Pour l’installation sur votre serveur :
- Décompressez le contenu du dossier
Serveurdans l’emplacement de votre choix dans la structure de votre site web hébergé sur votre serveur. - Créez un compte utilisateur et une base de données dans MySQL (vous pouvez importer le fichier
INSTALL.sqlpour créer la structure de la table). - Ajoutez dans votre table les noms des postes de travail de votre laboratoire à rendre disponible sur le site web.
- Configurez la ligne de connexion MySQL
$bddet les autres variables disponibles dans le fichierLAB_config.php.
Les paramètres suivants permettent de contrôler la collecte des statistiques :
$enableSessionCollection = true;true: collecte des sessions active (tableIsThereAnyFreeDesktop_sessionsutilisée).false: aucune écriture dans la table de sessions (mode sans collecte statistique).
$anonymousSessionUsername = 'anonymous';- Valeur utilisée quand la collecte est active, mais qu'aucun username n'est transmis par le poste client.
- Configurez les scripts du dossier
Station:set ServerURL(dansIsThereAnyFreeDesktop_service.batetIsThereAnyFreeDesktop_stop.bat) : inscrivez l’URL vers lestatut.phpdu serveur web.set RDPusers(dansIsThereAnyFreeDesktop_service.bat) : le nom du groupe du domaine des utilisateurs autorisés à se connecter à ajouter dans le groupe standardUtilisateurs du Bureau à distance.set SendUsername(dansIsThereAnyFreeDesktop_service.bat) :1(par défaut) : envoie le username au serveur (statut.php).0: n'envoie pas le username (protection de la vie privée côté poste).
set RDPLocalGroup(dansIsThereAnyFreeDesktop_service.bat) : si vous utilisez des postes dans une autre langue que le français, inscrivez le nom du groupe équivalent àUtilisateurs du Bureau à distance.set endRDPTime[i]etset startRDPTime[i](dansIsThereAnyFreeDesktop_service.bat) :- inscrivez l’heure de fin et de début de l’accès à distance pour l’accès exclusif en présentiel dans le format
hhmm, oùhhest en format 24h (ex.2200). Pour les postes disponibles 24/24, mettre la même date (ex. 0000). - Et où
iest le numéro du jour (1=lundi, 2=mardi).
- inscrivez l’heure de fin et de début de l’accès à distance pour l’accès exclusif en présentiel dans le format
- Sur chaque poste :
- Activez le service Bureau à distance.
- Copiez les scripts configurés précédemment dans un dossier des postes (ex.
C:\program files (x86)\IsThereAnyFreeDesktop). - Inscrivez le script Batch de "service" dans le Planificateur de tâche à l’aide du script
_install.bat. - Activez les scripts événementiels via les GPO domaine ou local (
gpedit.msc) suivants :- Si ce n’est déjà fait, désactivez le délai pour l’exécution des scripts.
Configuration de l'ordinateur\Paramètres Windows\Scripts (démarrage/arrêt)\Démarrage: exécuter_IsThereAnyFreeDesktop_startup.bat.Configuration de l'ordinateur\Paramètres Windows\Scripts (démarrage/arrêt)\Arrêt du système: exécuter_IsThereAnyFreeDesktop_shutdown.bat.
Quelques recommandations supplémentaires, mais facultatives :
- Mettez en place un mécanisme pour fermer automatiquement les sessions abandonnées, par exemple avec Lithnet Idle Logoff.
- Mettez en place un mécanisme pour redémarrer les postes éteints (Wake-On-Lan ou planifiez un démarrage automatique par le BIOS sur les appareils HP).
- Configurez le menu Démarrer pour masquer les options
Arrêter,RedémarreretDéconnecter(pour ne laisser que l’option de fermeture de sessionSe déconnecter). Par GPO, ces modifications correspondent aux options suivantes :Configuration de l’ordinateur\Modèles d’administration\Menu Démarrer et barre des tâches\Supprimer et empêcher l’accès aux commandes Arrêter, Redémarrer, Mettre en veille et Mettre en veille prolongée.Configuration de l’ordinateur\Modèles d’administration\Composants Windows\Services Bureau à distance\Hôte de la session Bureau à distance\Environnement de session à distance\Supprimer l’élément « Déconnecter » de la boite de dialogue Arrêt.
Si vous aviez déjà une installation précédente et souhaitez activer/profiter du module de statistiques v4, exécutez les étapes suivantes (en adaptant les noms de la base et des tables si nécessaire).
Si vous utilisez uniquement l'affichage de disponibilité (sans statistiques), le code reste compatible avec une base de données de type v3.x grâce aux garde-fous intégrés.
- Le champ
last_seenaméliore la détection des postes hors ligne (heartbeat). Sans ce champ, l'affichage reste fonctionnel mais avec une détection moins fine.
ALTER TABLE IsThereAnyFreeDesktop
ADD COLUMN last_seen DATETIME NULL AFTER statut,
ADD INDEX idx_postes_last_seen (last_seen);
UPDATE IsThereAnyFreeDesktop
SET last_seen = NOW()
WHERE last_seen IS NULL;Si la table n'existe pas encore, créez-la avec la structure complète ci-dessous (incluant session_type) :
CREATE TABLE IF NOT EXISTS IsThereAnyFreeDesktop_sessions (
id bigint unsigned NOT NULL AUTO_INCREMENT,
poste varchar(64) NOT NULL,
username varchar(128) NOT NULL,
login datetime NOT NULL,
last_seen datetime NOT NULL,
logoff datetime DEFAULT NULL,
session_type enum('console','rdp') NOT NULL DEFAULT 'console',
PRIMARY KEY (id),
KEY idx_sessions_poste (poste),
KEY idx_sessions_username (username),
KEY idx_sessions_login (login),
KEY idx_sessions_logoff (logoff),
KEY idx_sessions_username_login (username, login),
KEY idx_sessions_poste_login (poste, login),
KEY idx_sessions_open (poste, logoff),
KEY idx_sessions_type (session_type)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;Si la table existe déjà (mise à niveau d'une installation antérieure), ajoutez le champ et son index :
ALTER TABLE IsThereAnyFreeDesktop_sessions
ADD COLUMN session_type enum('console','rdp') NOT NULL DEFAULT 'console' AFTER logoff,
ADD INDEX idx_sessions_type (session_type);Redéployez aussi IsThereAnyFreeDesktop_service.bat sur les postes afin d'utiliser les nouveaux paramètres client, dont l'expédition du username.
Dans le script, le paramètre suivant contrôle l'envoi du username :
set SendUsername=1: envoi du username au serveur (statut.php).set SendUsername=0: aucun username envoyé (mode vie privée).
Si $enableSessionCollection = false (dans LAB_config.php), la table IsThereAnyFreeDesktop_sessions n'est pas utilisée.
Cette étape consiste à vous assurer que votre réseau permettra à vos utilisateurs de rejoindre les postes de travail dans votre intranet, par exemple à l’aide d’une connexion sécurisée VPN.
Vous pouvez vous inspirer de la documentation à l'intention de nos utilisateurs.
Ce projet vous a été utile et vous souhaitez nous remercier? Contribuez aux Bourses aux étudiants de l'EBSI ou au fonds des Amis de l'EBSI. Merci à l’avance!
Merci aux différentes personnes qui ont apporté des corrections de bogues et idées à intégrer au projet : Simon Lefrançois (FAS, géographie), Djamel Hadjeres (Faculté de médecine), etc.
