# Machines virtuelles distantes

## Affichage distant (VRDP support)

VirtualBox peut afficher les machines virtuelles à distance, ce qui signifie qu'une machine virtuelle peut s'exécuter sur un ordinateur alors que la machine sera affichée sur un deuxième ordinateur, et la machine sera contrôlée également à partir de là, comme si la machine virtuelle fonctionnait sur ce deuxième ordinateur.

Pour une flexibilité maximum, à partir de VirtualBox 4.0, VirtualBox implémente l'affichage distant d'une machine par une interface d'extension générique, le VirtualBox Remote Desktop Extension (VRDE). Le paquet libre de base VirtualBox ne fournit pas cette interface, tandis que les implémentations peuvent être offerts par des tiers avec les paquets d'extension de VirtualBox qui doivent être installés séparément du paquet. Voir intro-installing pour plus d'informations.

Oracle fournit un support pour le VirtualBox Remote Display Protocol (VRDP) dans ce paquet d'extension de VirtualBox. Quand on installe ce paquet, les versions de VirtualBox et 4.0 et supérieur supportent VRDP de la même façon que les versions binaires (non libre)) de VirtualBox avant 4.0.

VRDP est une extension rétro-compatible au Remote Desktop Protocol (RDP) de Microsoft. Dès lors, vous pouvez utiliser n'importe quel client RDP standard pour contrôler la VM distante.

Même quand l'extension est installée, le serveur VRDP est désactivé par défaut. On peut l'activer facilement pour chaque VM, soit dans le gestionnaire VirtualBox des paramètres d'"Affichage" (voir settings-display), soit avec )s `VBoxManage`:

    VBoxManage modifyvm "nom VM" --vrde on

Si vous utilisez `VBoxHeadless` (décrit plus loin en détails), le support VRDP sera automatiquement activé puisque VBoxHeadless n'a aucun autre moyen de sortie.

Par défaut, le serveur VRDP utilise le port TCP `3389`. Vous devrez modifier le port par défaut si vous exécutez plus d'un serveur VRDP, vu que le port ne peut être utilisé que par un serveur à la fois. Il se pourrait aussi que vous deviez le modifier sur les hôtes Windows car le port par défaut pourrait être déjà utilisé par le serveur RDP intégré à Windows lui-même. Les ports 5000 à 5050 sont le plus souvent inusités et pourraient être un bon choix.

Vous pouvez modifier le port soit dans les paramètres "Affichage" de l'interface graphique, soit via l'option `--vrdeport` de la commande `VBoxManage modifyvm`. Vous pouvez indiquer une liste séparée par des virgules de ports ou de plages de ports. Utilisez un tiret entre deux numéros de ports pour indiquer une plage. Le serveur VRDP s'appuiera sur un des ports disponibles au sein de la liste spécifiée. Par exemple, `VBoxManage modifyvm "nom VM" --vrdeport 5000,5010-5012` configurera le serveur pour s'appuyer sur un des ports parmi le 5000, 5010, 5011 ou 5012. Voir vboxmanage-modifyvm-vrde pour des détails.

Vous pouvez savoir le port utilisé au final par une VM en fonction avec la commande `VBoxManage showvminfo`, vous pouvez aussi le voir dans l'interface graphique sous l'onglet "En cours d'exécution" de la "Boîte de dialogue d'informations sur la session", accessible depuis le menu "Machine" de la fenêtre de la VM.

Le support d'IPv6 a été implémenté dans VirtualBox 4.3. Si l'OS hôte supporte l'IPv6, le serveur VRDP écoutera automatiquement les connexions IPv6 en plus de celles IPv4.

### Visualiseurs RDP tiers classiques

Comme VRDP est rétro-compatible avec RDP, vous pouvez utiliser n'importe quel visualiseur RDP standard pour vous connecter à une machine virtuelle distante (des exemples figurent ci-dessous). Pour que cela fonctionne, vous devez spécifier l'adresse IP de votre système hôte (pas celle de la machine virtuelle !) l'adresse du serveur auquel se connecter, ainsi que le numéro du port qu'utilise le serveur RDP.

Voici des exemples de visualiseurs RDP les plus courants :

- Sur Windows, vous pouvez utiliser le Microsoft Terminal Services Connector (`mstsc.exe`) inclu dans Windows. Vous pouvez le lancer depuis la boîte de dialogue "Exécuter" (appuyez sur la touche Windows et "R") en tapant "mstsc". Vous pouvez également le trouver dans "Démarrer" -> "Tous les Programmes" -> "Accessoires" -> "Connexion bureau distant". Si vous utilisez la boîte de dialogue "Exécuter", vous pouvez y entrer des options directement :

      mstsc 1.2.3.4:3389

  Remplacez `1.2.3.4` par l'adresse IP de l'hôte et `3389` par un autre port si nécessaire.

  Il faut entourer les adresses IPv6 de crochets pour spécifier un port. Par exemple, `mstsc [fe80::1:2:3:4]:3389`

  Lors d'une connexion à localhost pour tester la connexion, les adresses `localhost` et `127.0.0.1` pourraient ne pas fonctionner en utilisant `mstsc.exe`. L'adresse `127.0.0.2[:3389]` doit être utilisée à la place.

- Sur les autres systèmes, vous pouvez utiliser le programme libre standard `rdesktop`. Celui-ci est inclu avec la plupart des distributions Linux, mais VirtualBox est fourni avec une variante modifiée de rdesktop pour un support de l'USB à distance (voir usb-over-rdp ci-dessous).

  Avec rdesktop, utilisez une ligne telle que celle-ci :

      rdesktop -a 16 -N 1.2.3.4:3389

  Comme indiqué pour le visualiseur Microsoft ci-dessus, remplacez `1.2.3.4` par l'adresse IP de l'hôte et `3389` par un autre port si nécessaire. L'option `-a 16` demande que la résolution soit de 16 bits par pixel, ce qui est recommandé. (Pour de meilleures performances, après l'installation du système d'exploitation invité, vous devriez définir sa profondeur d'affichage des couleurs à la même valeur). L'option `-N` permet d'utiliser les touches du pavé numérique.

- Si vous lancez le bureau KDE, vous pourriez préférer `krdc`, le visualiseur RDP de KDE. La ligne de commande ressemblerait à ceci :

      krdc rdp://1.2.3.4:3389

  De nouveau, remplacez `1.2.3.4` par l'adresse IP de l'hôte et `3389` par un port différent si nécessaire. Le champ "rdp://" est requis avec krdc pour qu'il passe en mode RDP.

- Avec les clients Sun Ray thin, vous pouvez utiliser `uttsc`, qui fait partie du paquet Sun Ray Windows Connector. Voir la documentation correspondante pour des détails.

### VBoxHeadless, le serveur de bureau distant

Si toutes les VM lancées dans le gestionnaire VirtualBox sont capables de lancer des machines virtuelles à distance, ce n'est pas pratique de lancer l'interface graphique full-fledged si vous ne voulez jamais avoir de VMs affichées en local au premier plan. En particulier, si vous lancez un serveur matériel dont le seul objectif est d'héberger des VMs et où toutes les VMs sont supposées se lancer à distance via VRDP, il est inutile d'avoir une interface graphique quelconque sur le serveur -- surtout que sur un hôte Linux ou Solaris, le gestionnaire VirtualBox est fourni avec les dépendances des bibliothèques Qt et SDL. C'est un inconvénient si ne voulez pas du tout avoir de système X Window sur votre serveur.

VirtualBox est donc fourni avec une autre interface appelée `VBoxHeadless`, qui ne produit aucune sortie visible sur l'hôte, mais qui produit des données VRDP. Cette interface n'a aucune dépendance du système X Window sur Linux et des hôtes Solaris.

Avant VirtualBox 1.6, le serveur headless s'appelait `VBoxVRDP`. Toujours pour des raisons de rétro-compatibilité, l'installation de VirtualBox installe toujours un exécutable avec ce nom.

Pour démarrer une machine virtuelle avec `VBoxHeadless`, vous avez trois options :

- Vous pouvez utiliser

      VBoxManage startvm "nom VM" --type headless

  L'option supplémentaire `--type` amène VirtualBox à utiliser `VBoxHeadless` en tant qu'interface avec le moteur de virtualisation interne plutôt que l'interface Qt.

- Une alternative est d'utiliser `VBoxHeadless` directement, comme suit :

      VBoxHeadless --startvm <uuid|name>

  Cette manière de démarrer la VM aide au dépannage des problèmes signalés par `VBoxManage startvm ...` car vous pouvez voir parfois des messages d'erreur plus détaillés, surtout pour les échecs imtervenant avant que l'exécution de la VM ne commence. Dans des situations normales, on préfère `VBoxManage startvm` car il lance la VM directement comme tâche de fond, ce qui doit se faire explicitement lors du démarrage direct de `VBoxHeadless`.

- L'autre alternative est de démarrer `VBoxHeadless` à partir de l'interface graphique du gestionnaire de VirtualBox, en maintenant appuyée la touche Majuscule au démarrage de la machine.

Remarquez que quand vous utilisez `VBoxHeadless` pour démarrer une VM, comme le serveur headless n'a aucun autre moyen d'affichage, le serveur VRDP sera toujours activé, indépendamment du fait que vous ayez activé le serveur VRDP dans les paramètres de la VM ou pas. Si vous n'en voulez pas (par exemple parce que vous voulez accéder à la VM via `ssh` only), démarrez la VM comme ceci :

    VBoxHeadless --startvm <uuid|name> --vrde off

Pour activer le serveur VRDP en fonction de la configuration de la VM, comme le feraient les autres interfaces, utilisez ceci :

    VBoxHeadless --startvm <uuid|name> --vrde config

Si vous démarrez la VM avec `VBoxManage startvm ...`, les paramètres de configuration de la VM sont toujours utilisés.

### Pas à pas : créer une machine virtuelle sur un serveur headless

Les instructions suivantes peuvent vous donner une idée de la façon de créer une machine virtuelle sur un serveur headless via une connexion réseau. Nous allons créer une machine virtuelle, établir une connexion RDP et installer un système d'exploitation invité -- tout ceci sans devoir toucher au serveur headless. Tout ce dont vous avez besoin est ce qui suit :

1. VirtualBox sur une machine serveur avec un système d'exploitation hôte supporté. La pack d'extension de VirtualBox du serveur VRDP doit être installé (voir la section précédente). Pour l'exemple suivant, nous supposerons un serveur Linux.

2. Un fichier ISO accessible depuis le serveur, contenant les données d'installation du système invité pour installer (nous supposons que c'est Windows XP dans l'exemple suivant).

3. Une connexion en terminal à l'hôte par lequel vous pouvez accéder à une ligne de commande (par exemple via `ssh`).

4. Un visualiseur RDP sur le client distant ; voir rdp-viewers ci-dessus pour des exemples.

Remarquez encore que sur la machine serveur, comme nous n'allons utiliser que le serveur headless, ni Qt ni SDL ni le système X Window ne seront nécessaires.

1. Sur le serveur headless, créez une nouvelle machine virtuelle :

       VBoxManage createvm --name "Windows XP" --ostype WindowsXP --register

   Remarquez que si vous ne spécifiez pas `--register`, vous devrez utiliser manuellement la commande `registervm` plus tard.

   Remarquez aussi que vous n'avez pas besoin de spécifier `--ostype`, mais en le faisant, cela sélectionne des valeurs par défaut apropriées pour certains paramètres de la VM, par exemple la taille de la RAM et le type de périphérique réseau virtuel. Pour avoir la liste complète des systèmes d'exploitation supportés, vous pouvez utiliser

       VBoxManage list ostypes

2. Assurez-vous que les paramètres de la VM sont adaptés au système d'exploitation invité que nous allons installer. Par exemple :

       VBoxManage modifyvm "Windows XP" --memory 256 --acpi on --boot1 dvd --nic1 nat

3. Créez un disque dur virtuel pour la VM (dans ce cas, 10Go de taille) :

       VBoxManage createhd --filename "WinXP.vdi" --size 10000

4. Ajoutez un contrôleur IDE à la nouvelle VM :

       VBoxManage storagectl "Windows XP" --name "IDE Controller"
             --add ide --controller PIIX4

5. Mettez le fichier VDI créé ci-dessus comme premier disque dur virtuel de la nouvelle VM :

       VBoxManage storageattach "Windows XP" --storagectl "IDE Controller"
             --port 0 --device 0 --type hdd --medium "WinXP.vdi"

6. Attachez le fichier ISO contenant l'installeur du système d'exploitation que vous voudrez installer plus tard sur la machine virtuelle, pour que la machine puisse démarrer dessus :

       VBoxManage storageattach "Windows XP" --storagectl "IDE Controller"
             --port 0 --device 1 --type dvddrive --medium /full/path/to/iso.iso

7. Démarrez la machine virtuelle en utilisant VBoxHeadless:

       VBoxHeadless --startvm "Windows XP"

   Si tout s'est bien passé, vous devriez voir un message de copyright. Si vous êtes renvoyé en ligne de commande, quelque chose n'a pas fonctionné.

8. Sur la machine client, ouvrez le visualiseur RDP et essayez de vous connecter au serveur (voir rdp-viewers ci-dessus pour voir comment utiliser les divers visualiseurs RDP classiques).

   Vous devriez voir maintenant le processus d'installation de votre système d'exploitation invité, à distance dans le visualiseur RDP.

### USB distant

Une fonction très spéciale du support VRDP de VirtualBox est qu'il supporte les périphériques USB distants également via le réseau. C'est-à-dire que l'invité de VirtualBox en fonction sur l'ordinateur peut accéder à des périphériques USB de l'ordinateur distant sur lequel sont affichées les données VRDP de la même manière que des périphériques USB connectés à l'hôte actuel. Cela permet d'exécuter des machines virtuelles sur un hôte VirtualBox qui agit comme serveur, où un client peut se connecter de n'importe où avec simplement un adaptateur réseau et un dispositif d'affichage capable de lancer un visualiseur RDP. Quand on branche des périphériques USB dans le client, le serveur VirtualBox distant peut y accéder.

Pour ces périphériques USB distants, les mêmes règles de filtres s'appliquent, comme pour d'autres périphériques USB, comme décrit au settings-usb. Tout ce que vous devez faire est de spécifier "Remote" (ou "Any") en définissant ces règles.

L'accès à des périphériques USB n'est possible que si le client RDP supporte cette extension. Sur les hôtes Linux et Solaris, l'installation de VirtualBox fournit un client VRDP convenable appelé `rdesktop-vrdp`. Les versions récentes de `uttsc`, un client taillé pour être utilisé avec des clients Sun Ray thin et qui supporte l'accès aux périphériques USB distants. Les clients RDP pour d'autres plateformes seront fournis dans de futures versions de VirtualBox.

Pour rendre disponible un périphérique USB distant pour une VM, vous devriez démarrer `rdesktop-vrdp` comme suit :

    rdesktop-vrdp -r usb -a 16 -N my.host.address

Merci de vous reporter au ts_usb-linux pour des détails supplémentaires sur la manière de régler correctement les droits des périphériques USB. De plus, il est conseillé de désactiver le chargement automatique d'un pilote de l'hôte, depuis l'hôte distant qui serait lu sur des périphériques USB, pour vous assurer que les périphériques seront accessibles au client RDP. Si vous avez bien fait le paramétrage sur l'hôte distant, les événements de branchement/débranchement sont visibles dans le fichier VBox.log de la VM.

### Authentification RDP

Pour chaque machine virtuelle accessible à distance via RDP, vous pouvez déterminer individuellement si les connexions du client sont authentifiées et comment. Pour cela, utilisez la commande `VBoxManage modifyvm` avec l'option `--vrdeauthtype` ; voir vboxmanage-modifyvm pour une présentation générale. Trois méthodes d'authentification sont disponibles :

- La méthode "null" signifie qu'il n'y a pas d'authentification du tout ; n'importe quel client peut se connecter au serveur VRDP et, ainsi, à la machine virtuelle. C'est, bien sûr, très peu sécurisé et cela ne doit être recommandé que sur des réseaux privés.

- La méthode "external" fournit une authentification externe via une bibliothèque d'authentification spéciale. VirtualBox inclut deux bibliothèques d'authentification :

  1. La bibliothèque d'authentification par défaut, `VBoxAuth`, authentifie en fonction des droits de l'utilisateur sur l'hôte. Selon la plateforme hôte, cela signifie :

     - Sur les hôtes Linux, `VBoxAuth.so` authentifie les utilisateurs à partir du système PAM de l'hôte.

     - Sur les hôtes Windows, `VBoxAuth.dll` authentifie les utilisateurs à partir du système WinLogon de l'hôte.

     - Sur les hôtes Mac OS X, `VBoxAuth.dylib` authentifie les utilisateurs à partir du service répertoire de l'hôte.

       Le support pour Mac OS X a été ajouté dans la version 3.2.

     En d'autres termes, la méthode "external" par défaut réalise l'authentification par les comptes utilisateurs existant sur le système hôte. Tout utilisateur ayant des autorisations d'authentification valides est accepté, c'est-à-dire que le nom d'utilisateur n'a pas besoin de correspondre à l'utilisateur qui lance la VM.

  2. Une bibliothèque supplémentaire qui s'appelle `VBoxAuthSimple` réalise l'authentification à partir des autorisations configurées dans la section "extradata" du fichier XML des paramètres d'une machine virtuelle. C'est probablement la méthode la plus simple pour s'authentifier, qui ne dépend pas d'un invité en fonction et supporté (voir ci-dessous). Les étapes suivantes sont nécessaires :

     1. Activer `VBoxAuthSimple` avec la commande suivante :

            VBoxManage setproperty vrdeauthlibrary "VBoxAuthSimple"

     2. Pour activer la bibliothèque pour une VM en particulier, vous devez passer en authentification externe :

            VBoxManage modifyvm "nom VM" --vrdeauthtype external

        Remplacez `"nom VM"` par le nom ou l'UUID de la VM.

     3. Vous devrez alors configurer les utilisateurs et les mots de passe en écrivant ces éléments dans les extradata de la machine. Comme le fichier XML des paramètres de la machine, dans lequel il faut écrire le mot de passe à la section "extradata", est un fichier en texte brut, VirtualBox utilise le hachage pour chiffrer les mots de passe. Il faut utiliser la commande suivante :

            VBoxManage setextradata "nom VM" "VBoxAuthSimple/users/<utilisateur>" <hash>

        Remplacez `<vm>` par le nom ou l'UUID de la VM, `<utilisateur>` par le nom d'utilisateur qui devrait être autorisé à se connecter et `<hash>` par le mot de passe chiffré. Par exemple, pour avoir la valeur hachée du mot de passe "secret", vous pouvez utiliser la commande suivante :

            VBoxManage internalcommands passwordhash "secret"

        Ceci affichera

            2bb80d537b1da3e38bd30361aa855686bde0eacd7162fef6a25fe97bf527a25b

        Vous pouvez alors utiliser VBoxManage setextradata pour stocker cette valeur dans la section "extradata" de la machine.

        Un exemple des deux ensemble, pour définir le mot de passe de l'utilisateur "john" sur la machine "Ma VM" en "secret", utilisez cette commande :

            VBoxManage setextradata "Ma VM" "VBoxAuthSimple/users/john"
                2bb80d537b1da3e38bd30361aa855686bde0eacd7162fef6a25fe97bf527a25b

- Enfin, la méthode d'authentification "guest" réalise l'authentification par un composant spécial fourni avec les suppléments invité ; il s'en suit que l'authentification ne s'effectue pas sur l'hôte mais via les comptes utilisateurs de l'invité.

  Cette méthode est actuellement en test et pas encore supportée.

Outre les méthodes décrites ci-dessus, vous pouvez remplacer la méthode d'authentification "external" par défaut par n'importe quel autre module. Pour cela, VirtualBox offre une interface claire qui vous permet d'écrire votre propre module d'authentification. Ceci est décrit en détails dans le manuel de référence du Kit de développement logiciel de VirtualBox ; merci de voir VirtualBoxAPI pour des détails.

### Chiffrement RDP

Le chiffrement du flux de données des fonctions RDP se base sur le chiffrage symétrique RC4 (avec des clés jusqu'à 128bit). Les clés RC4 sont remplacées à intervalles réguliers (tous les 4096 paquets).

RDP fournit différentes méthodes d'authentification :

1. Historiquement, on utilisait l'authentification RDP4, avec laquelle le client RDP ne réalise aucun contrôle pour vérifier l'identité du serveur auquel il se connecte. Comme on peut obtenir les autorisations de l'utilisateur en utilisant une attaque "man in the middle" (MITM) (personne initiée), l'authentification RDP4 n'est pas sécurisée et vous ne devriez en général pas l'utiliser.

2. L'authentification RDP5.1 utilise un certificat serveur pour lequel le client possède la clé publique. De cette façon, vous avez la garantie que le serveur possède la clé privée correspondante. Cependant, comme cette clé privée codée en dur a été publiée il y a quelques années, l'authentification RDP5.1 n'est pas sécurisée.

3. L'authentification RDP5.2 utilise la sécurité RDP améliorée, ce qui veut dire qu'un protocole de sécurité externe est utilisé pour sécuriser la connexion. RDP4 et RDP5.1 utilisent la sécurité RDP Standard. Le serveur VRDP supporte la sécurité renforcée RDP avec le protocole TLS et, faisant partie du handshake TLS, il envoie le certificat du serveur au client.

   La propriété VRDE `Security/Method` définit la méthode de sécurité souhaitée qui est utilisée pour une connexion. Les valeurs valides sont :

   - `Negotiate` - les connexions sécurisées améliorées (TLS) et RDP standards sont autorisées. La méthode de sécurité se négocie avec le client. C'est le réglage par défaut.

   - `RDP` - seule la sécurité QDP Standard est acceptée.

   - `TLS` - seule la sécurité RDP améliorée est acceptée. Le client doit supporter TLS.

   Par exemple la commande suivante autorise un client à utiliser une connexion sécurisée soit par RDP Standard, soit par RDP améliorée :

       vboxmanage modifyvm "nom VM" --vrdeproperty "Security/Method=negotiate"

   Si la propriété `Security/Method` est réglée sur `Negotiate` ou `TLS`, le protocole TLS sera automatiquement utilisé par le serveur si le client supporte TLS. Cependant, pour utiliser TLS, le serveur doit posséder le certificat du serveur, la clé privée du serveur et l'autorité du certificat (Certificate Authority (CA)). L'exemple suivant montre comment générer un certificat de serveur.

   1. Créez un certificat CA auto-signé :

          openssl req -new -x509 -days 365 -extensions v3_ca \
            -keyout ca_key_private.pem -out ca_cert.pem

   2. Générez une clé privée du serveur et une demande de signature :

          openssl genrsa -out server_key_private.pem
          openssl req -new -key server_key_private.pem -out server_req.pem

   3. Générez le certificat du serveur :

          openssl x509 -req -days 365 -in server_req.pem \
            -CA ca_cert.pem -CAkey ca_key_private.pem -set_serial 01 -out server_cert.pem

   Le serveur doit être configuré pour accéder aux fichiers requis :

       vboxmanage modifyvm "nom VM" \
         --vrdeproperty "Security/CACertificate=path/ca_cert.pem"

       vboxmanage modifyvm "nom VM" \
         --vrdeproperty "Security/ServerCertificate=path/server_cert.pem"

       vboxmanage modifyvm "nom VM" \
         --vrdeproperty "Security/ServerPrivateKey=path/server_key_private.pem"

Comme le client qui se connecte au serveur détermine le type de chiffrement qui sera utilisé, avec rdesktop, le visualiseur RDP de Linux, utilisez les options `-4` ou `-5`.

### Connexions multiples au serveur VRDP

Le serveur VRDP de VirtualBox supporte plusieurs connexions simultanées à une VM en fonction à partir de différents clients. Tous les clients connectés voient la même sortie d'écran et partagent le pointeur de souris et le focus du clavier. Cela revient à ce que plusieurs personnes utilisent le même ordinateur en même temps, chacun leur tour devant le clavier.

La commande suivante active le mode connexions multiples :

    VBoxManage modifyvm "nom VM" --vrdemulticon on

### Avoir plusieurs moniteurs distants

Pour accéder à deux ou plusieurs moniteurs de VM distants, vous devez activer le mode multiconnexion VRDP (voir la vrde-multiconnection).

Le client RDP peut sélectionner le numéro du moniteur virtuel auquel se connecter en utilisant le paramètre d'identification `domain` (`-d`). Si le paramètre se termine par `@` suivi d'un numéro, VirtualBox interprète ce numéro comme l'index des écrans. On sélectionne l'écran invité primaire avec `@1`, le premier écran secondaire avec `@2`, etc.

Le client Microsoft RDP6 ne pous permet pas de sécifier un nom de domaine distinct. Utilisez plutôt `domaine\nom_utilisateur` dans le champ `Nom d'utilisateur :` -- par exemple, `@2\name`. `nom` doit être renseigné et il doit être le nom utilisé pour vous identifier si le serveur VRDP est configuré pour demander une autorisation. Sinon, vous pouvez utiliser n'importe quel texte comme nom d'utilisateur.

### Redirection graphique VRDP

À partir de VirtualBox 3.2, le serveur VRDP peut rediriger les flux graphiques de l'hôte vers le client RDP. Les frames graphiques sont compressés en utilisant l'algorithme JPEG, ce qui permet un ratio de compression plus fort que les méthodes de compression bitmap RDP standards. Il est possible d'augmenter le ratio de compression en diminuant la qualité de l'image.

Le serveur VRDP détecte automatiquement les flux vidéos dans un invité au fur et à mesure que les zones rectangulaires se mettent à jour fréquemment. Il s'en suit que cette méthode fonctionne avec n'importe quel système d'exploitation invité, sans devoir installer de logiciels supplémentaires dans l'invité ; en particulier, les suppléments invité ne sont pas requis.

Par contre, côté client, seul le client de connexion Connexion bureau à distance de Windows 7 supporte actuellement cette fonctionnalité. Si un client ne supporte pas la redirection graphique, le serveur VRDP se rabat sur le rafraîchissement régulier des bitmap.

La commande suivante active la redirection graphique :

    VBoxManage modifyvm "nom VM" --vrdevideochannel on

La qualité de l'image se définit par une valeur entre 10 et 100 pour cent, ce qui représente un niveau de compression JPEG (où les nombres les plus bas signifient une qualité plus faibles mais une compression plus forte). Vous pouvez modifier la qualité en utilisant la commande suivante :

    VBoxManage modifyvm "nom VM" --vrdevideochannelquality 75

### Personnalisation du VRDP

Avec VirtualBox 4.0, il est possible de désactiver l'affichage, l'entrée souris et clavier, le son, l'USB distant ou le presse-papier, de façon individuelle dans le serveur VRDP.

Les commandes suivantes modifient les paramètres correspondant du serveur :

    VBoxManage modifyvm "nom VM" --vrdeproperty Client/DisableDisplay=1
    VBoxManage modifyvm "nom VM" --vrdeproperty Client/DisableInput=1
    VBoxManage modifyvm "nom VM" --vrdeproperty Client/DisableUSB=1
    VBoxManage modifyvm "nom VM" --vrdeproperty Client/DisableAudio=1
    VBoxManage modifyvm "nom VM" --vrdeproperty Client/DisableClipboard=1
    VBoxManage modifyvm "nom VM" --vrdeproperty Client/DisableUpstreamAudio=1

Pour réactiver une fonction, utilisez une commande identique sans l'argument 1. Par example :

    VBoxManage modifyvm "nom VM" --vrdeproperty Client/DisableDisplay=

Ces propriétés ont été ajoutées avec VirtualBox 3.2.10. Cependant, dans la série 3.2.x, il était nécessaire d'utiliser les commandes suivantes pour modifier les paramètres :

    VBoxManage setextradata "nom VM" "VRDP/Feature/Client/DisableDisplay" 1
    VBoxManage setextradata "nom VM" "VRDP/Feature/Client/DisableInput" 1
    VBoxManage setextradata "nom VM" "VRDP/Feature/Client/DisableUSB" 1
    VBoxManage setextradata "nom VM" "VRDP/Feature/Client/DisableAudio" 1
    VBoxManage setextradata "nom VM" "VRDP/Feature/Client/DisableClipboard" 1

Pour réactiver une fonction, utilisez une commande identique sans l'argument 1. Par exemple :

    VBoxManage setextradata "nom VM" "VRDP/Feature/Client/DisableDisplay"

## Téléportation

À partir de la version 3.1, VirtualBox supporte la "téléportation" -- à savoir qu'il peut déplacer une machine sur un réseau d'un hôte VirtualBox à l'autre, pendant que la machine est en fonction. Cela fonctionne indépendamment du système d'exploitation hôte : vous pouvez téléporter des machines virtuelles entre, par exemple, des hôtes Solaris et Mac.

La téléportation exige qu'une machine soit en fonction sur un hôte, qu'on appelle alors la "source". L'hôte sur lequel la machine virtuelle sera téléportée s'appellera alors la "cible" ; la machine sur la cible est alors configurée pour attendre que la source la contacte. L'état en fonction de la machine sera transféré de la source à la cible en un temps nimimum.

La téléportation est possible sur n'importe quel réseau TCP/IP ; la source et la cible n'ont besoin que de s'entendre sur un port TCP/IP spécifié dans les paramètres de téléportation.

Cependant, pour l'instant, il y a quelques prérequis pour que cela fonctionne :

1. Sur l'hôte cible, vous devez configurer une machine virtuelle dans VirtualBox avec exactement les mêmes paramètres matériels que la machine sur la source que vous voulez téléporter. Cela ne s'applique pas aux paramètres purement descriptifs tels que le nom de la VM, mais bien sûr, pour que la téléportation fonctionne, la machine cible doit avoir la même quantité de mémoire et les autres paramètres matériels. Sans cela, la téléportation échouera avec un message d'erreur.

2. Les deux machines virtuelles sur la source et la cible doivent partager le même stockage (images de disques durs et de lecteur amovible et CD/DVD). Cel signifie qu'elles utilisent soit la même cible iSCSI, soit le stockage se trouve quelque part sur le réseau et les deux hôtes y ont accès via NFS ou SMB/CIFS.

   Cela veut dire aussi que ni la machine source ni la machine cible ne peuvent avoir d'instantanés.

Puis, suivez les étapes suivantes :

1. Sur l'hôte cible, configurez la machine virtuelle pour attendre qu'une demande de téléportation arrive quand elle sera démarrée, plutôt que d'essayer de démarrer réellement la machine. Cela se fait avec la commande VBoxManage suivante :

       VBoxManage modifyvm <nomvmcible> --teleporter on --teleporterport <port>

   où `<nomvmcible>` est le nom de la machine virtuelle de l'hôte cible et `<port>` est un numéro de port TCP/IP à utiliser sur les hôtes source et cible. Par exemple, utilisez le 6000. Pour les détails, voir vboxmanage-modifyvm-teleport.

2. Démarrez la VM sur l'hôte cible. Vous verrez qu'au lieu de démarrer, elle affichera une boîte de dialogue de progression indiquant qu'elle attend une demande de téléportation.

3. Démarrez la machine sur l'hôte source comme d'habitude. Quand elle est en fonction et quand vous voulez la téléporter, lancez la commande suivante sur l'hôte source :

       VBoxManage controlvm <nomvmsource> teleport --host <hôtecible> --port <port>

   où `<nomvmsource>` est le nom de la machine (irtuelle sur l'hôte source (la machine actuellement en fonction) et `<hôtecible>` est le nom ou l'IP de l'hôte cible où une demande de téléportation par la machine est attendue, et `<port>` doit être le même numéro que celui spécifié dans la commande sur l'hôte cible. Pour les détails, voir vboxmanage-controlvm.

Pour tester, vous pouvez aussi téléporter des machines sur le même hôte ; dans ce cas, utilisez "localhost" comme nom d'hôte sur l'hôte source et cible.

Dans de rares cas, si les processeurs de la source et de la cible sont très différents, la téléportation peut échouer avec un message d'erreur ou la cible peut planter. Cela peut arriver surtout si la VM exécute des logiciels très optimisés pour fonctionner sur un processeur particulier sans vérifier correctement que certaines fonctions du processeur sont bien présentes. VirtualBox filtre les capacités du processeur présenté au système d'exploitation invité. Les utilisateurs avancés peuvent essayer de restreindre les possibilités de ces processeurs virtuels avec la commande `VBoxManage --modifyvm --cpuid` ; voir vboxmanage-modifyvm-teleport.