Информация: https://www.redhat.com/promo/fonts/
Загрузить: https://www.redhat.com/promo/fonts/ [ ! d2]
@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
@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
@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
@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