Microsoft анонсировала начало тестирования Initial Preview of GUI app support для WSL2 (Windows Subsystem for Linux)
Microsoft анонсировала начало тестирования Initial Preview of GUI app support для WSL2 (Windows Subsystem for Linux)
Microsoft анонсировала начало тестирования возможности запуска Linux-приложений с графическим интерфейсом в окружениях на базе подсистемы WSL2 (Windows Subsystem for Linux), предназначенной для запуска исполняемых файлов Linux в Windows. Приложения полностью интегрируются с основным рабочим столом Windows, в том числе поддерживается размещение ярлыков в меню Start, воспроизведение звука, запись с микрофона, аппаратное ускорение OpenGL, отображение информации о программах в панели задач, переключение между программами по Alt-Tab, копирование данных между Windows- и Linux-программами через буфер обмена.
Для организации вывода интерфейса Linux-приложений на основной рабочий стол Windows задействован разработанный в Microsoft композитный менеджер RAIL-Shell, использующий протокол Wayland и основанный на кодовой базе Weston. Вывод осуществляется при помощи бэкенда RDP-RAIL (RDP Remote Application Integrated Locally), который отличается от ранее доступного в Weston бэкенда RDP тем, что композитный менеджер не выполняет сам отрисовку рабочего стола, а перенаправляет отдельные поверхности (wl_surface) по каналу RDP RAIL для отображения на основном рабочем столе Windows. Для запуска X11-приложений применяется XWayland.
Вывод звука организован с использованием сервера PulseAudio, который также взаимодействует с Windows при помощи протокола RDP (для вывода звука применяется плагин rdp-sink, а для ввода - rdp-source). Комозитный сервер, XWayland и PulseAudio упакованы в форме универсального мини-дистрибутива WSLGd, включающего компоненты для абстрагирования графической и звуковой подсистемы, и основанный на дистрибутиве CBL-Mariner Linux, также используемом в облачной инфраструктуре Microsoft. WSLGd запускается с использованием механизмов виртуализации, а для совместного доступа между гостевым окружением с Linux и хост-системой Windows применяется virtio-fs.
В качестве RDP-сервера, запускаемого в Linux-окружении WSLGd, применяется FreeRDP, а на стороне Windows RDP-клиентом выступает mstsc. Для определения имеющихся графических Linux-приложений и их отображения в меню Windows подготовлен обработчик WSLDVCPlugin. С установленными в окружении WSL2 обычными дистрибутивами Linux, такими как Ubuntu, Debian и CenOS, выполняющийся в WSLGd набор компонентов взаимодействует через предоставление сокетов, обрабатывающих запросы по протоколам Wayland, X11 и PulseAudio. Подготовленные для WSLGd обвязки распространяются под лицензией MIT.
Для установки WSLGd требуется наличие 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 в устанавливаемых в WSL2 дистрибутивах предлагается использовать виртуальный GPU (vGPU). Драйверы vGPU для WSL предоставлены для чипов AMD, Intel и NVIDIA. Ускорение графики обеспечивается через предоставление прослойки с реализацией OpenGL поверх DirectX 12. Прослойка оформлена в виде драйвера d3d12, вошедшего в основной состав Mesa 21.0, и развиваемого совместно с компанией Collabora.
Работа виртуального GPU реализуется в Linux при помощи устройства /dev/dxg с сервисами, повторяющими WDDM (Windows Display Driver Model) D3DKMT ядра Windows. Драйвер организует соединение с физическим GPU при помощи VM bus. Linux приложения имеют тот же уровень доступа к GPU, что и родные приложения для Windows, без применения разделения ресурсов между Windows и Linux. Тестирование производительности на устройстве Surface Book Gen3 с GPU Intel, показало, что в родном Win32-окружении тест Geeks3D GpuTest демонстрирует 19 FPS, в Linux-окружении с vGPU - 18 FPS, а при программной отрисовке в Mesa - 1 FPS.
Bonus: Leverage WSL’s GPU access to run Linux applications with 3D acceleration
As part of this feature, we have also enabled support for GPU accelerated 3D graphics! Thanks to work that was completed in Mesa 21.0, any applications that are doing complex 3D rendering can leverage OpenGL to accelerate these using the GPU on your Windows 10 machine. This will make some of your more complex applications run smoothly, such as running Gazebo, a robotics simulation tool. This experience will soon be included by default with different WSL distributions, however you can gain access to it right away by following the instructions in this blog post to get the right graphics driver and to ensure your distro has a compatible Mesa version..
Below you can see the Gazebo application simulating a robot exploring a virtual cave, as well as the Rviz application visualizing the camera feed of the robot and its laser field sensor’s output. Thanks to GPU accelerated 3D graphics we can run this demo at 60 FPS!
Getting started with this feature
We are starting the rollout of this feature as an initial preview before we fully roll it into the WSL experience. To get started using Linux GUI app support, you’ll need to make sure you’re on Windows 10 Insiders preview build 21364 or higher. If you already have WSL installed, all you need to do is run wsl --update
and you’ll be set to use GUI apps. If you don’t have WSL enabled, running wsl --install
will install WSLg automatically as part of the initial WSL setup.
You can find the full install instructions at the GitHub repositories’ README: https://github.com/microsoft/wslg . We also highly recommend that you have GPU compute support enabled in WSL for the best performance, please see this section of the install instructions to see how you can ensure that feature is enabled.