Лю­бая сов­ремен­ная UNIX-сис­тема исполь­зует сер­вер X Window для отоб­ражения гра­фичес­кого интерфей­са и обра­бот­ки поль­зователь­ско­го вво­да. В этом году иксам исполня­ется 30 лет, за которые они успе­ли обрасти огромным количес­твом рас­ширений и прев­ратить­ся в слож­ный для понима­ния и доработ­ки про­ект с мил­лиона­ми строк кода. Это поис­тине арха­ичная сис­тема, боль­шей частью сос­тоящая из дав­но отживших свое ком­понен­тов, кос­тылей и хаков. Ее дав­но пора заменить, и Wayland — отличный кан­дидат на эту роль.
 

Проблемные иксы

X Window появи­лась на свет во вре­мена мей­нфрей­мов и тер­миналь­ных кли­ентов. Суть идеи, которая лег­ла в осно­ву этой сис­темы, была сле­дующей: надо соз­дать гра­фичес­кую сис­тему, которая бы работа­ла по прин­ципу ста­рого доб­рого тек­сто­вого тер­минала. При­ложе­ния дол­жны были работать на мей­нфрей­ме, обла­дающем боль­шой вычис­литель­ной мощ­ностью. А гра­фика отоб­ражать­ся на десят­ках под­клю­чен­ных с помощью сетево­го кабеля тон­ких кли­ентов.

Что­бы работать в такой кон­фигура­ции, гра­фичес­кая сис­тема дол­жна была обла­дать опре­делен­ными харак­терис­тиками, вклю­чая сетевую проз­рачность, эко­номич­ность про­токо­ла переда­чи дан­ных (на 10-килобит­ных каналах осо­бо гра­фику не погоня­ешь) и под­держи­вать самые прос­тые монох­ромные дис­плеи. Реали­зуя все эти харак­терис­тики, раз­работ­чики X Window соз­дали сетевой про­токол, базиру­ющий­ся на прос­тых коман­дах отри­сов­ки, таких как «линия», «квад­рат», «текст», которые могут исполь­зовать кли­енты (при­ложе­ния). При­ложе­ния работа­ют на мей­нфрей­ме и соз­дают кар­тинку на сер­вере, который работа­ет на тон­ком кли­енте (как бы стран­но это ни зву­чало).

В пер­вые годы сущес­тво­вания иксов все это прек­расно работа­ло и не вызыва­ло никаких воп­росов. Но по мере появ­ления все более раз­витых дис­пле­ев, уве­личе­ния про­изво­дитель­нос­ти и ухо­да от идеи «мей­нфрейм — тер­минал» к ста­ционар­ным ПК ущер­бность X Window ста­нови­лась все более оче­вид­ной. Сна­чала раз­работ­чикам приш­лось добавить в про­токол идею цве­тов, из‑за чего про­токол раз­росся и в нем появи­лись фун­кции опро­са тер­минала о его воз­можнос­тях (монох­ромный, 16 цве­тов, 256 цве­тов), допол­нитель­ные гра­фичес­кие фун­кции (все это есть в про­токо­ле до сих пор). Затем приш­лось решить проб­лему отоб­ражения слож­ной гра­фики, в резуль­тате чего появил­ся про­токол XRender, базиру­ющий­ся на иде­ях гра­фичес­кой под­систе­мы Plan 9. Далее появи­лась проб­лема работы с мно­жес­твом шриф­тов, для решения которой соз­дали еще и спе­циаль­ный font-сер­вер. Затем при­шел черед рас­тро­вой гра­фики, видео, теней, проз­рачнос­ти, OpenGL, низ­кой про­изво­дитель­нос­ти на локаль­ной машине (для решения которой при­дума­ли спо­соб работы с кли­ента­ми через раз­деля­емую память) и мно­гое‑мно­гое дру­гое.

info

Пол­ная интегра­ция Wayland с дис­три­бути­вом Fedora и сре­дой GNOME будет обес­печена в Fedora 21.

Все эти изме­нения мог­ли бы стать обыч­ным эво­люци­онным про­цес­сом, свой­ствен­ным любому дол­го живуще­му ПО, если бы в 1979 году раз­работ­чики не при­няли решение зак­репить 11-ю вер­сию про­токо­ла и боль­ше не вно­сить в нее изме­нения (это и есть X11). В усло­виях гос­подс­тва зак­рытого соф­та в 1980-е обратная сов­мести­мость всех пос­леду­ющих вер­сий X Window с ранее написан­ным ПО поз­волила иксам занять лидиру­ющие позиции как стан­дар­тной сис­темы в мире UNIX. Но в резуль­тате при­вела к ее чрез­вычай­ному усложне­нию.

Фак­тичес­ки сов­ремен­ный Xorg — это не что иное, как иксы образца 1979 года с огромным количес­твом обве­сок и рас­ширений, при­леп­ленных к нему с раз­ных сто­рон. Да, с его помощью дей­стви­тель­но мож­но запус­тить софт 20-лет­ней дав­ности, исполь­зуя древ­нюю виде­окар­ту с 256 Кб памяти, но пла­тить за это при­ходит­ся необос­нован­ной слож­ностью сис­темы, ее тяжестью, жад­ностью к ресур­сам и, что не менее важ­но, арха­ичным интерфей­сом прог­рамми­рова­ния (я имею в виду чис­тый Xlib, а не GTK или Qt).

95% фун­кци­ональ­нос­ти Xorg в сов­ремен­ных при­ложе­ниях никак не исполь­зует­ся. Это мер­твый код, нуж­ный для сов­мести­мос­ти со ста­рым соф­том и железом. Сегод­ня при­ложе­ния фор­миру­ют кар­тинку пол­ностью самос­тоятель­но и переда­ют ее X-сер­веру уже в готовом виде, а пос­ледний отве­чает толь­ко за то, что­бы ском­поновать из отдель­ных окон окон­чатель­ное изоб­ражение (исполь­зуя драй­вер виде­окар­ты) и вер­нуть назад события с кла­виату­ры и мыши. Это дей­стви­тель­но прос­тые опе­рации, для выпол­нения которых ста­рый Xorg с его сетевой проз­рачностью, мно­жес­твом рас­ширений, под­дер­жкой древ­него железа, надс­тро­ек и кос­тылей не нужен.

 

Мы свой Xorg построим

Единс­твен­ный спо­соб решить мно­гочис­ленные проб­лемы Xorg — это изба­вить­ся от него пол­ностью и соз­дать новый гра­фичес­кий сер­вер. Попыт­ки сде­лать это в раз­ные вре­мена пред­при­нима­ли мно­гие коман­ды раз­работ­чиков, вклю­чая прог­раммис­тов из про­ектов DirectFB и GGI. Одна­ко даль­ше еди­нич­ных слу­чаев при­мене­ния во встра­иваемом обо­рудо­вании дело не доходи­ло, и боль­шинс­тво из этих про­ектов умер­ли в заб­вении.

Про­ект Wayland прод­винул­ся нам­ного даль­ше сво­их кон­курен­тов. Он не толь­ко получил под­дер­жку круп­ных про­ектов, но и стал глав­ным кан­дидатом на роль замены иксов. Про­ект был начат Крис­тианом Хёг­сбер­гом (Kristian Høgsberg) вско­ре пос­ле окон­чания работ над AIGLX, оче­ред­ным рас­ширени­ем Xorg, которое поз­волило X-сер­веру исполь­зовать пре­иму­щес­тва сов­ремен­ных 3D-уско­рите­лей при выводе изоб­ражения на экран (нас­тоящая проз­рачность, тран­сфор­мации окон, визу­аль­ные эффекты и про­чее).

По сво­ей сути Wayland пред­став­ляет собой «новый Xorg», то есть сис­тему, иде­оло­гичес­ки близ­кую к X Window, но соз­данную с уче­том пре­дыду­щих оши­бок и без все­го накоп­ленно­го бал­ласта. Как и иксы, Wayland — это про­токол вза­имо­дей­ствия, в котором в качес­тве сер­вера выс­тупа­ет ком­позит­ный менед­жер. Его фун­кция — объ­еди­нить гра­фичес­кие буферы при­ложе­ний (про­ще говоря, окна) на экра­не и передать события вво­да нуж­ному окну.

Всю работу по отри­сов­ке интерфей­са выпол­няют сами при­ложе­ния (с помощью гра­фичес­ких тул­китов GTK+, Qt или гра­фичес­ких биб­лиотек Clutter или SDL) и, ког­да это нуж­но, отда­ют резуль­тат ком­позит­ному менед­жеру через UNIX-сокет. Пос­ледний, в свою оче­редь, исполь­зует DRM (Direct Rendering Manager), что­бы вывес­ти кар­тинку на экран и получить события вво­да с помощью Linux-драй­вера evdev. Wayland не реали­зует фун­кций отри­сов­ки, не тре­бует соз­дания спе­циаль­ных драй­веров (задей­ству­ются DRI-сов­мести­мые драй­веры, так­же под­держи­ваемые X.org) и в целом очень прост в реали­зации.

Проб­лема сов­мести­мос­ти с ранее написан­ным соф­том здесь так­же решена куда более изящ­но. Про­токол Wayland стро­го вер­сиони­рован, то есть может без­болез­ненно менять­ся на про­тяже­нии сво­ей жиз­ни. А ранее написан­ный софт прос­то будет исполь­зовать одну из пре­дыду­щих вер­сий про­токо­ла, глав­ное, что­бы она была реали­зова­на в ком­позит­ном менед­жере. Более того, Wayland поз­воля­ет бес­шовно запус­кать внут­ри себя софт, написан­ный для иксов, для чего исполь­зует­ся спе­циаль­ная реали­зация X-сер­вера (XWayland), которая запус­кает­ся как кли­ент Wayland для отдель­но взя­того при­ложе­ния.

 

Статус поддержки

Как опци­ональ­ный ком­понент Wayland уже есть в дис­три­бути­вах Fedora и Arch Linux и может быть уста­нов­лен в виде набора пакетов в некото­рые дру­гие дис­три­бути­вы. Ста­тус под­дер­жки Wayland в гра­фичес­ких сре­дах пока огра­ничен. В экспе­римен­таль­ном режиме огра­ничен­ная под­дер­жка есть в GNOME, KDE и Enlightenment, одна­ко исполь­зовать их пол­ноцен­но не удас­тся, так как мно­гие ком­понен­ты до сих пор работа­ют толь­ко поверх иксов.

В ком­плек­те с Wayland идет эта­лон­ная реали­зация ком­позит­ного менед­жера Weston. Он пред­став­ляет собой прос­тую гра­фичес­кую обо­лоч­ку, которая поз­воля­ет запус­кать при­ложе­ния и управлять окна­ми. Ее мож­но исполь­зовать уже сей­час, но боль­шого смыс­ла в этом нет, так как Weston соз­дан в наг­лядной демонс­тра­ции воз­можнос­тей Wayland.

Wayland vs Mir

В свое вре­мя ком­пания Canonical собира­лась исполь­зовать Wayland в дис­три­бути­ве Ubuntu. Одна­ко в 2012 году ком­пания отка­залась от Wayland в поль­зу сво­его собс­твен­ного дис­плей­ного сер­вера Mir, пер­вую аль­фа‑вер­сию которо­го выкати­ла уже через год. В качес­тве при­чин отка­за от Wayland ком­пания ука­зала неп­равиль­ную с их точ­ки зре­ния реали­зацию обра­бот­чика событий вво­да, что не было при­нято сооб­щес­твом Wayland всерь­ез, так как Canonical даже не пыталась вес­ти дис­куссию на эту тему или пред­ложить перера­ботан­ную реали­зацию.

В целом Mir ока­зал­ся очень похожим на Wayland с его минима­лиз­мом и заточ­кой под одну кон­крет­ную задачу, но еще боль­ше он казал­ся похожим на ком­позит­ный менед­жер SurfaceFlinger из Android. В час­тнос­ти, идеи обра­бот­ки событий вво­да и исполь­зование EGL как еди­ного канала работы с гра­фичес­кими драй­верами взя­ты имен­но из Android, при­чем пер­вый вмес­те с исходни­ками.

Сей­час Mir находит­ся в финаль­ной ста­дии раз­вития и пока не вклю­чен в Ubuntu по умол­чанию. Раз­работ­чики дру­гих дис­три­бути­вов и гра­фичес­ких сред (KDE, E17) уже отка­зались от пор­тирова­ния сво­их про­дук­тов на Mir, так как не счи­тают пра­виль­ным сос­редото­чивать силы раз­работ­ки одно­го из основных ком­понен­тов сис­темы в руках отдель­но взя­той ком­пании.

Сов­сем дру­гое дело — окру­жение рабоче­го сто­ла Hawaii, соз­данное спе­циаль­но для Wayland и в целом уже более‑менее при­год­ное для исполь­зования. Hawaii вклю­чает в себя ком­позит­ный менед­жер, обо­лоч­ку рабоче­го сто­ла со стро­кой сос­тояния, меню при­ложе­ний, аппле­тами для управле­ния зву­ком и сетью. В ком­плек­те име­ется при­ложе­ние для нас­трой­ки сис­темы, фай­ловый менед­жер, тер­минал, тек­сто­вый редак­тор, PDF-ридер и прос­мот­рщик изоб­ражений (опци­ональ­но дос­тупен бра­узер и IRC-кли­ент).

Под­дер­жка Wayland уже добав­лена во мно­гие гра­фичес­кие биб­лиоте­ки и тул­киты, такие как GTK+, Qt, SDL и Clutter, поэто­му некото­рые осно­ван­ные на них при­ложе­ния мож­но запус­тить как кли­ент Wayland без переком­пиляции (биб­лиоте­ка сама выберет, какой спо­соб вывода изоб­ражения исполь­зовать). Боль­шинс­тво при­ложе­ний, тем не менее, до сих пор исполь­зуют пря­мые вызовы к иксам, но в таких сре­дах, как GNOME и KDE, их ста­новит­ся все мень­ше.

Что каса­ется гра­фичес­ких драй­веров, то в целом здесь все в поряд­ке. Как я уже говорил, Wayland исполь­зует DRM для вза­имо­дей­ствия с драй­вером, а сегод­ня это стан­дарт, под­дер­жка которо­го есть во всех откры­тых драй­верах, вклю­чая Intel, Radeon и NVIDIA (Nouveau). С зак­рытыми драй­верами пока все слож­нее, но на дан­ном эта­пе хва­тит и откры­тых.

Статус поддержки Wayland в крупных проектах

  • Прог­рам­мное обес­печение кон­сорци­ума GENIVI Alliance, пред­назна­чен­ное для соз­дания авто­мобиль­ных раз­вле­катель­ных сис­тем.
  • Фрей­мворк Maliit, пред­назна­чен­ный для соз­дания вир­туаль­ных кла­виатур для мобиль­ных устрой­ств (исполь­зует­ся в Nokia N9, KDE Plasma Active, устрой­ствах OLPC и Ubuntu Touch).
  • Mesa — откры­тая реали­зация OpenGL, исполь­зуемая в сво­бод­ных драй­верах Intel, ATI, NVIDIA (Nouveau) и Qualcomm Snapdragon (freedreno).
  • Мо­биль­ная опе­раци­онная сис­тема Sailfish OS (форк MeeGo).
  • ОС Tizen, раз­вива­емая Samsung и пре­дус­танов­ленная на часы Gear 2.
  • Ок­ружение рабоче­го сто­ла Enlightenment (под­дер­жка на уров­не при­ложе­ний, ком­позит­ный менед­жер пока не реали­зован).
  • GNOME 3.12 под­держи­вает Wayland в экспе­римен­таль­ном режиме (боль­шинс­тво при­ложе­ний пока работа­ют толь­ко поверх X).
  • KDE 4.11 име­ет час­тичную под­дер­жку Wayland (на уров­не ком­позит­ного менед­жера и некото­рых при­ложе­ний, в том чис­ле офис­ного пакета Calligra Suite).
  • Ок­ружение Mate пла­ниру­ется перевес­ти на Wayland с выпус­ком 1.10.
  • Фонд Raspberry Pi работа­ет над под­дер­жкой Wayland, но не в качес­тве пол­ной замены X.
  • Ком­пания Intel пор­тирова­ла бра­узер Chromium для работы поверх Wayland в рам­ках про­екта ozone-wayland.

Пол­ная под­дер­жка Wayland уже есть в тул­китах Clutter, EFL, GTK+, Qt 5 и SDL.

 

Тестируем!

Са­мый прос­той спо­соб затес­тить Wayland — это ска­чать и запус­тить LiveCD-дис­три­бутив под наз­вани­ем RebeccaBlackOS (это в честь аме­рикан­ской певич­ки такой). Нес­мотря на наз­вание, дис­три­бутив доволь­но полез­ный и поз­воля­ет потес­тить мно­жес­тво самых раз­ных при­ложе­ний из ком­плек­та KDE, GNOME и Enlightenment в сре­де Weston или Hawaii. Там же есть XWayland и куча иксо­вых при­ложе­ний для тес­тинга.

Ска­чать дис­три­бутив мож­но на sf.net, вес — 1,1 Гб. Он отлично работа­ет на голом железе, но под­держи­вает так­же и VirtualBox. Дос­таточ­но толь­ко вклю­чить рас­ширение PAE/NX в нас­трой­ках про­цес­сора вир­туаль­ного окру­жения и выб­рать вывод через framebuffer в меню заг­рузчи­ка LiveCD. 3D-уско­рение в этом слу­чае работать не будет, но ты это­го не заметишь (будет задей­ство­вана соф­твер­ная реали­зация OpenGL). Сра­зу пос­ле заг­рузки сис­тема пред­ложит выб­рать один из трех вари­антов дес­ктоп‑интерфей­са: клас­сичес­кий Weston, Hawaii или Orbital. Пос­ледний — неч­то вро­де очень сырого KDE, соб­ранно­го на колен­ке.

Окно логина RebeccaBlackOS
Ок­но логина RebeccaBlackOS

Не­важ­но, какой из них ты выберешь. Из любого мож­но запус­тить мно­жес­тво при­ложе­ний из сос­тава KDE, GNOME и Enlightenment. Боль­шинс­тво из них будет запуще­но в качес­тве Wayland-кли­ентов, но некото­рые работа­ют поверх XWayland. Раз­ницу меж­ду ними ты сра­зу заметишь, так как Wayland-при­ложе­ния будут иметь раз­ные декора­ции окон, в зависи­мос­ти от при­над­лежнос­ти к гра­фичес­кой сре­де: синяя рам­ка для KDE-при­ложе­ний, чер­ная для при­ложе­ний Enlightenment, белая для GTK/Gnome и белая с гра­диен­том для при­ложе­ний XWayland или род­ных при­ложе­ний Wayland.

Четыре редактора из разных графических сред в Weston
Че­тыре редак­тора из раз­ных гра­фичес­ких сред в Weston

Для поль­зовате­ля Linux, зна­юще­го, что такое менед­жер окон, такой раз­брод офор­мле­ния может показать­ся стран­ным, одна­ко в Wayland это нор­маль­ная ситу­ация. Здесь при­ложе­ния сами отве­чают за отри­сов­ку декора­ций окон, и, по сути, она может быть любой (или не сущес­тво­вать вооб­ще). В будущем, конеч­но, при­дума­ют спо­собы уни­фика­ции офор­мле­ния для всех при­ложе­ний, запущен­ных в одной сре­де, но пока все это выг­лядит доволь­но смеш­но.

Из дру­гих при­ложе­ний в дис­три­бути­ве мож­но най­ти веб‑бра­узер Firefox, тор­рент‑кли­ент Transmission, раз­личные ути­литы, NetworkManager и дру­гие. Они работа­ют поверх XWayland. В целом LiveCD вклю­чает солид­ный набор при­ложе­ний, но исполь­зовать его для решения пов­седнев­ных задач, конеч­но же, не получит­ся. Сис­тема час­то пада­ет, в ней мно­го раз­ного рода глю­ков и кос­тылей. Некото­рые из них — следс­твие неком­петен­тнос­ти авто­ра LiveCD, дру­гие выз­ваны сыростью гра­фичес­ких окру­жений и при­ложе­ний. Тот же Hawaii, нес­мотря на всю свою внеш­нюю прив­лекатель­ность, полон багов, которые при­водят к падени­ям и раз­личным гра­фичес­ким глит­чам. С дру­гой сто­роны, дис­три­бутив отлично под­ходит для озна­ком­ления с Wayland, и здесь ему прос­то нет аль­тер­натив.

Среда Hawaii в RebeccaBlackOS
Сре­да Hawaii в RebeccaBlackOS
Firefox под управлением Weston
Firefox под управле­нием Weston
 

И еще раз тестируем!

Еще один прос­той и бес­кров­ный метод опро­бовать Wayland — это Arch Linux. В этом дис­три­бути­ве биб­лиоте­ки GTK+, qt, SDL и Clutter по умол­чанию соб­раны с под­дер­жкой Wayland, а сам он (биб­лиоте­ка с реали­заци­ей) уста­нав­лива­ется как их зависи­мость. Так­же в репози­тории всег­да дос­тупен Weston, а уста­новить Hawaii мож­но, под­клю­чив офи­циаль­ный репози­торий про­екта (в дру­гих дис­три­бути­вах приш­лось бы собирать из исходни­ков).

info

Для запус­ка GNOME под управле­нием Wayland сле­дует исполь­зовать коман­ду gnome-session --session=gnome-wayland.

За­пус­тить Weston и Hawaii мож­но не толь­ко поверх голого железа (из кон­соли, при­бив иксы), но и как обыч­ный кли­ент иксов. Все, что нуж­но сде­лать, — это прос­то запус­тить Weston из эму­лято­ра тер­минала:

$ sudo pacman -S weston
$ weston --fullscreen
Weston, запущенный поверх иксов в Arch Linux
Weston, запущен­ный поверх иксов в Arch Linux

По умол­чанию в панели запус­ка Weston дос­тупен толь­ко тер­минал, но с его помощью мож­но запус­тить нес­коль­ко тес­товых при­ложе­ний. Их име­на начина­ются на weston-, так что най­ти их будет прос­то. Добавить при­ложе­ния в панель, а так­же акти­виро­вать дру­гие его воз­можнос­ти мож­но с помощью кон­фига (~/.config/weston.ini):

[core]
# Включаем поддержку XWayland
modules=desktop-shell.so,xwayland.so
[shell]
# Меняем обои
background-image=/путь/до/изображения.jpg
# Меняем цвет панели
panel-color=0x90ff0000
# Меняем эффект открытия окон
animation=zoom
[keyboard]
# Включаем русскую раскладку с переключением по Caps Lock
keymap_rules=evdev
keymap_layout=us,ru
keymap_loptions=grp:caps_toggle
[launcher]
# Добавляем Firefox в панель запуска
icon=/usr/share/icons/hicolor/24x24/apps/firefox.png
path=/usr/bin/firefox
[screensaver]
# Хранитель экрана
path=/usr/libexec/weston-screensaver
duration=600

Что каса­ется Hawaii, то его уста­нов­ка про­изво­дит­ся сле­дующим обра­зом:

  1. До­бав­ляем в кон­фиг /etc/pacman.conf сле­дующие стро­ки:
[hawaii]
Server = http://archive.maui-project.org/archlinux/$repo/os/$arch
SigLevel = Optional TrustAll
  1. Об­новля­ем индекс репози­тори­ев и пакетов:
$ sudo pacman -Sy
  1. Ус­танав­лива­ем Hawaii плюс менед­жер логина SSDM, бра­узер QupZilla и IRC-кли­ент Communi:
$ sudo pacman -S hawaii-meta-git communi-desktop-git qupzilla-qt5-git sddm-qt5-git
  1. За­пус­каем Hawaii (в иксах или из голой кон­соли, при­бив иксы):
$ /opt/hawaii-git/bin/hawaii

Так­же может пот­ребовать­ся при­нуди­тель­ная уста­нов­ка пакета icu:

$ sudo pacman -S icu

info

При желании Wayland мож­но запус­тить даже в Android, для чего пре­дус­мотре­на прос­лой­ка сов­мести­мос­ти виде­одрай­веров libhybris.

 

Вместо выводов

Wayland уже готов для того, что­бы окон­чатель­но отпра­вить иксы на помой­ку исто­рии. Он прост, отве­чает сов­ремен­ным тре­бова­ниям и лишен огромно­го количес­тва мусор­ного кода, одна­ко в бли­жай­шие пять лет мы, ско­рее все­го, не уви­дим пол­ного избавле­ния дис­три­бути­вов от X Window. Очень мно­го работы еще пред­сто­ит сде­лать, что­бы пор­тировать ста­рый, но нуж­ный софт.

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    0 комментариев
    Межтекстовые Отзывы
    Посмотреть все комментарии