Aller au contenu

VirtualBox : exécution headless

Le mode headless démarre la machine sans fenêtre : adapté à un serveur. Les exemples utilisent la machine srv1.

Fenêtre de terminal
VBoxManage startvm srv1 --type headless
VBoxManage list runningvms

--type headless lance la machine en arrière-plan ; --type gui (poste de travail) ouvre une fenêtre ; --type separate démarre un processus distinct pouvant être rattaché à une interface plus tard.

Fenêtre de terminal
VBoxManage controlvm srv1 acpipowerbutton # arrêt propre (comme le bouton d'arrêt)
VBoxManage controlvm srv1 poweroff # coupure brutale (comme un débranchement)
VBoxManage controlvm srv1 savestate # enregistre l'état puis arrête
VBoxManage controlvm srv1 pause
VBoxManage controlvm srv1 resume
VBoxManage controlvm srv1 reset # redémarrage brutal

Attendre l’arrêt effectif :

Fenêtre de terminal
VBoxManage controlvm srv1 acpipowerbutton
while VBoxManage list runningvms | grep -q '"srv1"'; do sleep 2; done
echo "arrêtée"

Avec l’Extension Pack, VirtualBox fournit un serveur RDP intégré pour la console de la machine (utile pour l’installation ou en cas de panne réseau).

Fenêtre de terminal
VBoxManage modifyvm srv1 --vrde on --vrde-port 3390
VBoxManage modifyvm srv1 --vrde-address 127.0.0.1
Option Rôle
--vrde on Active le serveur RDP de la console
--vrde-port 3390 Port d’écoute (chaque machine a besoin d’un port différent)
--vrde-address 127.0.0.1 Écoute en local seulement

Depuis le poste d’administration, atteindre ce port par un tunnel SSH (voir SSH : tunnels) :

Fenêtre de terminal
ssh -N -L 3390:127.0.0.1:3390 utilisateur@hote.exemple.com

puis ouvrir un client RDP (xfreerdp, Remmina, Connexion Bureau à distance) sur 127.0.0.1:3390.

Une alternative pour les serveurs : se connecter à la machine invitée par SSH (voir ci-dessous) ; la console VRDE ne sert alors qu’en secours.

Avec un réseau NAT et une redirection de port (voir Réseau) :

Fenêtre de terminal
ssh -p 2222 admin@127.0.0.1

Avec les Guest Additions installées dans l’invité, l’adresse IP est lisible depuis l’hôte :

Fenêtre de terminal
VBoxManage guestproperty get srv1 "/VirtualBox/GuestInfo/Net/0/V4/IP"
VBoxManage guestproperty enumerate srv1 | grep -i net

Installer les Guest Additions dans un invité Ubuntu :

Fenêtre de terminal
sudo apt install virtualbox-guest-utils # dans l'invité
Fenêtre de terminal
VBoxManage sharedfolder add srv1 --name partage --hostpath /srv/partage --automount

Dans l’invité (Guest Additions installées), le dossier est monté sous /media/sf_partage et accessible aux membres du groupe vboxsf :

Fenêtre de terminal
sudo usermod -aG vboxsf "$USER"

Pour échanger des fichiers sur un serveur, scp ou rsync par SSH (voir SSH : transferts) restent plus simples et plus sûrs.

Fenêtre de terminal
VBoxManage metrics setup --period 10 --samples 6 srv1 CPU/Load,RAM/Usage
VBoxManage metrics query srv1 CPU/Load/User,RAM/Usage/Used

Chaque machine démarre dans son propre processus ; leurs ressources s’additionnent : mémoire totale des machines inférieure à la mémoire de l’hôte (en laissant de la place au système), et ne pas attribuer plus de processeurs virtuels que de cœurs physiques à une même machine.

Symptôme Piste
VBoxManage: error: Failed to open/create the internal network Module vboxnetflt absent : sudo modprobe vboxnetflt
La machine ne démarre pas (VERR_…) Lire Logs/VBox.log
Connexion RDP refusée Extension Pack absent (VBoxManage list extpacks), port occupé, machine arrêtée ou tunnel SSH fermé
controlvm acpipowerbutton sans effet Invité sans gestion ACPI ; utiliser shutdown dans l’invité
Machine « aborted » après un redémarrage de l’hôte Prévoir un arrêt propre : voir Automatisation
The virtual machine … has terminated unexpectedly during startup Mémoire insuffisante, modules noyau, ou virtualisation matérielle absente

Ubuntu 24.04 et 26.04 : différences à connaître

Section intitulée « Ubuntu 24.04 et 26.04 : différences à connaître »

Les commandes sont les mêmes sur les deux versions. Les noms --vrde-port et --vrde-address s’appliquent à VirtualBox 7.0 et plus ; les versions précédentes utilisaient --vrdeport et --vrdeaddress.