Se os scripts do vboxd estiverem causando tanto problema quanto eles, talvez você queira tentar isso; É uma solução bastante simples, implementada em Perl, que fornece a mesma funcionalidade. Especificamente, a VM inicializa com o sistema (supondo que o serviço esteja configurado para iniciar automaticamente, que é o padrão) e desce quando o serviço é interrompido.
As principais diferenças da solução vboxd, além de serem consideravelmente mais simples de lidar com a minha experiência, são que esse script não passa uma configuração de porta VRDE para VBoxHeadless e que o desligamento da VM é tratado por meio de "acpipowerbutton" "savestate".
Se isso não atender aos seus propósitos, é fácil mudar; no primeiro caso, adicione '-e' TCP / Ports = [ port ...] "'à string de linha de comando do VBoxHeadless ($ cmd), e no segundo caso, apenas altere" acpipowerbutton "para" savestate "em o manipulador SIGTERM.
Aqui está o script Perl:
#!/usr/bin/perl
# Service wrapper for VirtualBox VM.
use strict;
# Windows-style path pointing to your VirtualBox home directory
# (i.e., where your VirtualBox.xml lives)
my $vboxhome = 'c:\Documents and Settings\Aaron\.VirtualBox';
# Cygwin path pointing to the VirtualBox install directory
my $vboxpath = '/cygdrive/c/Program Files/Oracle/VirtualBox';
# Name or UUID of your virtual machine
my $vmname = '{83dfb4b1-4243-4a07-9d37-9df5573792d8}';
$ENV{'VBOX_USER_HOME'} = $vboxhome;
my $exit_handler = sub {
print "Caught SIGTERM; shutting down VM.\n";
exec("'$vboxpath/VBoxManage.exe' controlvm $vmname acpipowerbutton");
};
$SIG{TERM} = $exit_handler;
print "[debug] pid $$\n";
# Command line for VBoxHeadless - add your VRDE port here if you want one
my $cmd = "'$vboxpath/VBoxHeadless.exe' --startvm $vmname 2>&1 1>/dev/null";
print "[debug] $cmd\n";
system($cmd);
print "VM died unexpectedly; exiting.\n";
E aqui está a linha de comando do cygrunsrv que eu usei para instalar o serviço do Windows:
cygrunsrv --install '<service-name>' --desc '<description>' \
--path '/usr/bin/perl' --args '<full-path-to-service-script>' \
--chdir '<path-to-service-script-dir>' --termsig TERM --shutsig TERM \
--preshutdown --interactive
De lá, deve ser apenas uma questão de emitir "sc start < service-name >", e você deve estar pronto - lembre-se de que, por padrão, os serviços do cygrunsrv registram / var / log / & lt nome-do-serviço > .log, por isso, se alguma coisa se comportar mal, este é o primeiro local a procurar uma razão pela qual.
Uma coisa a ter em mente é que, quando você executar a VM dessa maneira, ela será executada na conta SYSTEM incorporada, e não na sua própria. Sendo este o caso, você não poderá administrar a VM através do console do VirtualBox enquanto estiver sendo executado como um serviço; Ele parecerá estar no estado "Desligado" e você não poderá acessar suas configurações. (Tentando ligar a VM enquanto está sendo executado como um serviço não é recomendado) Eu não sei o que vai acontecer, mas na melhor das hipóteses, será um no-op, e na pior das hipóteses Se precisar alterar as configurações da VM ou acessar o console, interrompa o serviço primeiro (e aguarde a saída do VBoxHeadless.exe) e, em seguida, configure-o / ligue-o no console do VirtualBox como faria normalmente faria.
Você provavelmente poderia resolver esse problema instalando um segundo serviço interativo para executar o console do VirtualBox; já que isso executaria o console na conta SYSTEM, provavelmente seria capaz de ver e gerenciar a VM em execução. Eu não tive a necessidade de fazer isso sozinho, então não tenho certeza se daria certo, mas não vejo uma razão para isso não funcionar. (Se você tentar, eu apreciaria um comentário para esta resposta, deixando-me saber como isso funcionou para você. Obrigado!)
Espero que isso ajude!