A fost publicat versiunea 1.38 a pachetului wayland-protocols, care conține un set de protocoale și extensii ce completează protocolul de bază Wayland și oferă funcționalitățile necesare pentru construirea serverelor de compoziție și a mediilor utilizator.
Toate protocoalele trec consecutiv prin trei etape — dezvoltare, testare și stabilizare. La finalizarea etapei de dezvoltare (categoria „unstable”), protocolul este mutat în ramura „staging” și inclus oficial în pachetul wayland-protocols, iar după finalizarea testării, acesta este mutat în categoria stabilă. Protocoalele din categoria „staging” pot fi deja utilizate în serverele compozite și clienții care necesită funcționalitatea asociată acestora. Spre deosebire de categoria „unstable”, în „staging” nu sunt permise modificări care ar compromite compatibilitatea, dar, în cazul descoperirii problemelor și neajunsurilor în timpul testării, nu este exclusă înlocuirea cu o version semnificativă nouă a protocolului sau cu altă extensie Wayland.
În noua versiune, protocolul a fost adăugat în categoria „staging”:
- xdg-system-bell – permite emiterea unui semnal sistem care poate fi utilizat, de exemplu, ca avertisment în emulatorii de terminal. Forma în care este emis semnalul este la discreția managerului de compunere, acesta putând fi nu doar sonor, ci și o reacție vizuală.
- fifo – implementează un mecanism FIFO (primul venit, primul servit) pentru gestionarea cozii de actualizare a conținutului suprafeței afișate. Din punct de vedere practic, protocolul permite utilizarea așteptării finalizării desfășurării verticale (vblank) în locul apelurilor callback la fiecare nou cadru, rezolvând astfel problema încărcării ridicate a GPU-ului în utilizarea VSync.
- commit-timing – permite asocierea unei restricții de timp cu conținutul suprafeței (serverul de compunere ar trebui să afișeze modificarea conținutului cât mai repede posibil în decursul timpului specificat, dar nu mai devreme).
În prezent, pachetul wayland-protocols conține următoarele protocoale stabile, care asigură compatibilitatea inversă:
- „viewporter” — permite clientului să efectueze acțiuni de scalare și tăiere a marginii suprafeței pe partea serverului.
- „presentation-time” — asigură redarea video.
- „xdg-shell” — interfața de creare și interacțiune cu suprafețele ca fiind feronci, ceea ce permite mutarea, minimizarea, maximizarea, redimensionarea etc.
- „linux-dmabuf” — permite partajarea mai multor plăci video prin intermediul tehnologiei DMA-BUF (permite crearea unui wl_buffer bazat pe DMA-BUF).
- „tablet” – organizarea introducerii de la tablete grafice.
Protocoalele aflate în testare în ramura „staging”:
- drm-lease — oferă resursele necesare pentru a forma o imagine stereoscopică cu diferite buffere pentru ochiul stâng și drept atunci când este redat pe căști de realitate virtuală.
- «ext-session-lock» — definește mijloacele de blocare a sesiunii, de exemplu, în timpul activării ecranului sau afișării unui dialog de autentificare.
- «single-pixel-buffer» — permite crearea de buffere cu un singur pixel, incluzând patru valori de 32 de biți RGBA.
- «xdg-activation» — permite transferul focalizării între diferite suprafețe de nivel înalt (de exemplu, prin xdg-activation, o aplicație poate comuta focalizarea pe alta).
- content-type — permite clienților să transmită informații despre conținutul afișat, care pot fi utilizate pentru a optimiza comportamentul în funcție de conținut, de exemplu, setarea unor proprietăți DRM specifice, cum ar fi „tipul de conținut”. Suportul este declarat pentru următoarele tipuri de conținut: none (fără informații despre tipul de date), photo (afișarea fotografiilor digitale, care necesită o procesare minimă), video (video sau animație, necesită o sincronizare mai precisă pentru a evita întârzierile) și game (lansarea jocurilor, necesită o redare cu întârziere minimă). server ext-idle-notify — oferă serverelor de compunere capacitatea de a trimite clienților notificări despre inactivitatea utilizatorului, care pot fi utilizate pentru a activa moduri suplimentare de economisire a energiei după o perioadă definită de inactivitate.
- tearing-control — permite dezactivarea sincronizării verticale (VSync) în aplicațiile pe ecran complet cu pulsul de umbrire a cadrelor, utilizat pentru a preveni apariția rupturilor la redare (tearing). În aplicațiile multimedia, apariția artefactelor din cauza rupturilor este un efect nedorit, însă în programele de jocuri, artefactele pot fi tolerate dacă combaterea lor duce la întârzieri suplimentare.
- ext-foreign-toplevel-list — obținerea de informații despre suprafețele plasate la cel mai înalt nivel (toplevel), care permit organizarea fixării feroneriilor deasupra altui conținut, de exemplu, pentru a conecta propriile panouri și întrerupătoare de feronerie.
- ext-foreign-toplevel-list — obținerea de informații despre suprafețele plasate la cel mai înalt nivel (toplevel), care permit organizarea fixării feroneriilor deasupra altui conținut, de exemplu, pentru a conecta propriile panouri și întrerupătoare de feronerie.
- security-context — permite identificarea clienților care folosesc izolarea prin sandbox. Clientul poate înregistra o nouă conexiune la serverul compozit bazat pe Wayland și poate atașa un context de securitate, după care, conform contextului de securitate specificat, managerul de compozitare va limita funcționalitățile disponibile pentru conexiunea stabilită.
- cursor-shape — o metodă alternativă de configurare a aspectului cursorului, bazată pe transmiterea unei serii de imagini ale cursorului în loc de conectarea la suprafață (wl_surface).
- «ext-transient-seat» — destinat creării de sesiuni temporare independente (seat), destinate utilizării împreună cu dispozitive de introducere virtuale. De exemplu, în implementarea posibilității de conectare la desktop de la distanță protocolul permite crearea unui mediu de sesiune separată pentru fiecare utilizator, cu tastatură și mouse virtuale.
- «xdg-toplevel-drag» — extinde mecanismul «drag & drop» prin posibilitatea de a atașa feronerie superioară la operația de mutare, care poate fi utilizată, de exemplu, pentru organizarea tragerii cu mouse-ul a panourilor de unelte sau tab-urilor browserului. Noul protocol permite crearea unor părți detașabile ale feronerie, care, atunci când sunt trase din această feronerie, devin feronerie noi și pot fi mutate deasupra unei feronerie existente înainte de a fi reatașate.
- «xdg-dialog» — permite atribuirea unor caracteristici specifice feroneriilor de nivel superior, de exemplu, se pot crea dialoguri modale care blochează interacțiunea utilizatorului cu restul interfeței.
- «linux-drm-syncobj» — oferă instrumente pentru sincronizarea explicită a bufferelor folosind obiecte de sincronizare DRM (Direct Rendering Manager). Se presupune că în contextul sincronizării la redarea în buffer, protocolul propus va îmbunătăți interacțiunea cu driverele bazate pe API-uri grafice Vulkan și OpenGL (implementarea se bazează pe gestionarea în drivere). Noul protocol permite asigurarea că operația de redare în buffer a fost finalizată înainte ca managerul de compozitare să afișeze acest buffer.
- alpha-modifier, care permite clienților să schimbe nivelul de transparență al suprafeței și să gestioneze operațiunile de transparență pe serverul de compunere, care la rândul său poate redirecționa aceste operațiuni către KMS.
- xdg-toplevel-icon – asociază o pictogramă cu o fereastră de nivel superior.
- ext-image-capture-source și ext-image-copy-capture – organizarea captării conținutului afișat pe ecran.
Programele dezvoltate în ramura «unstable»:
- «fullscreen-shell» — gestionarea muncii în modul pe ecran complet.
- «input-method» — procesarea metodelor de introducere.
- «idle-inhibit» — blocarea activării screensaver-ului (saver de ecran).
- «input-timestamps» — timpi pentru evenimentele de intrare.
- «keyboard-shortcuts-inhibit» — gestionarea atașării combinațiilor de taste și a comenzilor rapide.
- «linux-explicit-synchronization» — mecanism de sincronizare a bufferelor specific Linux, legat de suprafață.
- «pointer-gestures» — gestionarea gesturilor de pe ecranele tactile.
- «pointer constraints» — restricții pentru indicatoare (blocare).
- «primary-selection» — similar cu X11, oferă funcționalitatea bufferului de schimb primar (primary selection), din care inserarea informației se face de obicei cu a treia buton al mouse-ului.
- «relative pointer events» — evenimente relative pentru indicatoare.
- «text-input» — organizarea introducerii de text.
- «xdg-foreign» — interfața de interacțiune cu suprafețele clientului «vecin».
- «xdg-decoration» — redarea decorațiunilor ferestrei pe partea serverului.
- «xdg-output» — informații suplimentare despre ieșirea video (utilizat pentru scalarea fracționată).
- «xwayland-keyboard-grab» — captarea intrării în aplicațiile XWayland.
De asemenea, se poate menționa propunerea angajatului companiei Valve de a adăuga o nouă fază de promovare a protocolului Wayland — „experimental”, care va permite reducerea barierelor pentru includerea protocoalelor în setul de wayland-protocols și accelerarea implementării acestora. În prezent, pentru ca un protocol să ajungă în faza de staging, este necesară formarea unei echipe de suport și obținerea unui număr specific de confirmări (ACK) din partea participanților la revizuire. În faza „experimental” se propune acceptarea protocolului nu prin obținerea de confirmări, ci pe baza absenței obiecțiunilor (NACK) pe parcursul unei perioade de revizuire de două săptămâni. Dacă este nevoie, participanții la revizuire pot extinde discuția cu încă două săptămâni, marcând statutul „WAIT”.
În faza „experimental” se propune, de asemenea, permiterea modificărilor care încalcă compatibilitatea și adăugarea de protocoale „nefinisate”, care vor putea fi treptat rafinate. Astfel, faza „experimental” va permite dezvoltatorilor să primească rapid noi prototipuri de protocoale, să stimuleze implementarea lor în proiectele existente și să obțină feedback de la utilizatori. Procesul propus ar trebui să scutească dezvoltatorii de protocoale de discuții îndelungate și de birocrație înainte de a fi incluse în wayland-protocols. De exemplu, protocoalele xdg-system-bell, fifo și commit-timing, acceptate în această versiune, au fost discutate timp de mai bine de un an.
Sursa: opennet.ro
