En trois lignes :

  • démarrer la machine virtuelle avec la commande VirtualBox et les bons paramètres (startvm et fullscreen)
  • 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