LINUX.ORG.RU

Wayland — разъяснения от разработчиков KWin

 , ,


0

3

Дисклаймер. В связи с тем, что очень многие (почти все) здесь не понимают, зачем нужен Wayland, пишу в новости, благо есть источник, где кое-что разжёвано. Текст чуть-чуть подсократил, чтобы не захламлять.

Итак, приступим.

  1. В Wayland может быть реализована сетевая прозрачность.

    Это дело конкретного композитора. Всё дело в ошибочном понимании фразы «в Wayland нет сетевой прозрачности». Правильное понимание этой фразы таково: «спецификация Wayland не занимается сетевой прозрачностью и не определяет её». Композиторы могут быть выполнять локальную отрисовку, могут быть сервером и передавать картинку по сети (хоть на много машин одновременно), а могут делать и то и другое. Те, кто думают, что в Wayland сетевой прозрачности быть не может вообще, ошибаются.

  2. Сетевая прозрачность X11 не подходит для современных приложений.

    Она давно устарела, будучи сделанной с расчётом на то, что приложения используют простые команды для отображения содержимого окна, и эти команды можно отправлять по сети. Когда-то это было разумно, но современные приложения не используют X11 для рендеринга, они используют такие технологии как Cairo, Clutter, QPainter (Raster) или OpenGL. В этом случае X11 вынужден отправлять по сети готовую картинку, а для этой ситуации есть технологии, которые делают это гораздо лучше, чем X11. Сетевая прозрачность в X11 померла и так, без участия Wayland.

  3. X11-приложения будут поддерживаться.

    Никто не хочет ломать систему, переход на Wayland будет произведён если и только тогда, когда X11-only приложения будут в ней хорошо работать (через слой совместимости). Сетевую прозрачность X11, очевидно, тоже можно будет использовать.

  4. Сетевой прозрачности не место в оконной системе. Если вы хотите быстрой сетевой прозрачности, ей место в тулките виджетов.

    Оконная система должна просто заниматься отображением картинки, которую ей дали. Она не знает ничего про виджеты, у неё есть только картинка, которую гнать по сети достаточно накладно. Сетевой прозрачности когда-то было место в X11 только потому, что X11 был не только оконной системой, но ещё и тулкитом виджетов.

  5. «Дистибутивы выкинут иксы, моё любимое X11-only приложение не заведётся!»

    Для этого уже есть слои совместимости (X11 приложения можно запускать из композитора Wayland). Поддержку X11 никто не выкинет из дистрибутивов, пока она будет востребована, даже Mac OS X всё ещё поддерживает X11 для совместимости. Постепенно количество X11-only приложений будет уменьшаться (переписывание, естественная смерть), и даже если из вашего дистрибутива поддержку X11 уберут, вы всегда сможете её собрать сами.

Прекратите повторять ошибочные утверждения.

P.S. Отвечу на вопрос «Зачем вообще нужен Wayland, давайте улучшать X11».

Такие (или аналогичные) изменения даже если были бы возможны в X, всё равно бы сломали X11 и дали несовместимый с ним X12. Без слоя совместимости обойтись невозможно, а сам X12 тоже был бы не сахар, так как писался бы с оглядкой на X11. И чем это было бы лучше того, что мы имеем с Wayland?

В основе X11 лежат архитектурные решения более чем двадцатилетней давности (см выше). Так делать уже не надо, очень много функциональности иксов перешло в тулкиты, ядро, D-Bus, и другие системы. Замену легче написать с нуля, которая делает только свою прямую работу, а не пытается объять всё.

>>> Подробности

★★★★★

Проверено: svu ()
Последнее исправление: cetjs2 (всего исправлений: 11)
Ответ на: комментарий от geekless

> Ну в треде речь явно не о виндах. И не о рисовании в файл, для которого сетевая прозрачность не нужна. Так что, очевидно, речь идёт о конкретном типе поверхности.

совсем не очевидно, cairo уже используется вместе с wayland, например

aho
()
Ответ на: комментарий от geekless

> Но API backend-а в отдельный сетевой протокол не выделено. Я так понимаю, ты хочешь именно этого.

Да.

Не вполне ясно, насколько это ускорит отрисовку, по сравнению с. Но теоретически это возможно.

Это наверное ускорит рисовку по сети. Ну и что-то мне подсказывает, что каиро посвежей чем xrender. Хотя скажу честно - не проверял.

Во всяком случае - на один слой абстракции станет меньше.

kir2yar
()
Ответ на: комментарий от geekless

> Потоково?

не совсем понял вопрос, можно хранить историю, можно получить доступ к ее произвольному фрагменту ( смотрю cairo 1.11.2 )

aho
()
Ответ на: комментарий от aho

> конечно, в том числе и записывать действия для их хранения/пересылки и отрисовки на новом месте

Интересно, насколько оно эффективней чем инструкции для xrender? Я к тому, что может проще гонять по сети инструкции каиро?

kir2yar
()
Ответ на: комментарий от kir2yar

> Интересно, насколько оно эффективней чем инструкции для xrender?

на данный момент оно наверняка медленней

aho
()
Ответ на: комментарий от aho

Скажем так: Я хочу нарисовать кнопочку с глянцевым градиентом, надписью и тенью. Сколько инструкций я должен передать на каиро по сети, и сколько на xrender?

kir2yar
()
Ответ на: комментарий от geekless

> Потоково, это так :)

нет, так пока не умеет :)

aho
()
Ответ на: комментарий от kir2yar

> Медленней в прорисовке? Или в передачи данных?

в кол-ве данных - т.е. в передаче, отрисовка через cairo более чем ощутимо быстрей

aho
()
Ответ на: комментарий от aho

Ну так нафига xrender? Допилить сеть в каиро, допилить туда функции совместимые с xrender и принять как новый стандарт? За одно отвяжемся от x11. Можно будет графические серверы хоть каждый год менять.

kir2yar
()
Ответ на: комментарий от kir2yar

> Я хочу нарисовать кнопочку с глянцевым градиентом, надписью и тенью. Сколько инструкций я должен передать на каиро по сети

зависит от того, как будет устроен сетевой протокол, в идеале - одинаково, сейчас cairo при дампе вроде использует xml, что ес-но раздувает «выхлоп»

aho
()
Ответ на: комментарий от aho

>сейчас cairo при дампе вроде использует xml, что ес-но раздувает «выхлоп»

И прекрасно жмется гзипом.

kir2yar
()
Ответ на: комментарий от geekless

> то почему бы не впендюрить сетевую прозрачность в cairo?

Уже. Выше ссылку на исходник с пруфом я давал.

Не, речь идет о том, чтобы было расширение протокола X11 под названием XCairo с его высокоуровневыми запросами типа «нарисовать кривую Безье с прозрачностью 10%». То есть вместо XRender. XRender специально спроектирован так, чтобы быть очень маленьким подмножеством команд для отрисовки 2D-графики, но достаточным, чтобы можно было рисовать 2D-объекты.

Прицип такой сейчас. X-клиент берет объект, делает tessellation каким-то эффективным алгоритмом либо в треугольники, либо в трапезоиды. Алгоритм на выбор клиента. А потом эти трепезоиды и треугольники передаются по протоколу XRender на X-сервер и композитятся в изображение на X-сервере. Если железо позволяет, то эта операция может значительно ускоряться (вот тут основная проблема — драйверы). А если пихать Cairo в X-сервер, то мы должны на сервер отправить реализацию и софтверного рендеринга (для фоллбэка), и реализацию cairo с opengl для тех карт, которые умеют ускорение opengl. Вероятно есть карты, которые не умеют opengl, но могут ускорять операции с трапезоидами. При этом надо помнить, что Cairo — это слишком вариантивная вещь для таких вещей как X-сервер и стандарт, который должен фиксировать какое-то подмножество. Ну и еще надо помнить, что cairo не все используют и вообще хотят использовать. Так что cairo сейчас имеет бекенд xlib/xcb, который может на свое усмотрение может либо пересылать целой отрендеренной картинкой (например, мелкие изображения), либо рассекать на трапезоиды и передавать их на X Server через XRender.

Zubok ★★★★★
()
Ответ на: комментарий от Zubok

Просто идея в том, что бы отделить рисовалку, от той фигни что выводит саму картинку.

А то у нас сейчас сервер и рисует, и картинку кажет, и мышками рулит, разве что звук в него не запилили...

Я понимаю, что это модульно и круто. Но готов поспорить, что сопровождать такую уйму вещей явно очень сложно.

Было бы так: одна программа хорошо рисует, вторая хорошо показывает на экране, третья хорошо рулит устройствами ввода, четвертая делает что-то еще...

kir2yar
()
Ответ на: комментарий от kir2yar

Эх. И что бы можно было окошко между разными графическими серверами гонять... Но это уже совсем мечты...

kir2yar
()
Ответ на: комментарий от Zubok

> Прицип такой сейчас. X-клиент берет объект, делает tessellation каким-то эффективным алгоритмом либо в треугольники, либо в трапезоиды. Алгоритм на выбор клиента. А потом эти трепезоиды и треугольники передаются по протоколу XRender на X-сервер и композитятся в изображение на X-сервере.

Так что cairo сейчас имеет бекенд xlib/xcb, который может на свое усмотрение может либо пересылать целой отрендеренной картинкой (например, мелкие изображения), либо рассекать на трапезоиды и передавать их на X Server через XRender.

Не совсем так. cairo xlib backend транслирует вызовы cairo непосредственно в растровые команды XRender, такие как FillRectangles и CompositeGlyphs. Во всяком случае, слежение за приложениями на Gtk2 даёт такую картину.

Если же поддержку Xrender на сервере выключить, то происходит пересылка фрагментов изображения средствами core protocol.

geekless ★★
()
Ответ на: комментарий от geekless

>Не совсем так. cairo xlib backend транслирует вызовы cairo непосредственно в растровые команды XRender, такие как FillRectangles и CompositeGlyphs.

Не-е-е-е, это он делает для текста и виджетов (Rectangles), поэтому ты и наблюдаешь такое. Для глифов в XRender специальные команды, потому что глифы — это специальные объекты, они живут на сервере долго и используются повторно. А ты попробуй графику.

Zubok ★★★★★
()
Ответ на: комментарий от AST-PM-105

>>Я сейчас запустил Qt приложение по сети. Результат: ШГ, убогие градиенты, пропадающие контролы и тормоза. То же самое через vnc — отсутствие тормозов, и лишь едва заметные искажения картинки (из-за сжатия)

+1, то же самое. По этой причине через интернет - только vnc.

former_anonymous ★★★
()
Ответ на: комментарий от Zubok

> Не-е-е-е, это он делает для текста и виджетов (Rectangles), поэтому ты и наблюдаешь такое.

Типичный GUI и состоит процентов на 90 из рамок и текста. Во всяком случае, если не пользоваться гламурными темами оформления.

geekless ★★
()
Ответ на: комментарий от kir2yar

> Где ты видел тех, кто не пользуется гламурными темами оформления? ) Только на лоре? ))

Где ты видел тех, кто гоняет гламурные темы оформления по сети? Пожалуй, только на ЛОРе таких неадекватов и встретишь.

geekless ★★
()
Ответ на: комментарий от kir2yar

Да, кстати, тут на форуме, не имеющем никакого отношения ни к линуксу, ни к ITшникам вообще, видел разговор на тему, какое же говно, все эти новые темы оформления в виндах, и что самая лучшая тема из виндовых — серо-коричневая «классика». Адекватные люди, которые за компьютерами работают, а не фапают, предпочитают беречь зрение.

geekless ★★
()

Пропатчил x11trace, чтобы проэмулировать канал с пропускной способностью 10 кБ/с. Запустил thunar. Подтормаживает, но работает вполне сносно.

geekless ★★
()
Ответ на: комментарий от geekless

>Ну ладно, выкинул ты весь «неиспользуемый хлам». Хорошо, ладно, молодец. Всё остальное, чем занимаются иксы, ты через астрал пустишь?

зачем «все» то, по сути там не многое надо для организации сетевой прозрачности. как это сделают я не знаю но очевидно что иксовые подсистемы и архитектуру никто копировать не будет. Ну да, скорее всего уже всякие винманагеры, доки, таскабары итд уже так просто писать не получится, посмотрим что они предложат.

Поэтому первое время возникнет ломка и у програмистов и у пользователей.

TheMixa ★★★
()
Ответ на: комментарий от geekless

Вывод: geekless со своими фороникс-стайл тестами не нужен -))

Un
()
Ответ на: комментарий от ZenitharChampion

Странно, что хвалёное сообщество обнаружило порчу только спустя столько времени.

Un
()
Ответ на: комментарий от geekless

>Типичный GUI и состоит процентов на 90 из рамок и текста. Во всяком случае, если не пользоваться гламурными темами оформления.

Ага, состоит. Но ты попробуй, например, включить xtrace и провести мышкой над radiogroup в GTK. Обрати внимание на запросы с большим числом координат.

Zubok ★★★★★
()
Ответ на: комментарий от TheMixa

> посмотрим что они предложат

Очередной велосипед поверх dbus, который наверняка будет:
1) требовать передачи большего количества данных;
2) предоставлять меньше возможностей;
3) с помпой распиарен какнониклом и внедрён куда попало.

Как результат: нормальное использование линукса на десктопе можно отодвинуть еще лет на 10.

geekless ★★
()
Ответ на: комментарий от Zubok

> провести мышкой над radiogroup в GTK. Обрати внимание на запросы с большим числом координат

Эм. Ну и что? Перерисовка-то производится только на on_enter и on_leave для виджета, а не на каждое передвижение мыши.

Кстати, есть вообще централизованный способ отключить эту подсветку виджетов при наведении? С корнем отключить, чтобы оно даже маску для событий передвижения мыши не открывало без надобности.

geekless ★★
()
Ответ на: комментарий от geekless

>Эм. Ну и что? Перерисовка-то производится только на on_enter и on_leave для виджета, а не на каждое передвижение мыши.

Да я не про это! Я про то, чтобы ты там увидел RenderTrapeziods, а не только Rectangles.

Zubok ★★★★★
()
Ответ на: комментарий от geekless

Разработка и стандартизация высокоуровневых «прозрачных» сетевых протоколов для графических тулкитов, по-видимому, является довольно актуальной задачей.

vnm0
()
Ответ на: комментарий от kir2yar

Я понимаю, что с точки зрения графического сервера - это все один большой пиксмап, но разве нельзя большие пиксмапы жать как-то? VNC-то справляется.

kir2yar
()
Ответ на: комментарий от kir2yar

> Таки кто скажет, почему окно браузера так медленно рисуется через православный сетевой X11?

браузеры рисуют все в буфер, так и быстрей, и нет надобности постоянно рисовать одно и то же - можно просто показать готовую картинку, в том числе и при скроллинге

aho
()
Ответ на: комментарий от kir2yar

>Я понимаю, что с точки зрения графического сервера - это все один большой пиксмап, но разве нельзя большие пиксмапы жать как-то? VNC-то справляется.

Здесь несколько раз уже прозвучало слово NX. Он занимается и сжатием, и кешированием. Тебе X-приложения как-то запрещают передавать их через VNC или RDP? Даже решения уже есть. Если тебе так нравятся они — работай. Но зачем отнимать X11 у тех, кто им доволен и у кого он работает приемлемо в локальных сетях?

Таки кто скажет, почему окно браузера так медленно рисуется через православный сетевой X11?

Видео NX на Nokia n900. Сессия в Убунте.

http://www.youtube.com/watch?v=xYECjXxkIVw

Zubok ★★★★★
()
Ответ на: комментарий от geekless

А пинг какой эмулируется?
Ну и пока ты с x11trace: попробуй выделить текст (мышью) в multiline edit-виджете в GTK+. Интересно, нафиг они так делают?

x3al ★★★★★
()
Ответ на: комментарий от ChALkeR

ты проверяешь qt -й утилитой работу qt приложения а потом всё валишь на X-ы

argin ★★★★★
()
Ответ на: комментарий от kir2yar

А можно ли весь гуй рисовать силами видюхи? Я просто немного не в теме, но не быстрее ли было бы, если бы отрисовкой кнопочек и шрифтов занимался не проц, а видеокарта?
Да, Qt умеет использовать OpenGL.

RussianNeuroMancer ★★★★★
()
Ответ на: комментарий от sv75

> Ну скажем вот: http://www.dino-saurs.ru/ornitolest.html

Вам точно не стоит начать давать советы сначала зеркалу?


Ссылка показывает что на земле нет ни одного вида, сохранившегося со времен динозавров? Или крокодилы, ящерицы и т.п. чем-то от них отличаются и не жили в то время? Жили? Ну так о чём спор? Что некоторые мелкие тоже сдохли? Естественно что мир не делится на чёрное и белое и не все умирают по одному шаблону, но абстракция вполне схожа имхо.

Или тебе нужно быть правым любой ценой? Ок, будь правым. Можешь засунуть её себе глубоко в одно место.
Вот тебе абстракция правды, для облегчения процесса: OO====o

d9d9 ★★★★
()
Ответ на: комментарий от x3al

> А пинг какой эмулируется?

Я тупо после каждого write ставлю задержку с тем рассчётом, чтобы отсылка одного байта занимала 1/10000 секунды.

Ну и пока ты с x11trace: попробуй выделить текст (мышью) в multiline edit-виджете в GTK+. Интересно, нафиг они так делают?

Мне лень читать лог, т.к. там постоянно сыплется мусор на мигание курсора. Что они делают?

geekless ★★
()
Ответ на: комментарий от geekless

>Что они делают?
Каждый (!) mousemove заново делает окно владельцем PRIMARY, обновляя его. По логике это должно быть только при отпускании мыши.

x3al ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.