Представлений випуск пакету wayland-protocols 1.48, що містить набір протоколів і розширень, що доповнюють базовий протокол Wayland і надають можливості, необхідні для побудови композитних серверів та оточень користувача.
В новой версії:
- До категорії «staging» додано протокол xdg-session-management, що надає можливості для відновлення стану та позиції вікон перерваного сеансу в оточеннях на основі протоколу Wayland, наприклад, після аварійного завершення композитного сервера або програми.
- Розширено можливості протоколу text-input, що дозволяє композитним серверам реалізовувати методи введення та надсилати текст до додатків. Наприклад, доданий прапор no_emoji для введення без Emoji, реалізована підтримка додаткових дій крім вставки тексту, доданий прапор language для передачі інформації про мову, додані запити для показу та приховування панелі введення, доданий прапор preedit_hint для налаштування стилю попереднього редагування.
- Додано експериментальний протокол xx-cutouts для отримання інформації про вирізи на екрані (наприклад, області під фронтальну камеру на смартфоні).
- Доданий експериментальний протокол xx-zones для створення та додавання вікон верхнього рівня до «зон» — оточення зі своїм простором координат. Протокол дозволяє організувати логічне розміщення вікон, у якому кожне вікно розміщується щодо іншого вікна.
- Додано експериментальний протокол xx-keyboard-filter для перехоплення клієнтом вибраних подій клавіатури, зміни подій введення або блокування передачі певних подій Wayland-поверхню, на якій встановлено фокус введення.
Усі протоколи послідовно проходять фази розробки, тестування та стабілізації. Після завершення стадії розробки (категорія "unstable") протокол міститься у гілці "staging" і офіційно включається до складу набору wayland-protocols, а після завершення тестування переміщається до категорії стабільних. Протоколи з категорії «staging» вже можна застосовувати у композитних серверах та клієнтів, де потрібна пов'язана з ними функціональність. На відміну від категорії «unstable» у «staging» заборонено внесення змін, що порушують сумісність, але у разі виявлення проблем та недоробок під час тестування не виключається заміна новою значною версією протоколу чи іншим Wayland-розширенням.
Для прискорення доведення протоколів до розробників та стимулювання ранньої реалізації протоколів у існуючих проектах, починаючи з позаминулого випуску додатково було додано фазу «experimental», в якій допускається внесення змін, що порушують сумісність, та додавання «сирих» протоколів, які можна поступово доводити до належного рівня. Якщо для попадання протоколу у фазу "staging" потрібно сформувати команду підтримки та отримати певну кількість підтверджень (ACK) від учасників рецензування, то для потрапляння до "experimental" достатньо відсутності заперечень (NACK) протягом двотижневого періоду рецензування.
В даний час до складу набору wayland-protocols входять такі стабільні протоколи, в яких забезпечується зворотна сумісність:
- viewporter» — дозволяє клієнту виконувати дії щодо масштабування та обрізання країв поверхні на стороні сервера.
- "presentation-time" - забезпечує відображення відео.
- "xdg-shell" - інтерфейс створення та взаємодії з поверхнями як з вікнами, що дозволяє пересувати їх по екрану, згортати, розгортати, змінювати розмір і т.д.
- "linux-dmabuf" - надає можливості для створення wl_buffer-ів на базі DMA-BUF.
- "Tablet" - організація введення з графічних планшетів.
Протоколи, що тестуються у гілці «staging»:
- drm-lease – надає ресурси, необхідні для формування стереокартинки з різними буферами для лівого та правого ока при виведенні на шоломи віртуальної реальності.
- "ext-session-lock" - визначає засоби блокування сеансу, наприклад, під час роботи зберігача екрана або виведення діалогу аутентифікації.
- "single-pixel-buffer" - дозволяє створювати однопіксельні буфери, що включають чотири 32-розрядні значення RGBA.
- "xdg-activation" - дозволяє передати фокус між різними поверхнями першого рівня (наприклад, за допомогою xdg-activation одна програма може переключити фокус на інше).
- content-type - дозволяє клієнтам передати композитному сервера відомості про відображуваний вміст, які можуть використовуватися для оптимізації поведінки з урахуванням вмісту, наприклад, виставляння специфічних DRM-властивостей, таких як «content type». Заявлена підтримка наступних типів контенту: 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 - організація захоплення контенту, що виводиться на екран.
- xdg-system-bell — дозволяє виводити системний сигнал, який можна використовувати, наприклад, як попередження в емуляторі терміналів. Форма виведення сигналу визначається на розсуд композитного менеджера, це може бути не лише звук, а й візуальний відгук.
- fifo - реалізує FIFO-механізм (першим прийшов - першим пішов) обробки черги оновлення вмісту поверхні, що відображається. З практичного боку протокол дозволяє при виведенні використовувати очікування завершення вертикальної розгортки (vblank) замість використання callback-дзвінків при кожній готовності відобразити новий кадр, що вирішує проблему високого навантаження на GPU при використанні VSync.
- commit-timing — дозволяє прив'язати обмеження часу до вмісту поверхні (композитний сервер повинен відобразити зміну контенту наскільки можна через вказаний час, але не раніше).
- ext-data-control – дозволяє привілейованим клієнтам керувати обробкою даних, наприклад, для реалізації менеджерів буфера обміну.
- ext-workspace - реалізує концепцію virtualnyx робочих столів та пропонує події з інформацією про стан робочих столів, а також можливості для активації та деактивації робочих столів. Протокол може застосовуватися для створення панелей та індикаторів, які виводять список доступних віртуальних робочих столів та дозволяють перемикатися між ними.
- color-management – надає можливості для керування кольором та підтримки розширеного динамічного діапазону яскравості (HDR, High Dynamic Range). За допомогою доданого розширення клієнтські програми можуть отримувати інформацію про пов'язані з передачі кольору властивості пристроїв виведення і передавати композитному серверу дані про властивості передачі кольору власного контенту. У композитному сервері Ця інформація може використовуватися для автоматичного керування кольором при відображенні вмісту на різних пристроях виводу, наприклад, для перетворення контенту на надання, що підходить для відображення на HDR-моніторах. Для опису колірних просторів використовують профілі ICC.
- xdg-toplevel-tag — дозволяє Wayland-клієнтам прикріплювати теги до поверхонь верхнього рівня, які композитний сервер може використовувати для ідентифікації вікон після перезапуску програми (наприклад, програма може виставити теги "main window" та "settings" для основного вікна та вікна з налаштуваннями). Подібна ідентифікація корисна для відновлення позиції, розміру та властивостей вікон після перезапуску, а також визначення особливих правил для окремих видів вікон.
- color-representation — визначення кольорового уявлення Wayland-поверхні.
- ext-background-effect – застосування ефектів до напівпрозорих частин Wayland-поверхні, таких як розмиття фону.
- pointer-warp — дозволяє програмі миттєво перемістити покажчик у вказану позицію.
Протоколи, що розробляються у галузі «experimental»:
- xx-session-management — відновлення стану вікон для перерваних сеансів (наприклад, після аварійного завершення композитного менеджера).
- xx-input-method - дає можливість додаткам реалізовувати методи введення тексту для композитних серверів і формувати введений текст, що може застосовуватися, наприклад, для створення віртуальних клавіатур та IME-шар (Input Method Editor) для обробки введення.
- xx-text-input – дозволяє композитним серверам реалізовувати методи введення та відправляти текст у додатки. Протокол стандартизує взаємодію між композитним. сервером і додатками, і дозволяє керувати такими можливостями, як передача тексту, обробка подій про зміну фокусу введення і облік специфіки полів введення (мова, виділення тексту, тип контенту).
Протоколи, що розробляються у гілці «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.
Джерело: opennet.ru
