Корпорация Microsoft запустила тестирование запуска Linux-приложений с графическим интерфейсом в ОС Windows. Реализовано это на основе подсистемы WSL2 (Windows Subsystem for Linux), которую компания разрабатывает много месяцев. Отмечается, что приложения полностью интегрируются с рабочим столом Windows, включая размещение ярлыков в меню Start, воспроизведение звука, запись с микрофона, аппаратное ускорение OpenGL. Также реализовано отображение информации о ПО в панели задач, между программами можно переключаться по Alt+Tab, данные между приложениями Linux и Windows можно копировать при помощи буфера обмена.
Интерфейс Linux-приложений на основной рабочий стол ОС Windows выводится при помощи композитного менеджера RAIL-Shell. Он использует протокол Wayland и основан на кодовой базе Weston. Вывод реализован посредством бэкенда RDP-RAIL (RDP Remote Application Integrated Locally), который не выполняет отрисовку рабочего стола, а перенаправляет отдельные поверхности по каналу RDP RAIL для отображения на основном рабочем столе Windows. X11-приложения запускаются при помощи XWayland.
Остальные подробности
Компания использует интересный способ вывода звука — при помощи сервера PulseAudio. Сервер взаимодействует с операционной системой посредством протокола RDP (для вывода звука применяется плагин rdp-sink, а для ввода — rdp-source). Этот сервер и XWayland помещены в универсальный мини-дистрибутив WSLGd. В его состав входят компоненты для абстрагирования как графической, так и звуковой подсистем.
Базируется все это на дистрибутиве CBL-Mariner Linux, который Microsoft тоже использует — в своей облачной инфраструктуре. Мини-дистрибутив запускается при помощи механизмов виртуализации. В то же время совместный доступ между гостевым окружением с Linux и хост-системой Windows реализован на базе virtio-fs.
Разработчики выбрали FreeRDP в качестве RDP-сервера, который запускается в Linux-окружении WSLGd. Для той же задачи в ОС Widnows используется mstsc. Обработчик WSLDVCPlugin применяется для определения имеющихся графических Linux-приложений и их отображения в меню Windows. Он позволяет взаимодействовать с дистрибутивами Linux в окружении WLS2 посредством предоставления сокетов, которые обрабатывают запросы по протоколам Wayland, X11 и PulseAudio. Подготовленные для WSLGd обвязки распространяются под лицензией MIT.
Как получить доступ к новым возможностям?
Для этого нужно установить Windows 10 Insider Preview как минимум версии 21362. Разработчики обещают, что в ближайшем будущем для установки WSLGd будет достаточно и обычных выпусков Windows, при этом пользователю не требуется участвовать в программе Insider Preview.
Устанавливается WSLGd при помощи команды «wsl --install», например, для Ubuntu — «wsl --install -d Ubuntu». В случае уже существующих окружений WSL2, установка WSLGd осуществляется через команду «wsl --update» (поддерживаются только окружения WSL2, в которых применяется ядро Linux, а не трансляция вызовов). Графические приложения устанавливаются через штатный пакетный менеджер дистрибутива.
WSLGd позволяет работать лишь с 2D-графикой. Если нужна 3D-графика на основе OpenGL, используется иной механизм — виртуальный GPU (vGPU). Драйверы для него предоставляются в трех вариантах — для чипов AMD, Intel и NVIDIA. Работа с графикой выполняется путем предоставления прослойки с реализацией OpenGL поверх DirectX 12. Прослойка оформлена в виде драйвера d3d12, вошедшего в основной состав Mesa 21.0, и развиваемого совместно с компанией Collabora.
В Linux виртуальный GPU реализован на основе устройства /dev/dxg с сервисами, повторяющими WDDM (Windows Display Driver Model) D3DKMT ядра Windows. В этой системе драйвер организует соединение с физическим видеочипом через VM bus. У приложений Linux тот же уровень доступа к GPU, что и у родных приложений для Windows, разделения ресурсов между Windows и Linux нет.
В ходе тестирования производительности системы на базе Surface Book Gen3 с GPU Intel выяснилось, что тест Geeks3D GpuTest показывает 19 FPS в Windows, 18 FPS — в Linux. В Mesa же, при программной отрисовке — всего 1 FPS.
Немного бэкграунда
WSL2 стало доступным для пользователей Windows с 20 августа 2020 года — именно тогда Microsoft выпустила кумулятивное обновление KB4566116.
После его установки пользователи ОС Windows 10 версии 1903 и версии 1909 стали тестировать WSL2, причем отзывы были в большинстве своем положительные. До 20 августа была доступна лишь WSL первой версии, и только в Windows 10 версии 2004.
Что касается первой версии WSL, то работа над ней началась несколько лет назад. Официальное заявление о подсистеме было сделано на конференции Microsoft Build 2016. Анонс был коротким — тогда о возможностях WSL рассказали в течение пары минут. Но он вызвал такой ажиотаж и наплыв трафика на страницу с анонсом, что у организаторов конференции даже возникло подозрение в том, что кто-то организовал DDoS-атаку.
C тех пор WSL эволюционировала очень сильно, и сейчас подсистема продолжает развиваться.
Anshi85
Жду, когда можно будет запустить Remmina из под Windows, по мне так самый удобный менеджер для работы с удаленными серверами RDP/SSH, сколько пробовал найти аналоги на Windows, никак не мог подобрать все не то. Ну и еще круто было бы полноценный терминал запускать как приложение, а так приходится использовать для работы Linux Mint, а для развлечений Windows 10
paxlo
MobaXterm функционал круче чем в ремине
Anshi85
А мне MobaXterm не понравилась, привык уж очень к Remmina, не могу уже без нее. Понимаю что глупо, может в других программах фунционал богаче или они красивее, но не могу себя заставить работать через другие такие программы.
dopk
Для себя нашел RD Tabs, поддерживает только RDP, но мне не хватало именно вкладок.
r3l0c
Давно запускаю кучу приложений с виртуалки, в том числе remmina. Через ярлык с коннектор по ssh и указанием ip винды и дисплея — x-сервера в винде. Буду дома-- дополню коммент с конкретной инфой.
Anshi85
Спасибо, поднял вам карму авансом) Жду инструкций)
r3l0c
Спасибо. Добрался до дома.
Ставим VcXsrv X Server на винду, запускаем с дефолтными параметрами, только ставим «Disable access control». Ярлык на рабочем столе в винде
C:\Windows\System32\OpenSSH\ssh.exe r3l0c@192.168.2.2 " `DISPLAY=192.168.2.4:0 remmina`"
где 192.168.2.2 — адрес виртуалки с убунтой, или адрес в докере. А 192.168.2.4 — ip винды. Еще возможно понадобится обновить openssh в винде, и нужно будет настроить авторизацию по ключу). На самом деле я так запускаю не только remmin-у, но и vscode к примеру).MisterN
vscode — то зачем? Он же и на винде норм?
r3l0c
Иногда некоторые расширения под виндой ловят глюки- проявляется в виде лагов, очень редко, но бывает. Я бы даже сказал очень редко).
MisterN
Это например какие?
krote
давно пользуюсь mRemote — умеет RDP,VNC,SSH и не только
Sha644
Всё чаще встречаю конструкцию, где на домашнем пк хост та или иная линукс ось, а для игр и офисного ПО используется gpu passthrough в виртуалке с w10. Возможно и вас устроит это.
kmx236
Попробуйте XMANAGER Для личного использования бесплатна вроде как вся линейка приложений. Мне очень понравился их XSHELL