Виртуализация

индекс
89,23

VirtualBox. Удобное переключение между Host и Guest

Те, кто работает админом и занимается тех.поддержкой пользователей в крупных конторах, часто сталкиваются с необходимостью держать на рабочей машине Windows наряду с любимой ОС — в данном случае Debian GNU/Linux. Задачи, вынуждающие ставить винду могут быть разными. Средства тоже: кто-то ставит VMWare, кто-то qemu, я пользуюсь VirtualBox. В общем виртуальными машинами сейчас никого не удивить. Я хочу поделиться с людьми небольшим, но очень удобным финтом.

VirtualBox, как большинство современных VM умеет работать в так называемом headless-режиме, то есть без графической оболочки. Для доступа к консоли гостевой ОС в этом случае используется протокол VRDP.
Что мне не нравится в дефолтной схеме использования виртуальной машины. В процессе работы иногда приходится перезапускать иксы. И, как следствие этого, умирает виртуальная машина. Потом она снова нужна, снова ее запускаем, ждем когда загрузится винда — довольно муторно. Для решения этой проблемы я сделал следующее. В файл /etc/rc.local дописал следующие строчки:

su rigid -c "VBoxHeadless -a 127.0.0.1 -s WinXP" &
X :1 vt08 &
DISPLAY=":1" rdesktop-vrdp -f localhost &


Что делают эти строки. Сначала запускается сам VirtualBox в headless режиме с образом WinXP. При этом VRDP биндится только на локальный адрес 127.0.0.1 — чтобы нельзя было подключиться к морде мирт.машины извне. Затем запускается вторая копия X-сервера на восьмой консоли. И, наконец, в окружении только что запущенного X-сервера запускается VRDP-клиент в полноэкраннном режиме и подключается к уже запущенной машине.

Что в итоге я получил.
  • Виртуальная машина не привязана к моей рабочей X-сессии, можно перезапускать иксы сколько вздумается, не прерывая работу вирт.машины.
  • Морда винды рисуется на отдельную консоль в полноэкранном режиме. Есть возможность быстро переключаться между виндовой и гномьей сессиями стандартными сочетаниями: Ctrl-Alt-F7 и Ctrl-Alt-F8


Таким образом можно запустить не одну а несколько гостевых систем и повесить их морды на разные консоли (VBoxHeadless умеет менять порт, на который биндится). Кроме того, таким же образом можно запустить гостевые системы на отдельном мощном сервере, а на своей рабочей станции только рисовать к ним морды. В общем, насколько хватит фантазии.

PS. Опубликовал из песочницы, просьба ногами сильно не бить. Но здоровая критика, естественно, всегда приветствуется ;)
+95
8 июля 2009, 22:53
95

комментарии (62)

0
librarian #
Интересно, только вопрос, нет ли там проблемы с вводом с клавиатуры? А то у меня постоянная проблема через rdp
+3
rigid #
Нет. у меня абсолютно никаких проблем. Но, естественно, комбинации Ctr-Alt-Fn в гостевую ОС не попадут. Но Ctrl-Alt-Del спокойно доходит. Работаю по такой схеме наверно с неделю-полторы и пока проблем не возникало. Гостевые ОС: Windows XP SP3 и Windows 7 RC1. Хост-ОС — Debian Unstable. Версия VirtualBox 1.6

Offtopic: спасибо за первый плюс :)
0
vasilisc #
плюсанул за клевую тему
вопрос? а почему такая версия старая 1,6? /me юзаем уже 3,0 \m/ =)
0
rigid #
да вот мы используем такую софтину, как DameWare NT Utilities. И там есть Remote Control — аналог РАдмина. Если винда крутится в виртуалбоксе 1.x — все ок, если перехожу на 2.x — то при подключении к клиентскому компу Remote Control'ом виртуалка начинает жутко тормозить и жрать процессор, насколько ей это позволяет система. Винда практически вешается. А как правило в этов ремя на телефоне висит юзер и ждет решения своих проблем. Работать невозможно. Подозреваю, что это связано с тем, что на компе видео нвидия, а в иксах драйвер nv — встроенный который, т.к. нет желания с каждой сменой ядра/иксов париться с утаскиванием новых дров (веб-траффик на предприятии жестко лимитируется). С третьей веткой бокса еще не пробовал возиться. Но в ближайшее время обяательно буду пробовать.
0
vasilisc #
у меня убунту дома и на работе, и в обеих есть технология DKMS
поэтому драйвера nVidia не скачиваются заново при смене ядер!
папе Debian уважение!
–1
twangel #
Интересно. Спасибо.
0
kirik #
Спасибо! Как раз то что нужно! А то после того как разворачиваешь окошко приходится все иконки на рабочем столе гостевой системы по местам расставлять :)
–1
inkvizitor68sl #
хм… а пакеты не могли бы перечислить которые ставить надо)?

а то:
bash: rigid: команда не найдена
rdesktop-vrdp: команда не найдена

aptitude search ничего умного не сказал
+1
vitek #
rigid — это имя локального пользователя, от которого запускается VirtualBox. Могли бы хотя бы по нику автора статьи догадаться :)
Для управления виртуалкой можно использовать обычный rdesktop.
А rdesktop-vrdp поставляется вместе с самим VirtualBox'ом, он позволяет работать с USB-устройствами.
0
rigid #
Кстати, с обычным rdesktop у меня постоянные проблемы с русским языком в удаленной системе. русская раскладка не работает толком, не получается набрать символ "/" и многие нужные комбинации клавиш не попадают в удаленную систему. Курение манов на тему rdesktop не помогло. Возможно, просто чегото не понимаю.
С использованием VRDP таких проблем не возникло — все завелось из коробки, как говорится.
Кроме того, через VRDP можно получить доступ к консоли гостевой ОС еще до того, как эта самая гостевая ОС станет в состоянии предоставлять сервис RDP или SSH.
0
inkvizitor68sl #
VBoxHeadless -a 127.0.0.1 -s WinXP не пашет тоже…

пашет VBoxHeadless -s WinXP, но тогда я законнектиться не могу, хост вообще гостей не пингует.
0
rigid #
не пашет — что пишет? какие симптомы?

а пинговать ничего не надо VBoxHeadless поднимает VRDP-сервер на локальной хост-машине. то есть rdesktop-vrdp надо натравливать на localhost.
VBoxHeadless биндит свой VRDP-сервер по дефолту на 0.0.0.0:3389.
Возможно, что Ваша вирт.машина по какойто причине не стартовала. Мжно проверить:

rigid@rigid-laptop:/$ VBoxHeadless -s test
VirtualBox Headless Interface 3.0.0
© 2008-2009 Sun Microsystems, Inc.
All rights reserved.

Listening on port 3389

В соседней консоли:
rigid-laptop:/# netstat -lpn46 |grep 3389
tcp 0 0 0.0.0.0:3389 0.0.0.0:* LISTEN 11784/VBoxHeadless

Как видим, виртмашина запущена и VRDP-сервер ждет подключений.
0
inkvizitor68sl #
хм… видимо у меня VRDP не настроена.

пойду шаманить с вбоксом…
0
Quadrix #
Проблема, насколько я понял, заключается в том, какой пакет Вы поставили. Если VirtualBox OSE, то здесь отсутствует поддеркжа rdp. У меня такие же проблемы были. Качайте с офф сайта обычную версию.
0
vitek #
Можно, наверное, перенести в «Виртуализацию». Кармы уже хватает ;)
0
rigid #
перенес :)
0
mente #
Интересно как дела с VirtualBox 3.0. Сейчас проверим :)
0
f3ath #
Только что проверил на трешке, все получилось. Кстати, Вы не знаете, как у нее тулбар отключить этот дурацкий?
0
rigid #
а о каком тулбаре идет речь? у меня в 1.6 в VRDP никаких тулбаров. может в трешке сделали? не смотрел еще.
0
mente #
Да, в трешке появился тулбар. Он у меня вообще странный: есть, нету, есть нету. От луны зависит.
Действительно, полет нормальный. Теперь бы подумать как на второй моник запустить вторую виртуалку :)
0
f3ath #
Я запускаю без ремот-десктопа. Сначала параллельные иксы на 8-м терминале, а потом обычную (не безголовую) сессию VirtualBox. Так вот у третьего VB в фулскрине внизу появился всплывающий тулбар. Он меня бесит :)
0
CaptainFlint #
В настройках машины отключается, ЕМНИП.
0
f3ath #
В ГУИ-настройках не вижу ничего про тулбар. В xml-файлике обнаружилось только это

f3ath@a1 ~ $ grep -i toolbar .VirtualBox/Machines/WinXP/WinXP.xml
<ExtraDataItem name=«GUI/MiniToolBarAutoHide» value=«on»/>
f3ath@a1 ~ $
+1
CaptainFlint #
0
f3ath #
И правда. Спасибо!
0
f3ath #
А ключ в xml, оказывается, выглядит вот так:

<ExtraDataItem name=«GUI/ShowMiniToolBar» value=«no»/>
0
f3ath #
Автор, вы мой кумир! На работе приходится иногда запускать винду в виртуалке. Выкручивался, запуская ее в фклскрине на втором рабочем столе и нажимая Host+P, перед переключением между столами. Ваш вариант без сомнения удобнее.
+1
f3ath #
Теперь бы вот еще как-то ускорить переключение между двумя разными иксами. У меня на ноуте около 3 секунд проходит с момента нажания Ctrl+Alt+F7(8) до появления картинки.
0
Shafeev #
Автор просветите, если можете. Возможно ли запускать vrdp сессию на два монитора. Мануал по virtualbox как-то туманно сообщает о наличии такой возможности. Мол можете, только укажите разрешение сразу двух моников.
0
rigid #
Боюсь, не дам точного ответа, т.к. сам с таким не сталкивался, но могу предположить, что здесь имеется ввиду суммарное разрешение двух мониторов, типа как в xrandr. То есть, если у Вас два монитора, например ноутбучный 1280x800 и обычный 1280x1024 то суммарное разрешение получится:
1280+1280 = 2560
max(800, 1024) = 1024
итого: 2560x1024

Както так наверно…

Кстати, а что мешает в тех иксах, которые будут обслуживать vrdp-сессию, перед запуском клиента запустить xrandr, который отстроит все, как надо, на два монитора? Или vrdp-клиент в этом случчае не растягивается?
0
Shafeev #
не было случая проверить, как только проверю напишу подробный отчет.
0
pcmaniac #
Я для этих целей использую VMWare Server (благо бесплатный) на отдельной очень мощной машине, а так… ваш вариант очень даже интересен — стоит попробовать. Спасибо)
+3
meako #
Недостаток этого метода — отсутствие Shared Clipboard.

А так, да неплохо. Но мне хватает переключения между виртуальными столами, на одном из которых висит виртуалка.
Иксы не так часто перезапускаю, кстати в виртуалбоксе можна замораживать гостевую систему, так что после перезапуска она просыпается за пару секунд.
0
rigid #
да, замораживание — это здорово. но это же надо вспомнить что где-то за кучей окон крутится виртуалка. А я часто про это забываю. И иногда бывает что в то время, когда мне надо сбросить иксовую сессию, а в это время в виртуалке крутится какое-нибудь длительное и важное задание. Я об этом могу забыть и вспомнить уже потом, когда поздно.
А shared clipboard, это как раз та фича, которой я готов пожертвовать :)
0
seleko #
спасибо, полезно
0
vzgromozdun #
может я не уловил какой-то тонкости, но чем вам утилитка screen не устраивает?
0
rigid #
а как эта утилитка поможет во взаимодействии с VBox? Насколько я могу понять из man screen, оно позволяет переключать несколько консольных сессий на одном терминале. А у нас задача — удобное переключение между иксовой сессией и полноэкранной графической же консолью гостевой ОС. Или я что-то не так понял?
0
vzgromozdun #
аа, я просто подумал что у Вас текстовое терминальное соединение с виртуалкой — в таком бы случае screen действительно помог бы
0
mocksoul #
для вашей системы скорее всего уже есть нормальные init скрипты (запуск-то ладно, а вот остановка? в генте например можно сделать так чтобы виртуалки при ребуте сейвились а потом снова запускались быстро).

и я так и не понял на кой черт сразу запускать rdp? Ну запустили в headless и пускай себе висит. Надо будет зайти в винду — в иксах ткнули в rdp и зашли. Закончили работать — вырубили rdpviewer (или что там у вас). Слишком жирновато и неудобно отдельные иксы для одного rdp-просмотрщика запускать (например, буфер обмена не синхронизируется).
0
rigid #
Фишка в том, что винда будет в соседней консоли в полный экран. Это не жирно, т.к. там не запускается никакой DE или даже WM. Одни голые иксы и rdesktop-vrdp в них в полный экран. Современные машины с их гигабайтами RAM вполне могут себе позволить еще один голый X-сервер, если уж позволили запустить виртуалку с виндой. И я осзнанно, специально уходл от винды в окошке. Мне нужна был именно полноэкранная винда в отдельной консоли Мне кажется, что так удобнее. Вам может быть удобнее по-другому — не спорю ;)
0
Zharskiy #
вопрос такой:
есть не очень современная машина (в процессоре нет поддержки бита виртуализации), но «с гигабайтами RAM» (2)
т.е. egrep 'vmx|svm' /proc/cpuinfo

машина используется как dev/testing сервер

как и с помошью чего запустить под CentOS 5.2 без установки WINE/XFree/XOrg Windoze XP SP3 (IE7 или IE8)?

и соответственно увидеть виндовый рабочий стол из консоли???
или это фантастика?!
0
CTpaHHoe #
спасибо. в избранное
0
darkk #
Есть одна грабля — у меня на ноуте с ATI частое переключение между двумя иксами стабильно вводило ядро в панику.
0
Delsian #
Спасибо, заработало. Появился повод свой xorg.conf доработать напильником — ракообразно винда на втором экране отображается :(
Получите свой плюс в карму :)
0
angelsaint #
а будет ли винда (или другая гостевая ось), запущенная подобным образом, нормально выключаться при выключении компа? или нужно сначала руками повыключать все оси запущенные таким макаром?
0
rigid #
без дополнительных телодвижений не будет. но это решаемо например через инит-скрипты, где можно прописать suspend всех действующих машин.
0
o_O_Tync #
Спасибо, очень полезная фича!
Хотелось бы узнать как поставить кастомное разрешение в виртуалке? Вычитал где-то про
$ VBoxManage getextradata «WinXP» «CustomVideoMode1» «1440x900x32»
но решение, увы, не рабочее :(
0
nam #
поставил virtualbox 3.2.8 puel (что USB поддерживает) под ubuntu 10.04, пробую vboxheadless и vboxmanage — ругается что не установлены программы такие, можно установить выполнив «sudo apt-get install virtualbox-ose». но мне не нужна OSE-версия, т.к. в ней нету USB. как быть, кто сталкивался? как же запустить на фоне виртуалку в virtualbox puel??
0
rigid #
VBoxManage и VBoxHeadless — регистр букв важен.
0
nam #
Большое спс!!) Возникили другие проблемы. Завтра доковыряю.
0
nam #
есть ещё такой вопрос — образ этой виртуалки лежит на виндовом серваке в домене, линуксовая машина тоже в домене, как сделать так, чтоб при загрузке автоматом маунтилась папка с виндового сервака с образом виртуалки?
0
rigid #
например прописать в /etc/fstab или воспольззоваться автомаунтером, типа autofs
0
nam #
решил прописать в fstab.
/dev/disk/by-id/ata-SAMSUNG_SP0812N_S00MJ10Y228737-part5 swap swap defaults 0 0
/dev/disk/by-id/ata-SAMSUNG_SP0812N_S00MJ10Y228737-part1 / ext4 acl,user_xattr 1 1
proc /proc proc defaults 0 0
sysfs /sys sysfs noauto 0 0
debugfs /sys/kernel/debug debugfs noauto 0 0
usbfs /proc/bus/usb usbfs noauto 0 0
devpts /dev/pts devpts mode=0620,gid=5 0 0
//fileserver/reception /toshiba cifs auto,username=recept,password=111,domain=HOLDING,gid=users,file_mode=0664,dir_mode=0775,iocharset=iso8859-15 0 0

выдаёт:
«Reception:/etc # sudo mount -av
[mntent]: предупреждение: no final newline at the end of /etc/fstab
mount: proc уже примонтирован на /proc
mount: devpts уже примонтирован на /dev/pts
mount.cifs kernel mount options: ip=192.168.0.1,unc=\\fileserver\reception,file_mode=0664,dir_mode=0775,iocharset=iso8859-15,gid=100,ver=1,user=recept,domain=HOLDING,pass=********
ничего не было примонтировано»

странно. чё лишнего? куда купать?
0
rigid #
единственное, какой криминал вижу, это отсутствие перевода строк после последней строчки в fstab. И то — это больше замечание, чем серьезная ошибка. Если шара монтируется, значит все нормально.
0
nam #
С этим получилось, но вот косяк:
прописал в boot.local

su reception -c '/usr/bin/VBoxManage startvm 166 --type vrdp'

стартовать не хочет при запуске, ругается что не может писать в папку или что-то в этом роде (NS_ERROR_FAILURE), однако после загрузки руками запускается идеально. есть мысль, что fstab маунтит папку после запуска boot.local

что придумать, уже и не знаю)
0
rigid #
прописать перед этойстрочкой sleep 30 — будет пауза в 30 секунд. можно подобать задержку
0
nam #
то же самое, не помогло( у меня openSUSE 11.3
0
nam #
и в том же месте сначала ругается, что не установлен vboxdrv, хотя опять же после загрузки ОСи всё работает.
0
rigid #
думаю это связано стем же. оно не успело стартовать

а что за линукс у вас?
0
nam #
opensuse 11.3
0
nam #
Разобрался. В Сусе надо было создать after.local и в него прописать автозагрузку. работает!)))
0
nam #
Осталась одна проблема — при автостарте виртуалки она не видит воткнутый в USB принтер. Хотя хост линуховый всё видит.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.