Публикувана е версия на пакета wayland-protocols 1.38, който съдържа набор от протоколи и разширения, допълващи основния протокол Wayland и предоставящи възможности, необходими за изграждане на композитни сървъри и потребителски среди.
Всички протоколи последователно преминават през три фази — разработка, тестване и стабилизиране. След завършване на етапа на разработка (категория „нестабилен“) протоколът се поставя в клона „staging“ и официално се добавя към набора wayland-protocols, а след завършване на тестването се премества в категория на стабилни. Протоколите от категория „staging“ вече могат да се прилагат в композитни сървъри и клиенти, където е необходима свързана с тях функционалност. За разлика от категорията „нестабилен“, в „staging“ е забранено извършването на промени, които нарушават съвместимостта, но в случай на открития на проблеми и недоизпълнения по време на тестването, не се изключва замяната с нова значителна версия на протокола или друго разширение на Wayland.
В новата версия в категория „staging“ са добавени протоколи:
- xdg-system-bell — позволява издаването на системен сигнал, който може да се използва например като предупреждение в емулация на терминали. Формата на сигнала се определя по усмотрение на композитния мениджър; това може да бъде не само звук, но и визуална реакция.
- fifo — реализира механизъм FIFO (първият дошъл — първият излязъл) за обработка на опашката за обновяване на съдържанието на показваната повърхност. От практическа гледна точка, протоколът позволява да се използва изчакване на завършването на вертикалното сканиране (vblank) вместо извиквания на callback при всяка готовност за показване на нов кадър, което решава проблема с високото натоварване на GPU при използване на VSync.
- commit-timing — позволява свързването на ограничение на времето с съдържанието на повърхността (композитният сървър трябва да преобразува промяната на съдържанието, когато е възможно, през указания период от време, но не по-рано).
В момента в състава на wayland-protocols влизат следните стабилни протоколи, при които се осигурява обратна съвместимост:
- «viewporter» — позволява на клиента да извършва действия по мащабиране и изрязване на ръбовете на повърхността на сървъра.
- «presentation-time» — осигурява показване на видео.
- «xdg-shell» — интерфейс за създаване и взаимодействие с повърхности като с прозорци, което позволява их да се местят по екрана, минимизират, разширяват, променят размер и т.н.
- „linux-dmabuf“ — осигурява споделяне на няколко видеокарти чрез технологията DMA-BUF (позволява създаването на wl_buffer на базата на DMA-BUF).
- «tablet» — организация на въвеждане от графични таблети.
Протоколите, тествани в клон «staging»:
- drm-lease — предоставя нужните ресурси за генериране на стерео изображение с различни буфери за лявото и дясното око при изход към шлемове за виртуална реалност.
- «ext-session-lock» — определя средства за блокиране на сесията, например, по време на работа на защитен екран или изход на диалог за аутентикация.
- «single-pixel-buffer» — позволява създаването на буфери с единичен пиксел, включващи четири 32-битови стойности RGBA.
- «xdg-activation» — позволява предаване на фокус между различни повърхности от първо ниво (например, с xdg-activation едно приложение може да переключи фокуса на друго).
- content-type — позволява на клиентите да предадат на композитния сървър информация за показаното съдържание, която може да се използва за оптимизиране на поведението в зависимост от съдържанието, например, при задаване на специфични DRM свойства, като например "тип съдържание". Декларираната поддръжка включва следните типове съдържание: none (няма информация за типа данни), photo (извеждане на цифрови снимки, изискващо минимална обработка), video (видео или анимация, изискваща по-прецизна синхронизация, за да се избегне закъснение) и game (стартиране на игри, изискващо извеждане с минимално забавяне).
- ext-idle-notify — дава възможност на композитни сървъри да информират клиентите за неактивността на потребителя, което може да се използва за активиране на допълнителни енергийни спестяващи режими след определено време на неактивност.
- tearing-control — позволява деактивиране на вертикалната синхронизация (VSync) с кадрови гасящ импулс в режим на пълен екран, прилагана за предотвратяване на разкъсвания при изхода (tearing). В мултимедийните приложения появата на артефакти от разкъсвания е нежелан ефект, но в игри с артефакти може да се понесе, ако борбата с тях доведе до допълнителни забавяния.
- ext-foreign-toplevel-list — позволява получаване на информация за повърхностите, разположени на най-високо ниво (toplevel), които позволяват организиране на закрепване на прозорци над друго съдържание, например за свързване на собствени панели и превключватели на прозорци.
- security-context — дава възможност за идентифициране на клиенти, използващи sandbox-изолация. Клиентът може да регистрира ново свързване към композитен сървър на базата на Wayland и да прикрепи контекст за безопасност, след което композитният мениджър ще ограничи възможностите за установеното свързване в съответствие с посочения контекст за безопасност.
- cursor-shape — алтернативен начин за настройка на външния вид на курсора, основан на предаването на серия от изображения на курсора вместо привързване към повърхността (wl_surface).
- «ext-transient-seat» — предназначен за създаване на времеви независими сесии (seat), проектирани за използване с виртуални входни устройства. Например, при реализиране на възможността за свързване към отдалечен работен плот протоколът позволява да се създаде отделна сесия за всеки потребител с виртуална клавиатура и мишка.
- «xdg-toplevel-drag» — разширява механизма «drag & drop» с възможността за прикрепяне на прозорци на най-високо ниво към операцията за преместване, която може да се използва, например, за организиране на преместването на панели с инструменти или табове в браузъра с мишката. Новият протокол позволява създаването на отделящи се части от прозореца, които при преместване от този прозорец стават нови прозорци и могат да бъдат премествани над съществуващ прозорец преди повторното прикрепяне.
- «xdg-dialog» — позволява на повърхности от най-високо ниво да се задават характеристики, специфични за диалоговите прозорци, например, можете да създадете модални диалози, които блокират взаимодействието на потребителя с останалата част от интерфейса.
- «linux-drm-syncobj» — предоставя инструменти за явна синхронизация на буфери с помощта на обекти за синхронизация на DRM (Direct Rendering Manager). В контекста на синхронизацията при рендиране на буфер предложеното протокол ще подобри работата с драйвъри, основани на графични API като Vulkan и OpenGL (реализацията е базирана на обработващи механизми в драйвърите). Новият протокол позволява да се уверите, че операцията на рендиране в буфера е завършена, преди композитният мениджър да изобрази този буфер.
- alpha-modifier, позволяващ на клиентите да променят нивото на прозрачност на повърхността и да прехвърлят операциите по осигуряване на прозрачност на страната на композитния сървър, който от своя страна може да пренасочи тези операции KMS.
- xdg-toplevel-icon — свързване на иконка с прозорец на най-високо ниво.
- ext-image-capture-source и ext-image-copy-capture — организация на захващане на съдържание, което се показва на екрана.
Протоколите, разработвани в клона «unstable»:
- «fullscreen-shell» — управление на работата в режим на цял екран.
- «input-method» — обработка на методи за въвеждане.
- «idle-inhibit» — блокиране на стартирането на скрийнсейвера.
- «input-timestamps» — времеви маркировки за входни събития.
- «keyboard-shortcuts-inhibit» — управление прикреплението на клавишни комбинации и горещи клавиши.
- «linux-explicit-synchronization» — специфичен за Linux механизъм за синхронизация на буферите, свързан с повърхността.
- «pointer-gestures» — управление от сензорни екрани.
- «pointer constraints» — ограничения на указателите (блокиране).
- «primary-selection» — подобно на X11 осигурява работа на основния буфер за обмен (primary selection), чиято информация обикновено се вмъква с средния бутон на мишката.
- «relative pointer events» — относителни събития на указателите.
- «text-input» — организация на въвеждане на текст.
- «xdg-foreign» — интерфейс за взаимодействие с повърхностите на "съседния" клиент.
- «xdg-decoration» — рисуване на декорации на прозорците от страната на сървъра.
- «xdg-output» — допълнителна информация за видеоизхода (използва се за дробно мащабиране).
- «xwayland-keyboard-grab» — захващане на входа в приложенията XWayland.
Освен това, може да се отбележи предложението на служителя на компания Valve за добавяне на още една фаза за напредък на новите протоколи Wayland — „experimental“, която ще позволи намаляване на бариерата за включване на протоколите в комплекта Wayland-Protocols и ускоряване на тяхното внедряване. В момента, за да влезе един протокол в фаза staging, е необходимо да се състави екип за поддръжка и да се получи определен брой потвърждения (ACK) от участниците в рецензията. В „experimental“ се предлага протоколът да се приема не чрез получаване на потвърждения, а на базата на отсъствието на възражения (NACK) в течение на двуседмичен период на рецензия. При необходимост участниците в рецензията също могат да удължат обсъждането с още две седмици, поставяйки статус „WAIT“.
В фаза „experimental“ също се предлага разрешение за извършване на промени, които нарушават съвместимостта, и добавяне на „несготвени“ протоколи, които постепенно могат да бъдат доведени до необходимото ниво. Така, фазата „experimental“ ще позволи бързо предаванe на нови прототипи на протоколи на разработчиците, да стимулира тяхната реализация в съществуващите проекти и да получава обратна връзка от потребителите. Предложеният процес трябва да освободи разработчиците на протоколите от дълги обсъждания и забавяния преди приемането в комплекта Wayland-Protocols. Например, протоколите xdg-system-bell, fifo и commit-timing, приети в настоящото издание, бяха обсъждани повече от година.
Източник: opennet.ru
