вторник, 23 мая 2017 г.

VirtualBox seamless desktops — интеграция рабочих столов в полноэкранном режиме гостевой ОС

Недавно я выпускал видео о том, какие бывают режимы отображения гостевой ОС в VirtualBox.
Там я отметил, что в полноэкранном режиме есть некоторые нюансы с захватом клавиатуры. Если вы хотите работать с windows в полноэкранном режиме на другом рабочем столе, то вы заметите проблемы с переключением обратно на рабочий стол Linux. В этой заметке я расскажу почему так происходит и как это исправить.
Давайте я поясню, как я планировал работать с виртуалкой в полноэкранном режиме.
Мне бывает нужно пользоваться Ae для создания шейповой анимации. Но перезагружаться в винду, делая видео о линуксе реально неудобно. Потому что сами материалы я снимаю в линуксе. Можно конечно работать в винде, виртуалить линукс и потом монтировать в каком-нибудь премьере или вегасе, но мне такой вариант не очень нравится. Анимация у меня простенькая, поэтому я её лучше создам в виртуалке, а всю остальную работу буду делать на Linux’е.
Я располагаю окно виртуалки на отдельном рабочем столе. Как я уже говорил, в полноэкранном режиме окна виртуалки как бы нет, и то что вы видите очень похоже на то, как будто перед вами реалка. Работаешь ты себе в линуксе и вот понадобилась винда. Раз — переключился на другой рабочий стол — ты в винде. Сделал, что требовалось, теперь надо обратно в линукс.
Но проблема в том, что после переключения на рабочий стол с Windows вы не можете так же быстро переключиться обратно. Сочетание клавиш, которое у вас на это назначено передаётся винде, а хост его не воспринимает. То есть чтобы переключиться обратно на стол с Linux, нужно отпустить захваченную виндой клавиатуру, нажав хост-клавишу, и только после этого нажимать сочетание клавиш для возврата на первый рабочий стол.
Согласитесь, это немного напрягает. Мне например неудобно задумываться захвачена клавиатура или нет. И я стал разбираться, можно ли это неудобство устранить.
Какие варианты пришли мне в голову?
Первое о чём я подумал — это передача данных по сети. Например, можно написать клиент-серверное приложение, и настроить его так, что гость будет посылать сигнал хосту о нажатии определённого сочетания. Ловить это сочетание можно даже с помощью AutoHotKey. На стороне хоста приложение должно сымитировать нажатие хост-клавиши и полученного по сети сочетания клавиш. Но из этого у меня ничего не вышло. Я попробовал сделать симуляцию нажатия с помощью xdotool по ssh из гостя. Но это всё глючило и фактически клавиатура не освобождалась.
До этого у меня была идея использовать synergy, потому что она вроде как заточена для передачи данных о нажатиях по сети. Но это был бы мега-костыль. Во-первых интеграцией мыши должна заниматься сама VirtualBox, а во-вторых даже если она что-то и симулировала бы на хосте, это не решило бы проблему с глюками.
Также у меня была идея посмотреть, можно ли это сделать с помощью VirtualBox API. Я честно говоря не выяснил это. Но по идее, надо было бы сделать так, что при нажатии определённых клавиш в гостевой ос, высылалось бы сообщение виртуалбоксу о том, что надо отпустить захваченную клавиатуру и сымитировать это сочетание для хоста. Но я не копался в эту сторону так как решение уже нашел.
В конечном итоге нужно было всего лишь отключить автозахват клавиатуры. Это делается в менеджере виртуальных машин в меню Файл, Настройки, Ввод, Автозахват клавиатуры. Галочку нужно снять. Имейте в виду, что теперь все сочетания будут выполняться на хосте, то есть нажимая alt-tab на рабочем столе с windows вы будуте переключаться между окнами линукса, а не винды. Но это не страшно, зато теперь можно очень удобно переключаться между рабочими столами с Linux и Windows. Такую конфигурацию я назвал Seamless Desktops.
Надеюсь, эта информация была вам полезна.
В следующий раз я расскажу как работать с режимом интеграции экрана на двух мониторах.

Комментариев нет:

Отправить комментарий