Разработчиците на компанията Collabora представиха проекта xrdesktop, в която с подкрепата на Valve, разработва се библиотека с елементи за взаимодействие с традиционните настолни компютри в триизмерна среда обучени с 3D очила и каски за виртуална реалност. Кодът на библиотеката е написан на C и се разпространява под лиценза MIT. Готовите компилации са готови за Arch Linux и Ubuntu 19.04 и 18.04.
В момента Linux вече разполага със средствата за директно генериране на слушалки за виртуална реалност (разширения на Vulkan VK_EXT_acquire_xlib_display за X11 и VK_EXT_acquire_wl_display за Wayland), но няма поддръжка за правилно ниво на рисуване на прозорци в 3D пространство и синхронизация на честотата на опресняване на екрана.
Относно Xrdesktop
Целта на проекта xrdesktop е да разработи методи, които позволяват използването на класически интерфейси във виртуална среда, фокусиран върху извеждане на двуизмерен екран и контрол с помощта на клавиатурата и мишката.
Компонентите xrdesktop разширяват наличните мениджъри на прозорци и композитни файлове с възможности да използват времето на работа на системи за виртуална реалност, за да изобразяват прозорци и работния плот в триизмерна виртуална среда.
В xrdesktop, се пропагандира идеята за интегриране в съществуваща работна среда без необходимост от стартиране на специализиран композитен администратор отделете и позволете на съществуващите потребителски настройки, използвани с обикновен монитор, да се използват с 3D каски.
Архитектурата на проекта предполага възможността за интегриране с всеки работен плот, но на текущия етап на разработка са внедрени компоненти за поддръжка на слушалки за виртуална реалност за KDE и Gnome.
За KDE поддръжката за 3D каски се реализира чрез приставката, подобна на Compiz, а за GNOME чрез набор от пакети за GNOME Shell.
Тези компоненти отразяват съществуващите прозорци във виртуалната среда на 3D каските под формата на отделна сцена или в режим на наслагване, в който прозорците на работния плот могат да бъдат насложени върху други работещи приложения за виртуална реалност.
В допълнение към представителните механизми, xrdesktop предоставя компоненти за навигация и поддръжка на въвеждане използвайки специализирани пространствени контролери.
xrdesktop, въз основа на информация от VR контролерите генерира входни събития обикновен, симулиращ използването на клавиатурата и мишката.
Xrdesktop включва няколко библиотеки които създават текстури на прозореца за времето на работа на VR с помощта на OpenVR, както и базирана на API система за изобразяване на целия работен плот в 3D среда.
Тъй като xrdesktop не предоставя собствен мениджър на прозорци, е необходима работа за интегриране със съществуващите мениджъри на прозорци (xrdesktop може да бъде пренесен на всеки X11 или Wayland мениджър на прозорци).
Основните компоненти на xrdesktop:
гулкан: glib обвързване за Vulkan, което предоставя класове за обработка на устройства, шейдъри и инициализиране на текстури от памет или DMA буфери.
gxr: е API за абстрахиране на софтуерни интерфейси за разработване на приложения за виртуална реалност. В момента се поддържа само OpenVR, но скоро ще бъде добавена поддръжка за стандарта OpenXR.
libinputsynth: е библиотека за синтезиране на входни събития като движение на мишката, щраквания и натискания на клавиши, реализирана под формата на бекенди за xdo, xi2 и Clutter.
xrdesktop: библиотека за управление на прозорци в 3D среда, набор от свързани джаджи и бекендове за рендиране на сцената.
kwin-effect-xrdesktop и kdeplasma-applets-xrdesktop: приставка за KWin за интеграция на KDE и плазмен аплет за поставяне на KWin в изходен режим на 3D каска.
gnome-shell patchset и gnome-shell-extension-xrdesktop: е набор от лепенки за Gnome за интегриране на поддръжка на xrdesktop и приставка за промяна на изхода към 3D каска в Gnome Shell.
Проектът поддържа различни методи за организиране на взаимодействие между работния плот и прозореца във виртуална среда, които могат да се използват за улавяне на прозорци, мащабиране, преместване, завъртане, наслагване върху сфера, подреждане и скриване на прозорци, използване на контролното меню и едновременно управление на две ръце използване на множество контролери.