Martin Gräßlin
This week I decided to do some research for the Wayland porting of the KDE Plasma workspaces. One of the features we will need in future is a Wayland session compositor which runs nested on a Wayland system compositor. Of course one could think of setups without a system compositor, but overall I think that a nested compositor simplifies the setup and allows to have all the low level technologies in one place without duplication in all the various compositors. +1 for working together.
KWin also gets input from Wayland and passes it to the X Server. That’s the reason why we can see mouse interaction and working keyboard.
Описание реализации:
- OpenGL-бэкенд:
KWin поддерживает несколько бэкендов для обработки данных OpenGL и преобразования растровых изображений в текстуры. В настоящее время реализованы бэкенды GLX и EGL. Оба они создают OpenGL-данные в окне XComposite и преобразовавают растровое изображение в текстуру с GLX через расширение GLX_EXT_texture_from_pixmap или в случае EGL через EGL_KHR_image_pixmap.Добавлена новая подсистема реализации OpenGL поверх Wayland. Эта подсистема является форком EGL с тем отличием, что в ней нет кода X, из-за чего реализация работы растровых текстур несколько усложнилась. Расширение, используемое в «стандартной» EGL на X11 серверной недоступно. В качестве правильного решения указано использование XWayland, но это пока что слишком рано, поскольку KWin всё еще не поддерживает Wayland-клиент.
Решение, реализованное Мартином, было сделано на основе Fallback-механизма в KWin запускающегося в случае неработоспособности GLX_EXT_texture_from_pixmap: использование XShm для копирования содержимого растрового изображения в текстуру OpenGL. Не очень здорово, но работает. (Not a nice solution but it works.)
- Ввод:
Метод ввода является «a rather hackish solution», до тех пор, пока XWayland не будет запущен. Поэтому приходится направлять все входные события на XServer с расширением XTest для работы с так называемыми «fake events». Эта реализация просто ужасна сама по себе, и благодаря этому можно увидеть устарелость и ограниченность реализации X. Martin Gräßlin, как он сам пишет, был весьма удивлен, что данный механизм вообще сработал. На момент написания оригинала статьи код поддерживает сигналы клавиатуры, ЛКМ, СКМ и ПКМ. С колесом же мыши пока ещё наблюдаются проблемы.Также разработчики не в состоянии реализовать синхронизацию положения курсора мыши между Х и Wayland. Поскольку протокол Wayland разительно отличается от XWarpPointer, так что в любой момент можно получить «рассинхрон».
Собственно, сама демонстрация (YouTube)
Более подробную информацию относительно сборки, тестирования и планов проекта на будущее Вы можете получить из оригинала новости.