Jeśli skrypty vboxd przysparzają Ci tyle samo kłopotów co mi, możesz spróbować tego; jest to raczej prostsze rozwiązanie, zaimplementowane w Perlu, które zapewnia tę samą funkcjonalność. W szczególności maszyna wirtualna uruchamia się z systemem (zakładając, że usługa jest ustawiona na automatyczne uruchamianie, co jest ustawieniem domyślnym) i spada automatycznie po zatrzymaniu usługi.
Główne różnice w stosunku do rozwiązania vboxd, poza tym, że z mojego doświadczenia jest znacznie prostszy, to to, że ten skrypt nie przekazuje ustawienia portu VRDE do VBoxHeadless, a zamknięcie maszyny wirtualnej jest obsługiwane za pomocą „acpipowerbutton” zamiast „savestate” .
Jeśli to nie pasuje do twoich celów, łatwo to zmienić; w pierwszym przypadku dodaj „-e” TCP / Ports = [, port ...] ”do ciągu wiersza poleceń VBoxHeadless ($ cmd), aw drugim przypadku po prostu zmień„ acpipowerbutton ”na„ savestate ”w moduł obsługi SIGTERM.
Oto skrypt Perla:
#!/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";
A oto wiersz polecenia cygrunsrv, którego użyłem do zainstalowania usługi 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
Stamtąd powinno być po prostu kwestia wydania „sc start <nazwa-usługi>” i powinieneś zacząć - pamiętaj, że domyślnie dziennik usług cygrunsrv loguje się do / var / log / <nazwa-usługi> .log, więc jeśli coś źle się zachowuje, jest to pierwsze miejsce, w którym można znaleźć powód.
Należy pamiętać, że kiedy uruchomisz maszynę wirtualną w ten sposób, będzie ona działać pod wbudowanym kontem SYSTEM, a nie z własnym. W takim przypadku nie będzie można administrować maszyną wirtualną za pośrednictwem konsoli VirtualBox, gdy działa ona jako usługa; Wygląda na to, że jest w stanie „Wyłączony” i nie będzie można przejść do jego ustawień. (Próba włączenia maszyny wirtualnej, gdy jest uruchomiona jako usługa, nie jest zalecana - nie wiem, co się stanie, ale w najlepszym razie będzie to brak możliwości działania, aw najgorszym przypadku doprowadzi do jej połączenia z maszyną wirtualną.) Jeśli musisz zmienić ustawienia maszyny Wirtualnej lub uzyskać dostęp do konsoli, najpierw zatrzymaj usługę (i poczekaj na zamknięcie VBoxHeadless.exe), a następnie skonfiguruj ją / włącz w konsoli VirtualBox, jak zwykle.
Prawdopodobnie możesz rozwiązać ten problem, instalując drugą usługę interaktywną w celu uruchomienia konsoli VirtualBox; ponieważ uruchomiłoby to również konsolę na koncie SYSTEM, najprawdopodobniej byłby w stanie zobaczyć działającą maszynę wirtualną i nią zarządzać. Sam nie musiałem tego robić, więc nie jestem pewien, czy to zadziała, ale nie widzę powodu, dla którego by to nie działało. (Jeśli spróbujesz, byłbym wdzięczny za komentarz do tej odpowiedzi, informujący mnie, jak Ci się udało. Dzięki!)
Mam nadzieję że to pomoże!