SSH
Podemos executar um aplicativo em um convidado virtual com uma sessão SSH do host para esta máquina. No entanto, isso requer que a rede esteja habilitada e que o openssh-server está instalado é executado na máquina convidada.
VBoxManage guestcontrol
Como alternativa, podemos usar recursos internos do Virtual Box para executar um programa em uma VM guest em execução. Isso pode ser feito com VBoxManage guestcontrol
.
A linha de exemplo abaixo executará apenas ls
na raiz da máquina virtual:
VBoxManage --nologo guestcontrol "<vm_name>" run --exe "/bin/ls" --username <guestuser> --password <password> --wait-stdout
A execução de um aplicativo gráfico no guest exige que definamos a variável de ambiente DISPLAY para o convidado com a opção --putenv
. O próximo exemplo será executado e abrirá o gedit no convidado:
VBoxManage --nologo guestcontrol "<vm_name" run --exe "/usr/bin/gedit" --username <guestuser> --password <password> --putenv "DISPLAY=:0" --wait-stdout
Também podemos passar opções para abrir um programa. O próximo exemplo abrirá um arquivo vmtest
no guest gedit:
VBoxManage --nologo guestcontrol "vm_name" run --exe "/usr/bin/gedit" --username <guestuser> --password <password> --putenv "DISPLAY=:0" --wait-stdout -- gedit/arg0 vmtest
Opções e argumentos são separados do comando com --
, como pode ser melhor visto no exemplo abaixo de um script do host.
Exemplo de script de host
Abaixo, o script reproduzirá um arquivo example.ogg
usando paplay
em uma máquina convidada quando executado no host. Substitua as variáveis por valores apropriados.
#!/bin/bash
VM_NAME=myvm
VM_USER=takkat
VM_PASSWD=topsecret
VM_EXEC=paplay
VM_EXEC_PATH=/usr/bin/paplay
VM_ARGS=/home/takkat/Music/example.ogg
VBoxManage --nologo guestcontrol $VM_NAME run --exe $VM_EXEC_PATH \
--username $VM_USER --password $VM_PASSWD --wait-stdout \
-- {$VM_EXEC}/arg0 $VM_ARGS