Информация: https://www.redhat.com/promo/fonts/
Загрузить: https://www.redhat.com/promo/fonts/ [ ! d2]
В соответствии с комментариями к исходному вопросу:
Я обнаружил, что в виртуальном боксе есть функция, с которой после сохранения текущего состояния виртуальных машин. Это очень похоже на спящий режим, за исключением того, что я не скрываю гостевую ОС явно. Более быстрый процесс выполняется очень быстро, и после этого я могу нормально спящать ОС хоста.Эта функция известна как Save Machine State.
В соответствии с комментариями к исходному вопросу:
Я обнаружил, что в виртуальном боксе есть функция, с которой после сохранения текущего состояния виртуальных машин. Это очень похоже на спящий режим, за исключением того, что я не скрываю гостевую ОС явно. Более быстрый процесс выполняется очень быстро, и после этого я могу нормально спящать ОС хоста.Эта функция известна как Save Machine State.
в комментариях к первоначальному вопросу:
я нашел, что есть функция в VirtualBox, с которой когда-то сохранить текущее состояние ВМ. Его довольно много, как в спячке, кроме того, что я не в спячке Гость явно ОС. Кроме того этот процесс осуществляется очень быстро и после, что я могу спящего хозяина обычно ОС.Эта функция известна как [F1].
В соответствии с комментариями к исходному вопросу:
Я обнаружил, что в виртуальном боксе есть функция, с которой после сохранения текущего состояния виртуальных машин. Это очень похоже на спящий режим, за исключением того, что я не скрываю гостевую ОС явно. Более быстрый процесс выполняется очень быстро, и после этого я могу нормально спящать ОС хоста.Эта функция известна как Save Machine State.
В соответствии с комментариями к исходному вопросу:
Я обнаружил, что в виртуальном боксе есть функция, с которой после сохранения текущего состояния виртуальных машин. Это очень похоже на спящий режим, за исключением того, что я не скрываю гостевую ОС явно. Более быстрый процесс выполняется очень быстро, и после этого я могу нормально спящать ОС хоста.Эта функция известна как Save Machine State.
В соответствии с комментариями к исходному вопросу:
Я обнаружил, что в виртуальном боксе есть функция, с которой однажды сохраняются текущее состояние виртуальных машин. Это очень похоже на спящий режим, за исключением того, что я не скрываю гостевую ОС явно.
blockquote>Эта функция известна как
Сохранить состояние машины
.
В соответствии с комментариями к исходному вопросу:
Я обнаружил, что в виртуальном боксе есть функция, с которой однажды сохраняются текущее состояние виртуальных машин. Это очень похоже на спящий режим, за исключением того, что я не скрываю гостевую ОС явно.
blockquote>Эта функция известна как
Сохранить состояние машины
.
В соответствии с комментариями к исходному вопросу:
Я обнаружил, что в виртуальном боксе есть функция, с которой однажды сохраняются текущее состояние виртуальных машин. Это очень похоже на спящий режим, за исключением того, что я не скрываю гостевую ОС явно.
blockquote>Эта функция известна как
Сохранить состояние машины
.
В соответствии с комментариями к исходному вопросу:
Я обнаружил, что в виртуальном боксе есть функция, с которой однажды сохраняются текущее состояние виртуальных машин. Это очень похоже на спящий режим, за исключением того, что я не скрываю гостевую ОС явно.
blockquote>Эта функция известна как
Сохранить состояние машины
.
В соответствии с комментариями к исходному вопросу:
Я обнаружил, что в виртуальном боксе есть функция, с которой однажды сохраняются текущее состояние виртуальных машин. Это очень похоже на спящий режим, за исключением того, что я не скрываю гостевую ОС явно.
blockquote>Эта функция известна как
Сохранить состояние машины
.
pause
(я думаю). Не рядом с моей машиной VBox, иначе я бы дважды проверил
– jrg♦
17 October 2011 в 17:25
У меня была такая же проблема, «пауза» виртуального гостя-XP (HostKey-P) действительно работала несколько раз, но часто НЕ. Ввод VM-Guest-XP в «сохраненное состояние» позволяет системе спящий режим без проблем. Я написал небольшой скрипт, поместив его в /etc/pm/sleep.d/05_virtualbox (не забудьте chmod a+x 05_virtualbox), и управление питанием автоматически выполнит состояние сохранения и запуска процедуры на виртуальных машинах ...
#!/bin/sh
# File: /etc/pm/sleep.d/05_virtualbox #(at least in ubuntu/fedora)
#
# This hack saves-state all VirtualBox-VM's off user $VBUSER on hibernate/suspend,
# saves the list of this VMs in $VM_LIST_FILE, and on thaw/resume it starts all
# VMs in that list again, and removes $VM_LIST_FILE.
# BUGS: don't use the same NAME for different VMs, or rewrite the script to use UUIDs
#
# a REAL hack, tried to comment as much as possible, but the chosen syntax is obfuscated,
# sorry...also sorry for the bad english...
#
# Writer (guilty person): Lutz Langenbach
# Copyleft: do what you want with the Code
# Help: VBoxManage 2>&1 |less or http://www.virtualbox.org/manual/ch08.html
VM_LIST_FILE=/var/tmp/vms-in-saved-state-list
VBUSER=Put_YOUR_username_here
PATH=/sbin:/usr/sbin:/bin:/usr/bin
case "${1}" in
suspend|hibernate)
# print list of running VM's output: "vm-name" {vm-uuid}\n
# extract only the name of VM's and send
echo -n "Send savestate to VM's:"
sudo -u $VBUSER VBoxManage list runningvms \
|perl -ne 'chomp;s/^"([^"]*)".*/\1/; print $_; system("sudo -u '"$VBUSER"' VBoxManage controlvm \"$_\" savestate && echo \"$_\">>'"$VM_LIST_FILE"'");'
echo ..done
;;
resume|thaw)
# get each line in $VM_LIST_FILE, use it as VM-Name and send start to it
echo -n "Send resume to VM's"
cat $VM_LIST_FILE | perl -ne 'chomp;s/^"([^"]*)".*/\1/; system("sudo -u '"$VBUSER"' VBoxManage startvm \"$_\"");'
rm -f $VM_LIST_FILE
echo .
;;
*)
echo "Don't know what to do, 1st Arg was:${1}; Must be suspend|hibernate|resume|thaw"
;;
esac
@ 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 НИИИТ ...
@TuKsn
Проблема очень проста в решении - необходимо установить переменную DISPLAY.
VirtualBox использует его при запуске vms в режиме gui. Та же проблема возникает, когда я регистрируюсь через ssh и хочу запустить vm в режиме gui.
Спасибо за ваш скрипт, он отлично работает!
Однако мне пришлось добавить некоторую модификацию, чтобы сохранить режим работы vms (т. е. «gui» или «headless») или 'sdl'), необходимые для правильного перезапуска vms.
Ниже приведен скрипт с моими правильными значениями:
#!/bin/bash
# Script to pause/resume running VBox VMs on hibernate/thaw
# Set your display here
display=":0.0"
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/')
vm_type=$(VBoxManage showvminfo $vm_uuid | grep "Session type:" | awk '{print $NF}')
case $vm_type in
"headless") ;;
"sdl") ;;
"GUI/Qt") vm_type="gui" ;;
*) vm_type="gui" ;;
esac
echo "saving state of vm $vm_name for user $user from mode $vm_type"
(VBoxManage controlvm $vm_uuid savestate && \
echo "$vm_name $vm_uuid $vm_type" >> $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/' | awk '{print $1}')
vm_type=$(echo "$line" | sed 's/.*\({.*}\)/\1/' | awk '{print $2}')
echo "resuming vm $vm_name for user $user in mode $vm_type"
DISPLAY=$display VBoxManage startvm $vm_uuid --type $vm_type &
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
@TuKsn
проблема очень просто решается - переменная дисплея должен быть установлен.
в VirtualBox использует его при запуске виртуальных машин в графическом режиме. Та же проблема возникает при входе через SSH и хочу запустить виртуальную машину, в графическом режиме.
спасибо за ваш скрипт, он отлично работает!
однако мне пришлось добавить некоторые модификации для того, чтобы сохранить режим, в котором работают виртуальные машины (т. е. 'гуй' или 'безголовый' или 'СДЛ') необходимо, чтобы правильно перезагрузить ВМ.
ниже есть скрипт с моего correctnesses включено:
#!/bin/bash
# Script to pause/resume running VBox VMs on hibernate/thaw
# Set your display here
display=":0.0"
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/')
vm_type=$(VBoxManage showvminfo $vm_uuid | grep "Session type:" | awk '{print $NF}')
case $vm_type in
"headless") ;;
"sdl") ;;
"GUI/Qt") vm_type="gui" ;;
*) vm_type="gui" ;;
esac
echo "saving state of vm $vm_name for user $user from mode $vm_type"
(VBoxManage controlvm $vm_uuid savestate && \
echo "$vm_name $vm_uuid $vm_type" >> $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/' | awk '{print $1}')
vm_type=$(echo "$line" | sed 's/.*\({.*}\)/\1/' | awk '{print $2}')
echo "resuming vm $vm_name for user $user in mode $vm_type"
DISPLAY=$display VBoxManage startvm $vm_uuid --type $vm_type &
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
У меня была такая же проблема, «пауза» виртуального гостя-XP (HostKey-P) действительно работала несколько раз, но часто НЕ. Ввод VM-Guest-XP в «сохраненное состояние» позволяет системе спящий режим без проблем. Я написал небольшой скрипт, поместив его в /etc/pm/sleep.d/05_virtualbox (не забудьте chmod a+x 05_virtualbox), и управление питанием автоматически выполнит состояние сохранения и запуска процедуры на виртуальных машинах ...
#!/bin/sh
# File: /etc/pm/sleep.d/05_virtualbox #(at least in ubuntu/fedora)
#
# This hack saves-state all VirtualBox-VM's off user $VBUSER on hibernate/suspend,
# saves the list of this VMs in $VM_LIST_FILE, and on thaw/resume it starts all
# VMs in that list again, and removes $VM_LIST_FILE.
# BUGS: don't use the same NAME for different VMs, or rewrite the script to use UUIDs
#
# a REAL hack, tried to comment as much as possible, but the chosen syntax is obfuscated,
# sorry...also sorry for the bad english...
#
# Writer (guilty person): Lutz Langenbach
# Copyleft: do what you want with the Code
# Help: VBoxManage 2>&1 |less or http://www.virtualbox.org/manual/ch08.html
VM_LIST_FILE=/var/tmp/vms-in-saved-state-list
VBUSER=Put_YOUR_username_here
PATH=/sbin:/usr/sbin:/bin:/usr/bin
case "${1}" in
suspend|hibernate)
# print list of running VM's output: "vm-name" {vm-uuid}\n
# extract only the name of VM's and send
echo -n "Send savestate to VM's:"
sudo -u $VBUSER VBoxManage list runningvms \
|perl -ne 'chomp;s/^"([^"]*)".*/\1/; print $_; system("sudo -u '"$VBUSER"' VBoxManage controlvm \"$_\" savestate && echo \"$_\">>'"$VM_LIST_FILE"'");'
echo ..done
;;
resume|thaw)
# get each line in $VM_LIST_FILE, use it as VM-Name and send start to it
echo -n "Send resume to VM's"
cat $VM_LIST_FILE | perl -ne 'chomp;s/^"([^"]*)".*/\1/; system("sudo -u '"$VBUSER"' VBoxManage startvm \"$_\"");'
rm -f $VM_LIST_FILE
echo .
;;
*)
echo "Don't know what to do, 1st Arg was:${1}; Must be suspend|hibernate|resume|thaw"
;;
esac
@ Lutz L. Сначала спасибо за сценарий. У меня такая же проблема на Xubuntu 14.04 с VB 4.3.10, а Xubuntu 12.04 или Windwos XP Guest работает в спящем режиме.
С первой попытки скрипт работает идеально. Но в следующий раз, когда виртуальные машины автоматически не возобновятся, когда основная система вернется из состояния гибернации.
Это сообщение, которое я нашел в файле pm-suspend.log:
Запуск крюка /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 НИИИТ ...
@TuKsn
проблема очень просто решается - переменная дисплея должен быть установлен.
в VirtualBox использует его при запуске виртуальных машин в графическом режиме. Та же проблема возникает при входе через SSH и хочу запустить виртуальную машину, в графическом режиме.
спасибо за ваш скрипт, он отлично работает!
однако мне пришлось добавить некоторые модификации для того, чтобы сохранить режим, в котором работают виртуальные машины (т. е. 'гуй' или 'безголовый' или 'СДЛ') необходимо, чтобы правильно перезагрузить ВМ.
ниже есть скрипт с моего correctnesses включено:
#!/bin/bash
# Script to pause/resume running VBox VMs on hibernate/thaw
# Set your display here
display=":0.0"
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/')
vm_type=$(VBoxManage showvminfo $vm_uuid | grep "Session type:" | awk '{print $NF}')
case $vm_type in
"headless") ;;
"sdl") ;;
"GUI/Qt") vm_type="gui" ;;
*) vm_type="gui" ;;
esac
echo "saving state of vm $vm_name for user $user from mode $vm_type"
(VBoxManage controlvm $vm_uuid savestate && \
echo "$vm_name $vm_uuid $vm_type" >> $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/' | awk '{print $1}')
vm_type=$(echo "$line" | sed 's/.*\({.*}\)/\1/' | awk '{print $2}')
echo "resuming vm $vm_name for user $user in mode $vm_type"
DISPLAY=$display VBoxManage startvm $vm_uuid --type $vm_type &
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
у меня была такая же проблема, "пауза" виртуальный-Гость-ХР (ключ хоста-П) сработало несколько раз, но чаще нет. Положить ВМ-Гость-XP в "сохранения состояния" пусть снова система зимуют без проблем. Я написал небольшой скрипт, положить его в /etc/pm/sleep.d/05_virtualbox (не забудьте chmod a+x 05_virtualbox) и управления питанием сделает сэйв-машина-государство и процедуры запуска на виртуальных машинах автоматически...
#!/bin/sh
# File: /etc/pm/sleep.d/05_virtualbox #(at least in ubuntu/fedora)
#
# This hack saves-state all VirtualBox-VM's off user $VBUSER on hibernate/suspend,
# saves the list of this VMs in $VM_LIST_FILE, and on thaw/resume it starts all
# VMs in that list again, and removes $VM_LIST_FILE.
# BUGS: don't use the same NAME for different VMs, or rewrite the script to use UUIDs
#
# a REAL hack, tried to comment as much as possible, but the chosen syntax is obfuscated,
# sorry...also sorry for the bad english...
#
# Writer (guilty person): Lutz Langenbach
# Copyleft: do what you want with the Code
# Help: VBoxManage 2>&1 |less or http://www.virtualbox.org/manual/ch08.html
VM_LIST_FILE=/var/tmp/vms-in-saved-state-list
VBUSER=Put_YOUR_username_here
PATH=/sbin:/usr/sbin:/bin:/usr/bin
case "${1}" in
suspend|hibernate)
# print list of running VM's output: "vm-name" {vm-uuid}\n
# extract only the name of VM's and send
echo -n "Send savestate to VM's:"
sudo -u $VBUSER VBoxManage list runningvms \
|perl -ne 'chomp;s/^"([^"]*)".*/\1/; print $_; system("sudo -u '"$VBUSER"' VBoxManage controlvm \"$_\" savestate && echo \"$_\">>'"$VM_LIST_FILE"'");'
echo ..done
;;
resume|thaw)
# get each line in $VM_LIST_FILE, use it as VM-Name and send start to it
echo -n "Send resume to VM's"
cat $VM_LIST_FILE | perl -ne 'chomp;s/^"([^"]*)".*/\1/; system("sudo -u '"$VBUSER"' VBoxManage startvm \"$_\"");'
rm -f $VM_LIST_FILE
echo .
;;
*)
echo "Don't know what to do, 1st Arg was:${1}; Must be suspend|hibernate|resume|thaw"
;;
esac
@ Lutz L. Сначала спасибо за сценарий. У меня такая же проблема на Xubuntu 14.04 с VB 4.3.10, а Xubuntu 12.04 или Windwos XP Guest работает в спящем режиме.
С первой попытки скрипт работает идеально. Но в следующий раз, когда виртуальные машины автоматически не возобновятся, когда основная система вернется из состояния гибернации.
Это сообщение, которое я нашел в файле pm-suspend.log:
Запуск крюка /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 НИИИТ ...
@TuKsn
проблема очень просто решается - переменная дисплея должен быть установлен.
в VirtualBox использует его при запуске виртуальных машин в графическом режиме. Та же проблема возникает при входе через SSH и хочу запустить виртуальную машину, в графическом режиме.
спасибо за ваш скрипт, он отлично работает!
однако мне пришлось добавить некоторые модификации для того, чтобы сохранить режим, в котором работают виртуальные машины (т. е. 'гуй' или 'безголовый' или 'СДЛ') необходимо, чтобы правильно перезагрузить ВМ.
ниже есть скрипт с моего correctnesses включено:
#!/bin/bash
# Script to pause/resume running VBox VMs on hibernate/thaw
# Set your display here
display=":0.0"
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/')
vm_type=$(VBoxManage showvminfo $vm_uuid | grep "Session type:" | awk '{print $NF}')
case $vm_type in
"headless") ;;
"sdl") ;;
"GUI/Qt") vm_type="gui" ;;
*) vm_type="gui" ;;
esac
echo "saving state of vm $vm_name for user $user from mode $vm_type"
(VBoxManage controlvm $vm_uuid savestate && \
echo "$vm_name $vm_uuid $vm_type" >> $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/' | awk '{print $1}')
vm_type=$(echo "$line" | sed 's/.*\({.*}\)/\1/' | awk '{print $2}')
echo "resuming vm $vm_name for user $user in mode $vm_type"
DISPLAY=$display VBoxManage startvm $vm_uuid --type $vm_type &
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
у меня была такая же проблема, "пауза" виртуальный-Гость-ХР (ключ хоста-П) сработало несколько раз, но чаще нет. Положить ВМ-Гость-XP в "сохранения состояния" пусть снова система зимуют без проблем. Я написал небольшой скрипт, положить его в /etc/pm/sleep.d/05_virtualbox (не забудьте chmod a+x 05_virtualbox) и управления питанием сделает сэйв-машина-государство и процедуры запуска на виртуальных машинах автоматически...
#!/bin/sh
# File: /etc/pm/sleep.d/05_virtualbox #(at least in ubuntu/fedora)
#
# This hack saves-state all VirtualBox-VM's off user $VBUSER on hibernate/suspend,
# saves the list of this VMs in $VM_LIST_FILE, and on thaw/resume it starts all
# VMs in that list again, and removes $VM_LIST_FILE.
# BUGS: don't use the same NAME for different VMs, or rewrite the script to use UUIDs
#
# a REAL hack, tried to comment as much as possible, but the chosen syntax is obfuscated,
# sorry...also sorry for the bad english...
#
# Writer (guilty person): Lutz Langenbach
# Copyleft: do what you want with the Code
# Help: VBoxManage 2>&1 |less or http://www.virtualbox.org/manual/ch08.html
VM_LIST_FILE=/var/tmp/vms-in-saved-state-list
VBUSER=Put_YOUR_username_here
PATH=/sbin:/usr/sbin:/bin:/usr/bin
case "${1}" in
suspend|hibernate)
# print list of running VM's output: "vm-name" {vm-uuid}\n
# extract only the name of VM's and send
echo -n "Send savestate to VM's:"
sudo -u $VBUSER VBoxManage list runningvms \
|perl -ne 'chomp;s/^"([^"]*)".*/\1/; print $_; system("sudo -u '"$VBUSER"' VBoxManage controlvm \"$_\" savestate && echo \"$_\">>'"$VM_LIST_FILE"'");'
echo ..done
;;
resume|thaw)
# get each line in $VM_LIST_FILE, use it as VM-Name and send start to it
echo -n "Send resume to VM's"
cat $VM_LIST_FILE | perl -ne 'chomp;s/^"([^"]*)".*/\1/; system("sudo -u '"$VBUSER"' VBoxManage startvm \"$_\"");'
rm -f $VM_LIST_FILE
echo .
;;
*)
echo "Don't know what to do, 1st Arg was:${1}; Must be suspend|hibernate|resume|thaw"
;;
esac
@ Лутц л. во-первых спасибо за сценарий. У меня такая же проблема на 14.04 xubuntu в с VB 4.3.10 и xubuntu в 12.04 или Windwos XP с гостя работает на hibernate.
в первом попробовать сценарий, кажется, работает идеально. Но в следующий раз ВМ не автоматически возобновится, когда основная система возвращается из состояния гибернации.
это послание, которое я нашел в "ПМ-приостановить.лог-файл":
работает крюк в /etc/вечера/сна.д/05_virtualbox оттепель гибернации: отправить резюме на ВМ'sVBoxManage: ошибка: виртуальный автомат 'Xubuntu12 была неожиданно прервана во время запуска с выхода код 1 VBoxManage: ошибка: подробности: код NS_ERROR_FAILURE (0x80004005 при), компонента машины, интерфейс IMachine ждем ВМ "Xubuntu12" к власти на...я могу вручную возобновить Гости, это работает без проблем, но это не так комфортно.
С. П.: проблема известна уже давно, как вы можете видеть здесь: https://www.virtualbox.org/ticket/7716
изменить: есть похожий скрипт:
#!/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/ПМ/сна.д/02-VirtualBox, и убедитесь, что он исполняемый)
Источник: https://www.virtualbox.org/ticket/7716
, к сожалению, та же проблема с этим скриптом...
@TuKsn
проблема очень просто решается - переменная дисплея должен быть установлен.
в VirtualBox использует его при запуске виртуальных машин в графическом режиме. Та же проблема возникает при входе через SSH и хочу запустить виртуальную машину, в графическом режиме.
спасибо за ваш скрипт, он отлично работает!
однако мне пришлось добавить некоторые модификации для того, чтобы сохранить режим, в котором работают виртуальные машины (т. е. 'гуй' или 'безголовый' или 'СДЛ') необходимо, чтобы правильно перезагрузить ВМ.
ниже есть скрипт с моего correctnesses включено:
#!/bin/bash
# Script to pause/resume running VBox VMs on hibernate/thaw
# Set your display here
display=":0.0"
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/')
vm_type=$(VBoxManage showvminfo $vm_uuid | grep "Session type:" | awk '{print $NF}')
case $vm_type in
"headless") ;;
"sdl") ;;
"GUI/Qt") vm_type="gui" ;;
*) vm_type="gui" ;;
esac
echo "saving state of vm $vm_name for user $user from mode $vm_type"
(VBoxManage controlvm $vm_uuid savestate && \
echo "$vm_name $vm_uuid $vm_type" >> $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/' | awk '{print $1}')
vm_type=$(echo "$line" | sed 's/.*\({.*}\)/\1/' | awk '{print $2}')
echo "resuming vm $vm_name for user $user in mode $vm_type"
DISPLAY=$display VBoxManage startvm $vm_uuid --type $vm_type &
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
У меня была такая же проблема, «пауза» виртуального гостя-XP (HostKey-P) действительно работала несколько раз, но часто НЕ. Ввод VM-Guest-XP в «сохраненное состояние» позволяет системе спящий режим без проблем. Я написал небольшой скрипт, поместив его в /etc/pm/sleep.d/05_virtualbox (не забудьте chmod a+x 05_virtualbox), и управление питанием автоматически выполнит состояние сохранения и запуска процедуры на виртуальных машинах ...
#!/bin/sh
# File: /etc/pm/sleep.d/05_virtualbox #(at least in ubuntu/fedora)
#
# This hack saves-state all VirtualBox-VM's off user $VBUSER on hibernate/suspend,
# saves the list of this VMs in $VM_LIST_FILE, and on thaw/resume it starts all
# VMs in that list again, and removes $VM_LIST_FILE.
# BUGS: don't use the same NAME for different VMs, or rewrite the script to use UUIDs
#
# a REAL hack, tried to comment as much as possible, but the chosen syntax is obfuscated,
# sorry...also sorry for the bad english...
#
# Writer (guilty person): Lutz Langenbach
# Copyleft: do what you want with the Code
# Help: VBoxManage 2>&1 |less or http://www.virtualbox.org/manual/ch08.html
VM_LIST_FILE=/var/tmp/vms-in-saved-state-list
VBUSER=Put_YOUR_username_here
PATH=/sbin:/usr/sbin:/bin:/usr/bin
case "${1}" in
suspend|hibernate)
# print list of running VM's output: "vm-name" {vm-uuid}\n
# extract only the name of VM's and send
echo -n "Send savestate to VM's:"
sudo -u $VBUSER VBoxManage list runningvms \
|perl -ne 'chomp;s/^"([^"]*)".*/\1/; print $_; system("sudo -u '"$VBUSER"' VBoxManage controlvm \"$_\" savestate && echo \"$_\">>'"$VM_LIST_FILE"'");'
echo ..done
;;
resume|thaw)
# get each line in $VM_LIST_FILE, use it as VM-Name and send start to it
echo -n "Send resume to VM's"
cat $VM_LIST_FILE | perl -ne 'chomp;s/^"([^"]*)".*/\1/; system("sudo -u '"$VBUSER"' VBoxManage startvm \"$_\"");'
rm -f $VM_LIST_FILE
echo .
;;
*)
echo "Don't know what to do, 1st Arg was:${1}; Must be suspend|hibernate|resume|thaw"
;;
esac
@ Лутц л. во-первых спасибо за сценарий. У меня такая же проблема на 14.04 xubuntu в с VB 4.3.10 и xubuntu в 12.04 или Windwos XP с гостя работает на hibernate.
в первом попробовать сценарий, кажется, работает идеально. Но в следующий раз ВМ не автоматически возобновится, когда основная система возвращается из состояния гибернации.
это послание, которое я нашел в "ПМ-приостановить.лог-файл":
работает крюк в /etc/вечера/сна.д/05_virtualbox оттепель гибернации: отправить резюме на ВМ'sVBoxManage: ошибка: виртуальный автомат 'Xubuntu12 была неожиданно прервана во время запуска с выхода код 1 VBoxManage: ошибка: подробности: код NS_ERROR_FAILURE (0x80004005 при), компонента машины, интерфейс IMachine ждем ВМ "Xubuntu12" к власти на...я могу вручную возобновить Гости, это работает без проблем, но это не так комфортно.
С. П.: проблема известна уже давно, как вы можете видеть здесь: https://www.virtualbox.org/ticket/7716
изменить: есть похожий скрипт:
#!/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/ПМ/сна.д/02-VirtualBox, и убедитесь, что он исполняемый)
Источник: https://www.virtualbox.org/ticket/7716
, к сожалению, та же проблема с этим скриптом...
@ Lutz L. Сначала спасибо за сценарий. У меня такая же проблема на Xubuntu 14.04 с VB 4.3.10, а Xubuntu 12.04 или Windwos XP Guest работает в спящем режиме.
С первой попытки скрипт работает идеально. Но в следующий раз, когда виртуальные машины автоматически не возобновятся, когда основная система вернется из состояния гибернации.
Это сообщение, которое я нашел в файле pm-suspend.log:
Запуск hook /etc/pm/sleep.d/05_virtualbox thaw hibernate: отправить резюме в VM'sVBoxManage: ошибка: виртуальная машина «Xubuntu12» неожиданно прекратилась во время запуска с кодом выхода 1 VBoxManage: error: Details: code NS_ERROR_FAILURE (0x80004005), компонент Machine, интерфейс IMachine Ожидание VM «Xubuntu12» для включения ...
blockquote>Я могу вручную возобновить Гостей, это работает без проблем, но это не так как это удобно.
PS: Проблема известна уже давно, как вы можете видеть здесь: https://www.virtualbox.org/ticket/7716
EDIT: есть аналогичный скрипт:
#! / bin / bash # Сценарий для приостановки / возобновления запуска виртуальных машин VBox при работе спящего / оттаивания = "$ 1" # Этот скрипт вызывается как root, но root не может использовать VBoxManage для # control t он VM других пользователей. Таким образом, мы получаем членов группы # vboxusers и повторно выполняем, как каждый пользователь, в свою очередь, если [$ (id -u) -eq 0]; затем # работает как root ... vboxusers = $ (grep ^ vboxusers / etc / group | cut -d ':' -f 4- | tr ',' '') для пользователя в $ vboxusers; do echo "restarting as $ user ..." su - $ user -c "$ 0 $ operation" || exit $? done exit 0 fi hibernated_vm_list = $ HOME / .vbox-hibernated-vms # получить список всех запущенных виртуальных машин, сохранить их состояние на диск и # вспомнить, что мы сделали эту hibernate_vms () {rm -f $ hibernated_vm_list # каждую строку в list: "vmname" {vm-uuid} local vm_list = "$ (VBoxManage list runningvms)", если [-z "$ vm_list"]; то # ничего не делать return 0 fi local tempfile = "/ tmp / VBoxPauseResume.tmp" echo "$ vm_list" & gt; $ tempfile local pids = "" при чтении строки; do vm_name = $ (echo "$ line" | sed 's / \ (". *" \). * / \ 1 /') vm_uuid = $ (echo "$ line" | sed 's /.* \ ({ . *} \) / \ 1 / ') echo "сохранение состояния vm $ vm_name для пользователя $ user" (VBoxManage controlvm $ vm_uuid savestate & amp; \ echo "$ vm_name $ vm_uuid" & gt; & gt; $ hibernated_vm_list & amp; & amp; \ echo "сохраненное состояние vm $ vm_name для пользователя $ user") & amp; pids = "$ pids $!" done & lt; $ tempfile wait $ pids rm -f $ tempfile} # возобновляет любые виртуальные машины, которые были сохранены hibernate_vms (). Использует параллельные # дочерние процессы для оттаивания нескольких VM быстрее thaw_vms () {if [-e $ hibernated_vm_list]; затем локальные pids = "" при чтении строки; do vm_name = $ (echo "$ line" | sed 's / \ (". *" \). * / \ 1 /') vm_uuid = $ (echo "$ line" | sed 's /.* \ ({ . *} \) / \ 1 / ') echo "возобновление vm $ vm_name для пользователя $ user" VBoxManage startvm $ vm_uuid & amp; pids = "$ pids $!" done & lt; $ hibernated_vm_list wait $ pids rm -f $ hibernated_vm_list fi} case $ операция в спящем режиме) hibernate_vms ;; приостановить) ;; оттаивание) thaw_vms ;; продолжить) ;; esac
(Сохраните этот сценарий как /etc/pm/sleep.d/02-VirtualBox и убедитесь, что он выполним)
Источник: http : //angryfifer.blogspot.de/2012/02/linux-hibernation-and-virtualbox.html
К сожалению, такая же проблема с этим скриптом ...
У меня была та же проблема: «пауза» virtual-guest-XP (HostKey-P) действительно работала несколько раз, но часто НЕ. Ввод VM-Guest-XP в «сохраненное состояние» позволяет системе спящий режим без проблем. Я написал небольшой скрипт, поместив его в /etc/pm/sleep.d/05_virtualbox
(не забудьте chmod a + x 05_virtualbox
), и управление питанием будет состояние сохранения и запуска процедуры на виртуальных машинах автоматически ...
#! / bin / sh # Файл: /etc/pm/sleep.d/05_virtualbox # (по крайней мере, в ubuntu / fedora) # # Этот хак сохраняет состояние всех пользователей VirtualBox-VM $ VBUSER в режиме hibernate / suspend, # сохраняет список этих виртуальных машин в $ VM_LIST_FILE, а при оттаивании / возобновлении он снова запускает все # VM в этом списке и удаляет $ VM_LIST_FILE. # ОШИБКИ: не используйте одно и то же имя для разных виртуальных машин или перезаписывайте скрипт, чтобы использовать UUID # # REAL hack, пытались как можно больше комментариев, но выбранный синтаксис был запутан, # извините ... также жаль плохой английский ... # # Writer (виновный): Lutz Langenbach # Copyleft: сделайте то, что вы хотите, с помощью Code # Help: VBoxManage 2 & amp; 1 | less или http://www.virtualbox.org/manual/ ch08.html VM_LIST_FILE = / var / tmp / vms-in-saved-state-list VBUSER = Put_YOUR_username_here PATH = / sbin: / usr / sbin: / bin: / usr / bin case "$ {1}" в suspend | hibernate ) # распечатать список результатов работы виртуальной машины: «vm-name» {vm-uuid} \n # извлечь только имя виртуальной машины и отправить echo -n «Отправить savestate для VM:» sudo -u $ VBUSER VBoxManage list runningvms \ | perl -ne 'chomp; s / ^ "([^"] *) ". * / \ 1 /; print $ _; system (" sudo -u' "$ VBUSER" 'VBoxManage controlvm \ "$ _ \" savestate & amp; & echo \ "$ _ \" & gt; & gt; '"$ VM_LIST_FILE"' "); echo ..done ;; resume | thaw) # получить каждую строку в $ VM_LIST_FILE, использовать ее как имя VM и отправить ей начало echo -n «Отправить резюме в VM» cat $ VM_LIST_FILE | perl -ne 'chomp; s / ^ "([^"] *)»* / \ 1 /. system ("sudo -u '" $ VBUSER "' VBoxManage startvm \" $ _ \ ""); ' rm -f $ VM_LIST_FILE эхо. ;; *) echo «Не знаю, что делать, 1-й Arg был: $ {1}; Должен быть приостановлен | спящий | резюме | оттепель ;;; esac
@TuKsn
Проблема очень проста в решении - необходимо установить переменную DISPLAY.
VirtualBox использует его при запуске vms в режиме gui. Та же проблема возникает, когда я регистрируюсь через ssh и хочу запустить vm в режиме gui.
Спасибо за ваш скрипт, он отлично работает!
Однако мне пришлось добавить некоторую модификацию, чтобы сохранить режим работы vms (т. е. 'gui' или 'headless' или 'sdl'), необходимые для правильного перезапуска vms.
Ниже приведен скрипт с моими правильными значениями:
#! / bin / bash # Сценарий для приостановки / возобновления работы виртуальных машин VBox при спящем / оттаивании # Установите ваш дисплей здесь display = ": 0.0" operation = "$ 1" # Этот скрипт вызывается как root, но root не может использовать VBoxManage для # управления виртуальными машинами других пользователей. Таким образом, мы получаем членов группы # vboxusers и повторно выполняем, как каждый пользователь, в свою очередь, если [$ (id -u) -eq 0]; затем # работает как root ... vboxusers = $ (grep ^ vboxusers / etc / group | cut -d ':' -f 4- | tr ',' '') для пользователя в $ vboxusers; do echo "restarting as $ user ..." su - $ user -c "$ 0 $ operation" || exit $? done exit 0 fi hibernated_vm_list = $ HOME / .vbox-hibernated-vms # получить список всех запущенных виртуальных машин, сохранить их состояние на диск и # вспомнить, что мы сделали эту hibernate_vms () {rm -f $ hibernated_vm_list # каждую строку в list: "vmname" {vm-uuid} local vm_list = "$ (VBoxManage list runningvms)", если [-z "$ vm_list"]; то # ничего не делать return 0 fi local tempfile = "/ tmp / VBoxPauseResume.tmp" echo "$ vm_list"> $ tempfile local pids = "" при чтении строки; do vm_name = $ (echo "$ line" | sed 's / \ (". *" \). * / \ 1 /') vm_uuid = $ (echo "$ line" | sed 's /.* \ ({ . *} \) / \ 1 / ') vm_type = $ (VBoxManage showvminfo $ vm_uuid | grep "Тип сеанса:" | awk' {print $ NF} ') case $ vm_type в "headless") ;; "sdl") ;; «GUI / Qt») vm_type = "gui" ;; *) vm_type = "gui" ;; esac echo "сохранение состояния vm $ vm_name для пользователя $ user из режима $ vm_type" (VBoxManage controlvm $ vm_uuid savestate && \ echo "$ vm_name $ vm_uuid $ vm_type" >> $ hibernated_vm_list && \ echo "сохраненное состояние vm $ vm_name для user $ user ") & pids =" $ pids $! " done & lt; $ tempfile wait $ pids rm -f $ tempfile} # возобновляет любые виртуальные машины, которые были сохранены hibernate_vms (). Использует параллельные # дочерние процессы для оттаивания нескольких VM быстрее thaw_vms () {if [-e $ hibernated_vm_list]; затем локальные pids = "" при чтении строки; do vm_name = $ (echo "$ line" | sed 's / \ (". *" \). * / \ 1 /') vm_uuid = $ (echo "$ line" | sed 's /.* \ ({ . *} \) / \ 1 / '| awk' {print $ 1} ') vm_type = $ (echo "$ line" | sed' s /.* \ ({. *} \) / \ 1 / '| awk '{print $ 2}') echo "resuming vm $ vm_name для пользователя $ user в режиме $ vm_type" DISPLAY = $ display VBoxManage startvm $ vm_uuid --type $ vm_type & pids = "$ pids $!" done & lt; $ hibernated_vm_list wait $ pids rm -f $ hibernated_vm_list fi} case $ операция в спящем режиме) hibernate_vms ;; приостановить) ;; оттаивание) thaw_vms ;; продолжить) ;; esac
@ Lutz L. Сначала спасибо за сценарий. У меня такая же проблема на Xubuntu 14.04 с VB 4.3.10, а Xubuntu 12.04 или Windwos XP Guest работает в спящем режиме.
С первой попытки скрипт работает идеально. Но в следующий раз, когда виртуальные машины автоматически не возобновятся, когда основная система вернется из состояния гибернации.
Это сообщение, которое я нашел в файле pm-suspend.log:
Запуск hook /etc/pm/sleep.d/05_virtualbox thaw hibernate: отправить резюме в VM'sVBoxManage: ошибка: виртуальная машина «Xubuntu12» неожиданно прекратилась во время запуска с кодом выхода 1 VBoxManage: error: Details: code NS_ERROR_FAILURE (0x80004005), компонент Machine, интерфейс IMachine Ожидание VM «Xubuntu12» для включения ...
blockquote>Я могу вручную возобновить Гостей, это работает без проблем, но это не так как это удобно.
PS: Проблема известна уже давно, как вы можете видеть здесь: https://www.virtualbox.org/ticket/7716
EDIT: есть аналогичный скрипт:
#! / bin / bash # Сценарий для приостановки / возобновления запуска виртуальных машин VBox при работе спящего / оттаивания = "$ 1" # Этот скрипт вызывается как root, но root не может использовать VBoxManage для # control t он VM других пользователей. Таким образом, мы получаем членов группы # vboxusers и повторно выполняем, как каждый пользователь, в свою очередь, если [$ (id -u) -eq 0]; затем # работает как root ... vboxusers = $ (grep ^ vboxusers / etc / group | cut -d ':' -f 4- | tr ',' '') для пользователя в $ vboxusers; do echo "restarting as $ user ..." su - $ user -c "$ 0 $ operation" || exit $? done exit 0 fi hibernated_vm_list = $ HOME / .vbox-hibernated-vms # получить список всех запущенных виртуальных машин, сохранить их состояние на диск и # вспомнить, что мы сделали эту hibernate_vms () {rm -f $ hibernated_vm_list # каждую строку в list: "vmname" {vm-uuid} local vm_list = "$ (VBoxManage list runningvms)", если [-z "$ vm_list"]; то # ничего не делать return 0 fi local tempfile = "/ tmp / VBoxPauseResume.tmp" echo "$ vm_list" & gt; $ tempfile local pids = "" при чтении строки; do vm_name = $ (echo "$ line" | sed 's / \ (". *" \). * / \ 1 /') vm_uuid = $ (echo "$ line" | sed 's /.* \ ({ . *} \) / \ 1 / ') echo "сохранение состояния vm $ vm_name для пользователя $ user" (VBoxManage controlvm $ vm_uuid savestate & amp; \ echo "$ vm_name $ vm_uuid" & gt; & gt; $ hibernated_vm_list & amp; & amp; \ echo "сохраненное состояние vm $ vm_name для пользователя $ user") & amp; pids = "$ pids $!" done & lt; $ tempfile wait $ pids rm -f $ tempfile} # возобновляет любые виртуальные машины, которые были сохранены hibernate_vms (). Использует параллельные # дочерние процессы для оттаивания нескольких VM быстрее thaw_vms () {if [-e $ hibernated_vm_list]; затем локальные pids = "" при чтении строки; do vm_name = $ (echo "$ line" | sed 's / \ (". *" \). * / \ 1 /') vm_uuid = $ (echo "$ line" | sed 's /.* \ ({ . *} \) / \ 1 / ') echo "возобновление vm $ vm_name для пользователя $ user" VBoxManage startvm $ vm_uuid & amp; pids = "$ pids $!" done & lt; $ hibernated_vm_list wait $ pids rm -f $ hibernated_vm_list fi} case $ операция в спящем режиме) hibernate_vms ;; приостановить) ;; оттаивание) thaw_vms ;; продолжить) ;; esac
(Сохраните этот сценарий как /etc/pm/sleep.d/02-VirtualBox и убедитесь, что он выполним)
Источник: http : //angryfifer.blogspot.de/2012/02/linux-hibernation-and-virtualbox.html
К сожалению, такая же проблема с этим скриптом ...
У меня была та же проблема: «пауза» virtual-guest-XP (HostKey-P) действительно работала несколько раз, но часто НЕ. Ввод VM-Guest-XP в «сохраненное состояние» позволяет системе спящий режим без проблем. Я написал небольшой скрипт, поместив его в /etc/pm/sleep.d/05_virtualbox
(не забудьте chmod a + x 05_virtualbox
), и управление питанием будет состояние сохранения и запуска процедуры на виртуальных машинах автоматически ...
#! / bin / sh # Файл: /etc/pm/sleep.d/05_virtualbox # (по крайней мере, в ubuntu / fedora) # # Этот хак сохраняет состояние всех пользователей VirtualBox-VM $ VBUSER в режиме hibernate / suspend, # сохраняет список этих виртуальных машин в $ VM_LIST_FILE, а при оттаивании / возобновлении он снова запускает все # VM в этом списке и удаляет $ VM_LIST_FILE. # ОШИБКИ: не используйте одно и то же имя для разных виртуальных машин или перезаписывайте скрипт, чтобы использовать UUID # # REAL hack, пытались как можно больше комментариев, но выбранный синтаксис был запутан, # извините ... также жаль плохой английский ... # # Writer (виновный): Lutz Langenbach # Copyleft: сделайте то, что вы хотите, с помощью Code # Help: VBoxManage 2 & amp; 1 | less или http://www.virtualbox.org/manual/ ch08.html VM_LIST_FILE = / var / tmp / vms-in-saved-state-list VBUSER = Put_YOUR_username_here PATH = / sbin: / usr / sbin: / bin: / usr / bin case "$ {1}" в suspend | hibernate ) # распечатать список результатов работы виртуальной машины: «vm-name» {vm-uuid} \n # извлечь только имя виртуальной машины и отправить echo -n «Отправить savestate для VM:» sudo -u $ VBUSER VBoxManage list runningvms \ | perl -ne 'chomp; s / ^ "([^"] *) ". * / \ 1 /; print $ _; system (" sudo -u' "$ VBUSER" 'VBoxManage controlvm \ "$ _ \" savestate & amp; & echo \ "$ _ \" & gt; & gt; '"$ VM_LIST_FILE"' "); echo ..done ;; resume | thaw) # получить каждую строку в $ VM_LIST_FILE, использовать ее как имя VM и отправить ей начало echo -n «Отправить резюме в VM» cat $ VM_LIST_FILE | perl -ne 'chomp; s / ^ "([^"] *)»* / \ 1 /. system ("sudo -u '" $ VBUSER "' VBoxManage startvm \" $ _ \ ""); ' rm -f $ VM_LIST_FILE эхо. ;; *) echo «Не знаю, что делать, 1-й Arg был: $ {1}; Должен быть приостановлен | спящий | резюме | оттепель ;;; esac