En trois lignes :
- démarrer la machine virtuelle avec la commande
VirtualBox
et les bons paramètres (startvm
etfullscreen
) - récupérer l’ID de la fenêtre démarrée avec wmctrl
- positionner, toujours avec
wmctrl
, cette fenêtre sur un autre desktop
Fonctionne parfaitement dans mon cas sur Ubuntu + Cinnamon.
La version longue (à enregistrer dans un .sh, dont le premier paramètre sera le nom de la virtualbox et le deuxième le numéro du desktop) :
#!/bin/zsh
[[ "$#" -ne 2 ]] && echo "Usage: $(basename $0) VIRTUALBOX_NAME DESKTOP_ID" && exit 1
VIRTUALBOX="$1"
DESKTOP="$2"
# === Starts virtualbox in fullscreen mode (detached from the current shell)
[[ $(wmctrl -l|egrep -i ".*${VIRTUALBOX}.*running.*virtualbox.*"|wc -l) -eq 1 ]] && echo "Virtualbox [$VIRTUALBOX] already running" && exit 1
nohup VirtualBox --startvm "$VIRTUALBOX" --fullscreen >/dev/null 2>&1 &
# === Move window to another desktop as soon as the window is available
WINDOW_ID=""
COUNT=0
while [[ -z "$WINDOW_ID" ]] ; do
wmctrl -l|egrep -i ".*${VIRTUALBOX}.*running.*virtualbox.*"|read WINDOW_ID DUMMY
if [[ -z "$WINDOW_ID" ]] ; then
COUNT=$(expr $COUNT + 1)
if [[ "$COUNT" -gt 10 ]] ; then
echo "Waited 10 seconds without finding the virtual box window, now stopping ..."
exit 1
fi
sleep 1
else
break;
fi
done
echo "Now sending virtualbox [$VIRTUALBOX] running on window [$WINDOW_ID] to desktop [$DESKTOP]"
wmctrl -i -r "$WINDOW_ID" -t "$DESKTOP"
Remarque : à savoir, pour le positionnement sur un desktop précis, le premier bureau est numéroté 0.
Commandes utiles additionnelles.
Lister tous les desktops disponibles
wmctrl -d
Ex. :
0 * DG: 1920x1080 VP: 0,0 WA: 0,0 1920x1080 Espace de travail 1
1 - DG: 1920x1080 VP: N/A WA: 0,0 1920x1080 Espace de travail 2
Liste toutes les fenêtres :
wmctrl -l
Stopper une virtualbox par la ligne de commande :
VBoxManage controlvm NOM\_VIRTUALBOX savestate