Вејланд (протокол сервера за приказ)

Вејланд (енгл. Wayland) рачунарки је протокол који наводи комуникацију између сервера за приказ и његових клијената, као и референтну примену протокола у цеу (програмски језик).[4] Сервер за приказ који користи протокол Вејланд назива се Вејланд композитор (енгл. Wayland compositor).

Вејланд
снимак екрана демонстрације Вејланда
снимак екрана демонстрације Вејланда
Програмер(и)Кристијаном Хогсбергом
Прво издање0.85 /9. фебруар 2012.[1]
Стабилно издање
Прелиминарно издање
1.7.0
Репозиторијум Уреди на Википодацима
Написан уце
Тип
  • прозорски систем
  • сервер за приказ
ЛиценцаМИТ лиценца[3]
Веб-сајтwayland.freedesktop.org

Вејланд је развила група добровољаца предвођена Кристијаном Хогсбергом (Kristian Høgsberg) као слободан софтвер и софтвер отвореног кода са циљем да замени Екс виндоу систем модерним, једноставнијим прозорским системом у Линуксу и јуниксоликим оперативним системима.[4] Изворни код је објављен под условима MИТ лиценце, попустљиве слободне лиценце софтвера.[5][6]

Вејланд пројекат такође развија референтну примену Вејланд композитора који се назива Вестон.[4]

Увод уреди

 
①evdev модул Линукс кернела добија догађај и шаље га Вејланд Композитору.
②Вејланд композитор гледа кроз свој граф сцене да утврди који прозор би требало да прими догађај. Граф сцене одогвара приказу на екрану и Вејланд композитор разуме транформације које је је могао да примени на елементима у графу сцене. Онда Вејланд композитор може да изабере прави прозор и трансформише координате слике у локалне координате прозора, примењујући обрнуту трансформацију. Типови трансформација које могу бити примењене на прозору су ограничене само на оно што композитор може да уради, докле год може да обради обрнуту трансформацију за улазне догађаје.
③ Као што је случај са X-ом, када клијент прими догађај он освежи свој кориснички интерфејс као одговор. Али у случају Вејланда, рендеровање обавља клијент преко EGL-а, а клијент само шаље захтев композитору да истакне област која је освежена.
④ Вејланд композитор сакупља захтеве оштећења за своје клијенте и онда рекомпзитује екран. Композитор онда може директно да изда ioctl да закаже пејџфлип (pageflip) са KMS-ом.

Протеклих година, десктоп графика у Линуксу се удаљила од тога да има „гомилу рендеринг интерфејса...где се сви обраћају X серверу, који је у центру универзума“ према стављању Лунукс кернела и његових компоненти (нпр. DRI, DRM) „у средину“, са „прозорским системима као што су X и Вејланд...у страну“. Ово ће бити „много једноставнији графички систем који нуди већу флексибилност и боље перформансе“.[7] Хогсберг је могао X-у да дода екстензију, као што су многи скорашњи пројекти урадили, али је преферирао да „склони X са стазе између клијената и хардвера“ због разлога објашњених у најчешће постављеним питањима[8] пројекта.

Вејланд се састоји од протокола и референтне имплементације који се назива Вестон. Пројекат такође развија верзије GTK+ и Qt које рендерују у Вејланд уместо у X. Очекује се да многе апликације добију подршку за Вејланд кроз једну од ових библиотека без измена на апликацији.

Вејланд тренутно не подржава мрежну транспарентност, али ће је можда подржавати у будућности[9]. То је покушано да се оствари као део пројекта Google Summer of Code 2011. године, али није било успешно[10]. Адам Џексон (Adam Jackson) је замислио да пружи даљински приступ Вејланд апликацији или кроз пиксел скрејпинг, енгл. pixel-scraping, (као VNC), или тако што ће га подесити да шаље rendering command stream кроз мрежу (као у RDP, SPICE или X11)[11]. Рано 2013. године, Хогсберг је почео да експериментише са мрежном транспарентности користећи прокси Вејланд сервер који шаље компресоване слике правом композитору[12].

Архитектура софтвера уреди

Архитектура протокола уреди

 
У Вејланд архитекри Вејланд протокола, клијент и композитор, комуницирају кроз Вејландов протокол користећи библиотеке референтне имплементације.

Вејланд протокол прати модел клијент-сервер у којем су клијенти графичке апликације које захтевају приказ пиксел бафера на екрану, а сервер (композитор) пружа услуге контролисања приказа ових бафера. Референтна имплементација Вејланда је дизајнирана као протокол са два слоја[13]:

  • Слој нижег нивоа или „жични протокол“ који управља међупроцесном комуникацијиом између два повезана процеса (клијента и композитора) и подацима које размењују међу собом. Овај слој је базиран на порукама и обично је имплементиран користећи кернелове IPC услуге, обично Unix domain sockets у случају Линукса и оперативним системима сличним Јуниксу[14].
  • Слој вишег нивоа изграђен изнад њега, који управља информацијом коју клијент и композитор треба да размене да би имплементирали основне карактеристике прозорског система. Овај слој је имплементиран као „асинхронизован објектно оријентисан протокол“[15].

Док је слој нижег нивоа написан ручно у програмском језику C, слој вишег нивоа је аутоматски генерисан од описа елемената протокола који се налазе у XML формату[16]. Сваки пут кад се опис протокола ове XML датотеке промени, C изворни код који имплементује такав протокол може бити регенерисан да укључи нове промене, дозвољавајући веома флексибилан, екстензибилан (продужив) и протокол отпоран на грешке (енгл. error-proof protocol). Референтна имплементација Вејланд протокола је подељена у две библиотеке: библиотека коју користи Вејландов клијент се назива libwayland-client , и библиотека коју корисни Вејландов композитор која се назива libwayland-server[17].

Преглед протокола уреди

Вејландов протокол је описан као „асинхронизован објектно оријентисан протокол“. Објектно оријентисан значи да су услуге које нуди композитор представљене као серија објеката који се налазе у истом композитору. Сваки објекат имплементира интерфејс који има име, број метода (који се називају захтеви, енгл. requests ) као и неколико повезаних догађаја (енгл. events ). Сваки захтев и догађај имају нула или више аргумената, сваки са именом и типом података[15]. Протокол је асинхронизован у смислу да захтеви не морају да чекају на синхронизоване одговоре од ACKs, избегавајући тако кашњење повратног путовања (енгл. round-trip delay time ) и постижући боље перформансе.

Вејландови клијенти могу да шаљу захтеве (призивање методе, енгл. a method invocation ) неким објектима ако интерфејс објекта подржава захтеве. Клијент такође мора да снабдева захтеване податке за аргументе таквог захтева. На овај начин клијенти захтевају услуге од композитора. Композитор за узврат шаље информације назад клијенту проузрокујући да објекат емитује догађаје (вероватно са аргументима такође). Ови догађаји могу бити емитовани и од стране композитора као одговор на одређене захтеве, или асихроно, подређени појавама унутрашњих догађаја (као што је неки са улазног уређаја) или променама стања . Услови грешке су такође сигнализирани као догађаји од стране композитора[15].

Да би клијент могао да шаље захтеве објекту, прво треба да каже серверу идентификациони број (енгл. ID number) који ће користити да идентификује тај објекат[15]. Постоје две врсте објеката у композитору: глобални објектни и не-глобални објекти. Глобални објекти су представљени клијентима од стране композитора када се стварају (и такође када се уништавају), док су не-глобални објекти обично створени од стране објекта који већ постоје као део њихове функционалности[18].

Интерфејси и њихови захтеви и догађаји су срж елемената који дефинишу Вејландов протокол. Свака верзија протокола укључује скуп интерфејса, заједно са њиховим захтевима и догађајима, за које се очекује да буду у било ком Вејландовом композитору. Опционо, Вејланд композитор може да дефинише и имплементира сопствене интерфејсе са сопственим захтевима и догађајима, да би повећао сопствену функционалност изван изворног протокола[19]. Да би олакшао промене између верзија протокола, интерфејси садрже „број везије“ атрибута као додатак уз његово име; овај атрибут дозвољава интерфејсу да буде третиран различито од претходне верзије самог себе са различитим или са мање захтева и догађаја. Сваки Вејлед композитор открива не само који су интерфејси доступни али такође и њихову подржану верзију, а објекти имплементују специфичне верзије интерфејса[20].

Вејландови главни интерфејси уреди

Интерфејси тренутне верзије Вејланд протокола су дефинисани у датотеци protocol/wayland.xml Вејландовог изворног кода. Ово је XML датотека која садржи постојеће интерфејсе у тренутној верзији, заједно са њиховим захтевима, догађајима и осталим атрибутима. Да би био имплементиран од стране било ког Вејланд композитора најмањи захтев је овај скуп интерфејса.

Неки од најосновнијих интерфејса Вејландовог протокола су:

  • wl_display - главни глобални објекат, то је специјални објекат који капсулира сам Вејландов протокол
  • wl_registry - глобални објекат регистра, у коме композитор региструје све глобалне објекте за које жели да буду доступни свим клијентима
  • wl_compositor- објекат који представља композитор, његова задатак је да комбинује различите површине у један излаз
  • wl_surface - објекат који представља правоугаону област на екрану, дефинисан је локацијом, величином и садржајем пиксела
  • wl_buffer - објекат који, када је закачен на wl_surface објекат, пружа садржај који се приказује
  • wl_output - објекат који представља област која се приказује на екрану
  • wl_pointer, wl_keyboard, wl_touch - објекти представљају улазне уређаје као што су курсори или тастатуре
  • wl_seat - објекат који представља седиште (скуп улазних и излазних уређаја) у конфигурацијама са више рачунара

Типична сесија Вејланд клијента почиње тако што отвори конекцију ка композитору користећи wl_display објекат. Ово је специјални локални објекат који представља конекцију и не налази се у серверу. Користећи његов интерфејс клијенти могу да захтевају wl_registry глобални објекат од композитора, где се налазе имена свих глобалних објеката, и везују оне за које је клијент заинтересован. Обично клијент везује барем wl_compositor објекат одакле ће захтевати један или више wl_surface објеката да би приказао излаз апликације на екрану[18].

Екстензије Вејландових интерфејса уреди

Вејланд композитор може да дефинише и извезе сопствене додатне интерфејсе[19]. Ова особина се користи да се прошири протокол изван основне функционалности које пружају главни интерфејси, и који је постао стандардни начин са се имплементују екстензије Вејландовог протокола. Одређени композитори могу да изаберу да додају преправљене интерфејсе да би пружали специјализоване или јединствене одлике. Вејланд референтни композитор, Вестон, користи их да би имплементирао нове екперименталне интерфејсе као простор за нове концепте и идеје, од којих су неки касније постали део главног протокола (као што је wl_subsurface интерфејс додат у Вејланду 1.4[21]).

Екстензиони протоколи главног протокола уреди

XDG-Shell протокол уреди

XDG-Shell протокол је додатни начин за управљање површинама под Вејланд композитором (не само Вестоном). Традиционалан начин за манипулисање (максимизирање, минимизирање, цео екран итд.) површинама је да се користе wl_shell_*() функције, које су део главног Вејланд протокола и налазе се у libwayland-client. Имплементација XDG-Shell протокола, напротив, би требало да буде пружена од стране Вејланд композитора. Тако да ће се наћи xdg-shell-client-protocol.h заглавље у Вестоновом изворном стаблу (енгл. Weston source tree). Сваки Вејланд композитор би требало да обезбеди своју имплементацију.

Од јуна 2014. године XDG-Shell протокол нема дефинисану верзију и склон је променама.

XDG-Shell протокол има циљ да замени wl_shell на дуже стазе, али неће бити део Вејландовог главног протокола. Почиње као нестабилан API, са циљем да прво буде коришћен као место за развој, и онда када су одлике дефинисане као што је захтевано од стране неколико десктоп шелова (енгл. desktop shells), може коначно бити стабилан. Он углавном пружа два нова интерфејса xdg_surface и xdg_popup. xdg_surface интерфејс имплементује прозоре на десктопу који могу бити померани, мењати величине, максимизовани, итд.; он пружа захтев за креирање односа дете/родитељ (енгл. child/parent relationship). xdg_popup интерфејс имплементује попап мени на десктопу; xdg_popup је увек краткотрајан за другу површину, и такође има имплицитно хватање (енгл. implicit grab).[22]


IVI-Shell протокол уреди

IVI-Shell протокол је екстензија Вејландовог главног протокола од стране IVI-people (in-vehicle infotainment).

WRandR уреди

WRandR је Вејландова екстензија која олакшава способност да прозори на слици мењају величину, ротирају, и рефлектују главни прозор екрана.

Модел рендеровања уреди

Вејланд протокол не укључује рендеринг API[23][24][25][26]. Уместо тога, Вејланд прати директан модел рендеровања, у коме клијент мора да рендерује садржај прозора у бадеру који се дели са композитором. За ту сврху, клијент може да изабере да обави сво рендеровање сам, користи библиотеку за рендеровање нао што је Cairo или OpenGL, или да се ослања на рендеринг енџн (енгл. rendering engine) са библиотекама виџета (енгл. widget libraries) високог нивоа са Вејланд подршком, као што су Qt или GTK+. Клијент такође опционо може да користи друге специјализоване библиотеке да би обавио специфичне задатке, као што је Freetype за рендеровање фонтова.


Вејланд композитори уреди

 
Типични елементи прозора. Ни Вејланд ни X11 не спецификују који софтвер треба да обави цртање декорација прозора. Вестон захтева да оне буду нацртане од стране клијента, али KWin ће имплементовати декорацију са серверске стране.[27]

Дисплеј сервери који имплементују Вејланд дисплеј сервер протокол се такође називају Вејланд композиторима зато што додатно обављају задатак композитних виндоу менаџера (енгл. compositing window manager).

  • Вестон – референтна имплементација Вејланд композитора; Весон имплементује декорације са стране клијента
  • Enlightenment 0.19 се очекује да има пуну подршку за Вејланд[29].
  • KWin је имао некомплетну Вејландову подршку у априлу 2013. године[30].
  • Mutter одржава одвојену грану за интеграцију Вејланда за GNOME 3.9.[31]
  • Clayland је једноставан пример Вејланд композитора који користи Клатер (енгл. Clutter)..

Вестон уреди

Вестон је референтна имплементација Вејланд композитора. Написан је у програмском језику C и прво је објављен под GPLv2 лиценцом, али је тренутно објављен под MИТ лиценцом. Вестон је написан за Линуксов кернел API, наиме званично је подржан да ради само са Линуксовим кернелом због зависности одређених одлика, као што су KMS драјвер, GEM (Graphics Execution Manager), и udev, који није имплементиран у друге оперативне системе сличне Јуниксу[32]. Када је покренут на Линукс хардверу, руковање улазних уређаја се ослања на evdev, док се руковање баферима ослања на GBM (Generic Buffer Management).

Вестон је написан за Линукс кернел; фебруара 2013. године, најављен је прототип порта Вејледа за FreeBSD[33].

Издања уреди

Главна Вејланд/Вестон издања [34]
Верзија Датум Главне одлике Вејланда Главне одлике Вестона
0.85 9. феб. 2012.[1] Прво издање
0.95 24. јул. 2012.[35] Започета API стабилизација
1.0 22. окт. 2012.[36][37] Стабилни Вејланд клијент API
1.1 15. апр. 2013.[38][39] Рендеровање софтвера.[40] FBDEV, RDP позадине
1.2 12. јул. 2013.[41][42] Стабилни Вејланд сервер API Управљање бојама. Подповршине.Raspberry Pi позадина
1.3 11. окт. 2013.[43] Још формата пиксела. Подршка за повезивање језика Подршка заАндроид драјвере преко libhybris.
1.4 23. јан. 2014.[21] Нови wl_subcompositor и wl_subsurface интерфејси Више фрејмбафер формата.Подршка за logind за Вестон без рут приступа.
1.5 20. мај. 2014.[44] libinput. Љуска за цео екран.
1.6 19. сеп. 2014.[45] libinput по дифолту
1.7 14. феб. 2015.[2][46] Подршка за Вејланд презентациону екстензију и IVI (In car entertainment) протокол љуске.
1.8 29. мај. 2015. заказано[2]

Види још уреди

Референце уреди

  1. ^ а б Høgsberg, Kristian (9. 2. 2012). „[ANNOUNCE] Wayland and Weston 0.85.0 released”. wayland-devel mailing list. 
  2. ^ а б в Harrington, Bryce (14. 2. 2015). „[ANNOUNCE] wayland 1.7.0”. wayland-devel mailing list. 
  3. ^ „Wayland FAQ”. freedesktop.org. Архивирано из оригинала 07. 03. 2011. г. Приступљено 4. 2. 2015. 
  4. ^ а б в „Wayland”. „"Wayland is a protocol for a compositor to talk to its clients as well as a C library implementation of that protocol." 
  5. ^ „Wayland FAQ”. Wayland project. Архивирано из оригинала 07. 03. 2011. г. Приступљено 3. 2. 2019. 
  6. ^ Harrington, Bryce (15. 9. 2015). „[ANNOUNCE] wayland 1.8.93”. freedesktop.org (Листа адреса). 
  7. ^ Jonathan Corbet (5. 11. 2010). „Linux Plumbers Conference: Life after X (reporting a talk by Keith Packard)”. LWN.net. 
  8. ^ „Wayland FAQ”. Архивирано из оригинала 07. 03. 2011. г. Приступљено 17. 2. 2011. 
  9. ^ Høgsberg, Kristian (9. 11. 2010). „Network transparency argument”. 
  10. ^ Michael Larabel (18. 8. 2011). „Remote Wayland Server Project: Does It Work Yet?”. 
  11. ^ Adam Jackson (ajax) (9. 11. 2010). „[Re:] Ubuntu moving towards Wayland”. 
  12. ^ Stone, Daniel (1. 2. 2013). The real story behind Wayland and X. 42:00 мин. Архивирано из оригинала 10. 03. 2016. г. Приступљено 15. 05. 2015.  Presentation at linux.conf.au 2013.
    "[W]e think it's going to better at remoting than X."
  13. ^ „The Hello Wayland Tutorial”. Приступљено 25. 7. 2014. [непоуздан извор?]
  14. ^ Høgsberg, Kristian. „Wayland Documentation 1.3 - Wire Format”. FreeDesktop.org. Архивирано из оригинала 17. 10. 2014. г. Приступљено 25. 7. 2014. 
  15. ^ а б в г Høgsberg, Kristian. „Wayland Documentation 1.3 - Basic Principles”. FreeDesktop.org. Архивирано из оригинала 08. 08. 2014. г. Приступљено 25. 7. 2014. 
  16. ^ Høgsberg, Kristian. „protocol/wayland.xml”. FreeDesktop.org. Приступљено 25. 7. 2014. 
  17. ^ Høgsberg, Kristian. „Wayland Documentation 1.3 - Wayland Library”. FreeDesktop.org. Архивирано из оригинала 19. 06. 2014. г. Приступљено 26. 7. 2014. 
  18. ^ а б Paalanen, Pekka. „Wayland protocol design: object lifespan”. Приступљено 4. 9. 2014. 
  19. ^ а б Høgsberg, Kristian. „Wayland Documentation 1.3 - Interfaces”. FreeDesktop.org. Архивирано из оригинала 08. 08. 2014. г. Приступљено 31. 7. 2014. 
  20. ^ Høgsberg, Kristian. „Wayland Documentation 1.3 - Versioning”. FreeDesktop.org. Архивирано из оригинала 08. 08. 2014. г. Приступљено 31. 7. 2014. 
  21. ^ а б Høgsberg, Kristian (24. 1. 2014). „Wayland and Weston 1.4 is out”. wayland-devel mailing list. 
  22. ^ „xdg_shell: Adding a new shell protocol”. freedesktop.org. 3. 12. 2013. Приступљено 14. 6. 2014. 
  23. ^ Høgsberg, Kristian. „Wayland” (PDF).  Непознати параметар |access= игнорисан [|access-date= се препоручује] (помоћ) "No rendering API, all direct rendering"
  24. ^ Høgsberg, Kristian. „Wayland Documentation 1.3 - Wayland Rendering”. FreeDesktop.org. Wayland project. Архивирано из оригинала 05. 09. 2014. г. Приступљено 4. 9. 2014. 
  25. ^ „Wayland FAQ”. Wayland project. Wayland project. Архивирано из оригинала 07. 03. 2011. г. Приступљено 4. 9. 2014.  "Wayland doesn't render on behalf of the clients, it expects the clients to use whatever means they prefer to render into a shareable buffer."
  26. ^ Barnes, Jesse. „Introduction to Wayland” (PDF). Intel Open Source Technology Center.  "Does not include a rendering API – Clients use what they want and send buffer handles to the server"
  27. ^ Gräßlin, Martin (7. 02. 2013). „Client Side Window Decorations and Wayland”. Приступљено 26. 2. 2014. 
  28. ^ „Jolla: Sailfish OS, Qt, and open source”. LWN. 31. 7. 2013. 
  29. ^ e-releasemanager (18. 8. 2013). „A Double Dose Of The W |”. E19releasemanager.wordpress.com. Приступљено 23. 8. 2013. [непоуздан извор?]
  30. ^ Grässlin, Martin. „The History on Wayland Support inside KWin”. Martin’s Blog. Приступљено 15. 7. 2013. 
  31. ^ „Mutter-wayland tarballs”. 
  32. ^ „README file from the Wayland source code repository”. freedesktop.org. Архивирано из оригинала 26. 04. 2012. г. Приступљено 15. 05. 2015. 
  33. ^ Larabel, Michael (16. 2. 2013). „Wayland Begins Porting Process To FreeBSD”. Phoronix. Приступљено 14. 7. 2013. 
  34. ^ „Wayland”. Wayland.freedesktop.org. Приступљено 15. 7. 2013. 
  35. ^ Høgsberg, Kristian (24. 7. 2012). „Wayland and Weston 0.95.0 released”. wayland-devel mailing list. 
  36. ^ Høgsberg, Kristian (22. 10. 2012). „Wayland and Weston 1.0”. wayland-devel mailing list. 
  37. ^ Scherschel, Fabian (23. 10. 2012). „Wayland's 1.0 milestone fixes graphics protocol”. The H - Open. Heinz Heise. Приступљено 14. 7. 2013. 
  38. ^ Larabel, Michael (16. 4. 2013). „Wayland 1.1 Officially Released With Weston 1.1”. Phoronix. Приступљено 14. 7. 2013. 
  39. ^ Høgsberg, Kristian (15. 4. 2013). „1.1 Released”. wayland-devel mailing list. 
  40. ^ Larabel, Michael (6. 1. 2013). „A Software-Based Pixman Renderer For Wayland's Weston”. Phoronix. Приступљено 14. 7. 2013. 
  41. ^ Larabel, Michael (13. 7. 2013). „Wayland 1.2.0 Released, Joined By Weston Compositor”. Phoronix. Приступљено 14. 7. 2013. 
  42. ^ Høgsberg, Kristian (12. 7. 2013). „Wayland and Weston 1.2.0 released”. wayland-devel mailing list. 
  43. ^ Høgsberg, Kristian (11. 10. 2013). „Wayland and Weston 1.3 releases are out”. wayland-devel mailing list. 
  44. ^ Høgsberg, Kristian (20. 5. 2014). „Wayland and Weston 1.5.0 is released”. wayland-devel mailing list. 
  45. ^ Paalanen, Pekka (19. 10. 2014). „Wayland and Weston 1.6.0 released”. wayland-devel mailing list. 
  46. ^ Harrington, Bryce (14. 2. 2015). „[ANNOUNCE] weston 1.7.0”. wayland-devel mailing list. 

Спољашње везе уреди