Po czterech miesiącach prac nad rozwojem zaprezentowano stabilną wersję protokołu, mechanizmu komunikacji międzyprocesowej oraz bibliotek Wayland 1.26. Gałąź 1.26 jest wstecznie kompatybilna na poziomie API i ABI z wydaniami 1.x i zawiera głównie poprawki błędów oraz drobne aktualizacje protokołu. Osiągnięcia projektu są udostępniane na licencji MIT. Referencyjny kompozytowy сервер Weston, który zapewnia kod i przykłady robocze do wykorzystania Wayland w środowiskach desktopowych oraz rozwiązaniach wbudowanych, rozwija się w ramach osobnego cyklu rozwoju.
Główne zmiany w protokole:
- Dodano zdarzenie wl_pointer.warp, dzięki któremu można otrzymywać powiadomienia o nowej pozycji wskaźnika bez przetwarzania zdarzenia wl_pointer.motion, generowanego podczas aktywności użytkownika.
- Dodano zapytanie wl_fixes.ack_global_remove, które ma na celu wysłanie do menedżera kompozycji potwierdzenia, że klient zakończył przetwarzanie zdarzenia, aby wyeliminować stan wyścigu podczas usuwania globalnych zdarzeń. Po otrzymaniu potwierdzenia od wszystkich klientów menedżer kompozycji może usunąć powiązany z wydarzeniem procesor po swojej stronie.
- Dodano funkcję wl_display_remove_socket_fd() do usuwania gniazd, które zostały wcześniej dodane za pomocą wywołania wl_display_add_socket_fd().
- W trybie debugowania WAYLAND_DEBUG zapewniono logowanie czasu w formacie „HH:MM:ss.xxxxxx”, co ułatwia analizę i porównywanie logów.
Nowo dodane rozszerzenia protokołów po ostatniej wersji Wayland, które uzupełniają podstawowy protokół Wayland i są dostarczane w osobnym zestawie Wayland-Protocols:
- xx-fractional-scale — do skalowania systemu logicznych współrzędnych, wartości które są definiowane jako liczby całkowite, w celu zwiększenia precyzji pozycjonowania oraz podniesienia rozdzielczości logicznych współrzędnych do poziomu pojedynczych pikseli. Ta funkcjonalność rozwiązuje problem ograniczonej rozdzielczości systemu logicznych współrzędnych, niezbędnej do precyzyjnego pozycjonowania na poziomie pojedynczych pikseli potrzebnego do pełnej realizacji fractional scaling.
- xx-cutouts — do uzyskiwania informacji o wycinkach na ekranie (np. obszary pod przednią kamerą w ekranie smartfona).
- xx-zones — do tworzenia i dodawania okien wyższego poziomu w „strefach” — środowiskach z własną przestrzenią współrzędnych. Protokół umożliwia logiczne rozmieszczenie okien, w którym każde okno jest umieszczane w odniesieniu do innego okna.
- xx-keyboard-filter — do przechwytywania wybranych zdarzeń klawiatury przez klienta, modyfikacji zdarzeń wejściowych lub blokowania przesyłania określonych zdarzeń do powierzchni Wayland, na której ustawiony jest fokus wejściowy.
- Do kategorii „staging” dodano protokół xdg-session-management, który zapewnia możliwości przywracania stanu i pozycji okien przerwanego sesji w środowiskach opartych na protokole Wayland, na przykład po awaryjnym zakończeniu kompozytora сервера lub aplikacji.
- Do protokołu „linux-dmabuf” dodano wsparcie dla systemów z wieloma GPU. Na takich systemach klient może ustalić z kompozytorami, сервером który z GPU powinien być używany.
- W protokole color-management-v1 dodano wsparcie dla metadanych obrazów w formacie BT.2100 do zastosowania w kompozytowych сервере specyficznych procesorach, które umożliwiają prawidłowe wyświetlanie treści HDR, stworzonych dla systemu Windows.
Najważniejsze wydarzenia związane z Wayland, które miały miejsce po publikacji ostatniego wydania:
- W Cinnamon w pełni zaimplementowano wsparcie dla Wayland.
- Do biblioteki ANGLE, używanej w Chrome i Androidzie, dodano obsługę Wayland.
- W KDE, korzystając z Wayland, zaimplementowano wsparcie dla odzyskiwania sesji oraz protokół Wayland xx-fractional-scale-v2 dla skalowania ułamkowego.
- Stworzono port sterownika X.Org Synaptics dla środowisk opartych na Wayland.
- Zainicjowano kontrolę gotowości platform VFX i animacji do zastąpienia X11 przez Wayland.
- Rozpoczęto testowanie serwera kompozytowego Xfwl4 z projektu Xfce.
- Na bazie Wayfire i Libadwaita odtworzono środowisko użytkownika Unity.
- Zaktualizowano serwery kompozytowe i środowiska pracy: COSMIC 1.3.0, Weston 16, Phosh 0.56, Nourish 1.0.0, miracle-wm 0.10, KDE Plasma 6.7, labwc 0.20, Sway 1.2, Wayland Maker 0.8, Hyprland 0.55, Niri 26.04, LXQt 2.4.0, Cage 0.3.
Przypominamy, że Wayland to protokół interakcji między serwerem kompozytowym a aplikacjami z nim współpracującymi. Klienci samodzielnie renderują swoje okna w osobnym buforze, przekazując informacje o aktualizacjach do kompozytowego серверу, który łączy zawartość buforów poszczególnych aplikacji, tworząc końcowy wynik z uwzględnieniem możliwych niuansów, takich jak nakładanie się okien i przezroczystość. Innymi słowy, serwer kompozytowy nie udostępnia API do renderowania poszczególnych elementów, lecz operuje wyłącznie na już uformowanych oknach, co pozwala uniknąć podwójnego buforowania przy użyciu bibliotek wyższego poziomu, takich jak GTK i Qt, które zajmują się układaniem zawartości okien.
Wayland rozwiązuje wiele problemów związanych z bezpieczeństwem X11 w X.Org Server, ponieważ w przeciwieństwie do tego ostatniego izoluje wejście i wyjście dla każdego okna, nie pozwala klientowi uzyskać dostępu do zawartości okien innych klientów, a także nie dopuszcza do przechwytywania zdarzeń wejścia związanych z innymi oknami (w XLibre XServer zaimplementowano rozszerzenie X11 Xnamespace, które zapewnia izolację klientów poprzez podział na poziomie przestrzeni nazw). Obsługa bezpośredniej pracy z Waylandem została zrealizowana dla większości używanych w Linuxie bibliotek graficznych, w tym GTK, Qt, SDL, FLTK, wxWidgets, Clutter i EFL (Enlightenment Foundation Library).
Interakcja z hardwarem w Wayland/Weston, na przykład inicjalizacja, zmiana trybów wideo (drm modesetting) oraz zarządzanie pamięcią (GEM dla i915 i TTM dla radeon i nouveau) kart graficznych, może odbywać się bezpośrednio za pośrednictwem modułu działającego na poziomie jądra, co pozwala na ominięcie uprawnień superużytkownika. Aby umożliwić działanie standardowych aplikacji X11 w środowisku opartym na Wayland, używany jest komponent DDX XWayland (Device-Dependent X), co przypomina działanie Xwin i Xquartz na platformach Win32 i macOS.
Źródło: opennet.ru
