войти зарегистрироваться

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

индекс
0,00

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. Опубликовал из песочницы, просьба ногами сильно не бить. Но здоровая критика, естественно, всегда приветствуется ;)

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

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

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

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

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

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

          а пинговать ничего не надо 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-сервер ждет подключений.
          • хм… видимо у меня VRDP не настроена.

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

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

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

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

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

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

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

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

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

        и соответственно увидеть виндовый рабочий стол из консоли???
        или это фантастика?!
  • спасибо. в избранное
  • Есть одна грабля — у меня на ноуте с ATI частое переключение между двумя иксами стабильно вводило ядро в панику.
  • Спасибо, заработало. Появился повод свой xorg.conf доработать напильником — ракообразно винда на втором экране отображается :(
    Получите свой плюс в карму :)
  • а будет ли винда (или другая гостевая ось), запущенная подобным образом, нормально выключаться при выключении компа? или нужно сначала руками повыключать все оси запущенные таким макаром?
    • без дополнительных телодвижений не будет. но это решаемо например через инит-скрипты, где можно прописать suspend всех действующих машин.
  • Спасибо, очень полезная фича!
    Хотелось бы узнать как поставить кастомное разрешение в виртуалке? Вычитал где-то про
    $ VBoxManage getextradata «WinXP» «CustomVideoMode1» «1440x900x32»
    но решение, увы, не рабочее :(
Только авторизованные пользователи могут оставлять комментарии. Авторизуйтесь, пожалуйста.