@ Lutz L. Сначала спасибо за сценарий. У меня такая же проблема на Xubuntu 14.04 с VB 4.3.10, а Xubuntu 12.04 или Windwos XP Guest работает в спящем режиме.
С первой попытки скрипт работает идеально. Но в следующий раз, когда виртуальные машины автоматически не возобновятся, когда основная система вернется из состояния гибернации.
Это сообщение, которое я нашел в файле pm-suspend.log:
[d3 ] Запуск крюка /etc/pm/sleep.d/05_virtualbox thaw hibernate: отправить резюме в VM'sVBoxManage: ошибка: виртуальная машина «Xubuntu12» неожиданно прекратилась во время запуска с кодом выхода 1 VBoxManage: error: Details: code NS_ERROR_FAILURE (0x80004005) ), компонент Machine, интерфейс IMachine Ожидание VM «Xubuntu12» для включения ...
Я могу вручную возобновить Гостей, это работает без проблем, но это не так удобно.
PS: Проблема известна уже давно, как вы можете видеть здесь: https://www.virtualbox.org/ticket/7716
EDIT: Существует аналогичный сценарий:
#!/bin/bash
# Script to pause/resume running VBox VMs on hibernate/thaw
operation="$1"
# This script is invoked as root, but root cannot use VBoxManage to
# control the VMs of other users. So we obtain the members of the
# 'vboxusers' group and re-execute as each user in turn
if [ $(id -u) -eq 0 ] ; then
# running as root...
vboxusers=$(grep ^vboxusers /etc/group | cut -d ':' -f 4- | tr ',' ' ')
for user in $vboxusers; do
echo "restarting as $user..."
su - $user -c "$0 $operation" || exit $?
done
exit 0
fi
hibernated_vm_list=$HOME/.vbox-hibernated-vms
# get a list of all running VMs, save their state to disk and
# remember that we have done this
hibernate_vms()
{
rm -f $hibernated_vm_list
# each line in list is: "vmname" {vm-uuid}
local vm_list="$(VBoxManage list runningvms)"
if [ -z "$vm_list" ] ; then # nothing to do
return 0
fi
local tempfile="/tmp/VBoxPauseResume.tmp"
echo "$vm_list" > $tempfile
local pids=""
while read line ;
do
vm_name=$(echo "$line" | sed 's/\(".*"\).*/\1/')
vm_uuid=$(echo "$line" | sed 's/.*\({.*}\)/\1/')
echo "saving state of vm $vm_name for user $user"
(VBoxManage controlvm $vm_uuid savestate && \
echo "$vm_name $vm_uuid" >> $hibernated_vm_list && \
echo "saved state of vm $vm_name for user $user") &
pids="$pids $!"
done < $tempfile
wait $pids
rm -f $tempfile
}
# resumes any VMs that were saved by hibernate_vms(). Uses parallel
# child processes to thaw several VMs faster
thaw_vms()
{
if [ -e $hibernated_vm_list ] ; then
local pids=""
while read line ;
do
vm_name=$(echo "$line" | sed 's/\(".*"\).*/\1/')
vm_uuid=$(echo "$line" | sed 's/.*\({.*}\)/\1/')
echo "resuming vm $vm_name for user $user"
VBoxManage startvm $vm_uuid &
pids="$pids $!"
done < $hibernated_vm_list
wait $pids
rm -f $hibernated_vm_list
fi
}
case $operation in
hibernate) hibernate_vms ;;
suspend) ;;
thaw) thaw_vms ;;
resume) ;;
esac
(Сохраните этот сценарий как /etc/pm/sleep.d/02-VirtualBox и убедитесь, что он выполним)
Источник: https: // www .virtualbox.org / ticket / 7716
К сожалению, та же проблема с этим sc НИИИТ ...