Удаленный доступ к виртуальной машине через Web-браузер

Помимо возможности получения доступа к виртуальной машине QEMU/KVM через приложения-клиенты для GNU/Linux и Windows, существует возможность получения доступа через Web-клиенты из Web-браузеров, обладающих поддержкой технологий "HTML5 WebSockets" [http://dev.w3.org/html5/websockets/] и "HTML5 Canvas" [http://dev.w3.org/html5/2dcontext/]. 

Браузеры Chrome [http://chrome.google.com/], Chromium [http://www.chromium.org/], Firefox [http://firefox.com], Opera [http://opera.com] обладают поддержкой технологий. Во всех последних версиях вышеуказанных браузеров поддержка технологии "HTML5 WebSockets" включена по умолчанию. 

Internet Explorer (штатный браузер ОС Windows) и Safari (штатный браузер ОС MacOS и iOS) - возможно тоже поддерживает, эту технологию но настоятельно не рекомендуется использовать эти браузеры кроме как в роли инструмента для загрузки вышеуказанных браузеров по следующим причинам:

  • Привязка к закрытым коммерческим платформам,
  • Сложность и дороговизна Web-разработки в случае поддержки данных данных браузеров.

Суть технологии "HTML5 Canvas" заключается в возможности построения изображений, а суть "HTML5 WebSockets" заключается в том что она позволяет Web-браузеру установить соединение с Web-сервером по аналогии установления соединения обычной программы с обычным сокетом, благодаря чему данные от сервера могут отправляться Web-бараузеру без запроса. 

К содалению, Web-браузеры не могут подключаться напрямую к сокетам им требуется сервис посредник ТСP-прокси, преобразующий трафик от соединения с обычным сокетом сервиса и соединением с Web-сокетом. Одним из самых расспространеных сокет-прокси Websockify [https://github.com/kanaka/websockify]. 

Websockify разрабатывается как составная часть проекта noVNC [http://novnc.com] направленного на разработку и сопровождение браузерного VNC-клиента. Также существует SPICE-клиент SPICE HTML5 [http://www.spice-space.org/page/Html5].

Запуск Websockify

Для запуска а Websockify (без поддержки SSL) достаточно с помоью Git загрузить из репозитория свежую версию:

$ git clone https://github.com/kanaka/websockify.git

и запустить его из консоли: 

$ websockify/websocketproxy.py 5959 localhost:5900

где 5959 - порт Web-сокета, localhost:5900 имя или IP-адрес и TCP-порт обычного сокета. 

Запуск Web-клиентов

Для запуска VNC- и SPICE-клиента, достаточно загрузить свежую версию из репозитория:

для noVNC:

$ git clone git://github.com/kanaka/noVNC

для SPICE HTML5:

$ git://anongit.freedesktop.org/spice/spice-html5

После загрузки в полученных папках достаточно открыть соответствующие HTML-файлы (spice.html или vnc.html) и можно приступать к работе.

Скриншоты

noVNC:

SPICE HTML5:

Плюсы и минусы

Недостатки:

  • Прорисовка видео очень медленная
  • Управление курсором виртуальной мыши практически не возможно без использования виртуального графического планшета.
  • Горячие клавиши не работают
  • Звук не передается
  • Проброс USB-устройств с клиента не осуществляется
  • Работа с буфером обмена не осуществляется

Достоинства:

  • Возможность запуска из любого устройства и операционной системы при условии наличия подходящего Web-браузера.
  • Нет необходимости в установке программного обеспечения
  • Открытый код
  • Отсутствие зависимостей с закрытым кодом (например: Java, Flash, SilverLight)

Внимание: использование QXL-видеокарты при работе через браузер не рекомендуется так как возникают ошибки в прорисовке.