LINUX.ORG.RU
ФорумTalks

Немного о совершенстве Wayland

 


1

4

Иногда одни окна нужно встраивать в другие. Примеры использования:

  • Виджеты для панели в Xfce4 и некоторых других DE, каждый виджет это отдельное окно которое размещается в окне панели, если виджет падает, то панель просто его перезапустит, а сама продолжит работать
  • Встраивание окна с игрой в редактор Godot

Про Godot я и хочу поговорить, недавно они решили переходить на Wayland, как же там встроить окно?

А ответ прост, нужно заново реализовать Wayland-сервер, но уже в приложении, на котором будут запускаться дочерние окна, и уже через него рисоваться, как будто окно приложения это весь экран, именно поэтому в Godot была попытка внедрить wlroots.

Надо сказать что несмотря на гениальность решения, стороннее окно не получится присвоить себе, что конечно очень безопасно, да и кому это нужно?

Так же у такого решения имеется еще один недостаток, реализовывать заново весь Wayland сервер это сложно. Поэтому разработчику Godot пришла гениальная идея, сделать некий прокси, который будет переписывать некоторые сообщения протокола, и переадресовывать их на основное окно. Конечно нужно обрабатывать кучу протоколов и парсить XML файлы что бы все работало, и потом следить за этим и при выходе новых протоколов обновлять Godot.

Но такой прокси, в отличии от повторной реализации Wayland сервера, намного проще, для альфы пришлось написать всего около 3 000 строк! Так что несмотря на некоторые недостатки, решение хорошее. Конечно решение еще сырое, но даже 6 000 строк это не так уж и плохо.

А теперь покажу как встраиваются окна в MS Windows Win32:

SetParent(child_window, parent_window);

Пожелаю удачи разработчику Godot, и побольше терпения, потому что ему нужно учесть много факторов, например fractional scaling, ну и пусть заодно учтет все будущие протколы.

★★★★★

Последнее исправление: MOPKOBKA (всего исправлений: 8)

Просто Wayland не нужен, есть иксы и не надо было какой-то костыль пилить изначально, который уже по дизайну сразу хуже. Например нет сетевой прозрачности.

Xenius ★★★★★
()

Уже вроде как давно все поняли, что Wayland это полностью провальное решение, просто некоторым не хватает яиц признать что профукали кучу ресурсов.

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

нет сетевой прозрачности

Интересно, а любители сетевой прозрачности когда и с какими приложениями последний раз этой самой прозрачностью пользовались?

Я, вот, пользовался. На 4G-канале в 25 Мбит/с. Приложение – Firefox (текст и мелкие картинки). И имею сказать, что использовать это совершенно невозможно. Даже весь насквозь растровый VNC быстрее и отзывчивее минимум на порядок. А виндовый RDP вообще за пределами всякого сравнения.

Плюс еще идиотская, вывернутая на изнанку, сервер-клиентская модель родом из восьмидесятых.

Так что отказ от по факту неюзабельной прозрачности совершенно оправдан. Она существует только номинально, но при этом создает массу проблем в современных реалиях.

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

Требует установки на сервере и клиенте, и совместимых библиотек, из за чего у меня не получилось это протестировать, и оно просто вылетало с segfault, потому что один компьютер Slackware, а другой openSUSE. Видимо там адовые костыли какие то, вместо передачи видеопотока.

MOPKOBKA ★★★★★
() автор топика
Последнее исправление: MOPKOBKA (всего исправлений: 1)
Ответ на: комментарий от MOPKOBKA

Ещё и на раст переписали, по всем современным тенденциям. Свежий ффмпег нужен, кроме него может сжимать lz4 и zstd. Ты пытался подключить сишную к растовой версии?

Merionet
()

жесть, однако.

Ж - Wayland.

щаз нобигут фанатики и скажут, что многооконные интерфейсы - это пережитки капитализма никому не нужно, что нормальные пацаны всё делают в одном окне. и вообще, у них всё работает.

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

Iron_Bug ★★★★★
()
Последнее исправление: Iron_Bug (всего исправлений: 1)
Ответ на: комментарий от snizovtsev

Так там же окном нельзя управлять все равно, и это просто протокол в разработке, который не поддерживается в популярных Wayland-WM.

Так что нужно дождаться сначала его доработки, а там уже можно будет посмотреть, возможно ли его будет использовать. Пока Proxy неплохой вариант, Proxy это вообще скрепа Wayland: Red Hat угощает Wayland-ом разработчиков Firefox

MOPKOBKA ★★★★★
() автор топика
Последнее исправление: MOPKOBKA (всего исправлений: 1)
Ответ на: комментарий от Merionet

Ты пытался подключить сишную к растовой версии?

Возможно, не знаю какие версии были.

MOPKOBKA ★★★★★
() автор топика

Как бы тебе сказать, братан.

Я лучше покажу.

https://ibb.co/hR0gQ53D

На скриншоте одна программа создала окно, которое естественно в итоге X window, вторая программа в это окно пишет.

Как?

Да через Xembed, работа с которым удобно реализована в GTK.

Как работает? Да очень просто.

В окне КУДА ты пишешь, создается любой контейнерный виджет. Кстати окно само по себе уже виджет, только в него ты можешь вывести не более одного чего-нибудь.

В этом же окне создается «socket», который получает цифровой ID.

Этот сокет добавляется для отображения в ранее созданный контейнерный виджет.

В программе, которая ПИШЕТ, создается «plug» с идентификатором полученным в первой программе.

Программа №1.

Создали окно
Создали бокс
Создали розетку
Добавили розетку в бокс, а бокс в окно
Получили id розетки

Программа №2.

Создали штепсель с id, полученным в первой программа
Этот штепсель - тень окна Программы №1

И да, на случай глупого вопроса «а как программа №2 узнает номер сокета» - сокет можно разнумеровывать произвольно, переменная там unsigned long.

Т.е. для этой тривиальной задачи в которую Иксы умеют by design, вам нужно создавать новый графический сервер, какие-то композиторы и прочее мастурбатство? Штош, это дает понимание почему Линукс настолько кривожоп.

windows10 ★★★★★
()
Последнее исправление: windows10 (всего исправлений: 1)
Ответ на: комментарий от slyjoeh

Уже вроде как давно все поняли, что Wayland это полностью провальное решение, просто некоторым не хватает яиц признать что профукали кучу ресурсов.

Не просто давно, а очень давно. Я тут щас посмотрел - 2008 год. 17 лет разработке, а оно до сих пор спорно, потому что глючит здесь, не умеет там, вылетает за углом, и прочая.

На секундочку, это промежуток между Windows 98 и Windows 10.

Это промежуток между кубическим досовским Daggerfall и трехмерным реалистичным Skyrim.

Да люди взрослеют быстрее, а это никак из пубертата выбраться не может =)

windows10 ★★★★★
()

теперь покажу

Скока лет функции? Двадцать? Фу старьё! А вайланд пилят столько же и он готов для десктопа.

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

Уже вроде как давно все поняли, что Wayland это полностью провальное решение

Кто все?

bdrbt
()

Иногда одни окна нужно встраивать в другие.

Нет не надо.

Виджеты для панели в Xfce4 и некоторых других DE

Это наследие иксов

Встраивание окна с игрой в редактор Godot

Сильно специфичная задача. И очень спорная.

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

Мне кажется дело в том, что кто-то наверху решил, что нормальный десктоп на Linux нахер не нужен, а GUI сервер нужен только для Embedded устройств. А X11 и правда сложно и дорого подерживать, так что давайте выкинем к чертям его, чтобы для умных холодильников картинку показывать и Wayland хватит. А что разработчикам DE придется страдать и стороннее ПО сильно сократится – кого волнует?

Vsevolod-linuxoid ★★★★★
()
Последнее исправление: Vsevolod-linuxoid (всего исправлений: 1)

Как нормальные люди делают новые стандарты: глубоко изучают существующие решения и составляют список must have фич (если что-то есть на 2-3 разных ОС и используется кучей ПО - это must have фича), которые надо на старте заложить в новый стандарт. Возможность позиционирования окон, возможность снимать скриншоты, возможность встраивания окон одних приложений в другие, декорации, трей - это базовые фичи - просто потому что они везде есть и всеми используются (но если очень хочется, на штуки типа захвата экрана можно повесить запрос разрешения у композитора, чтобы композиторы обеспокоенные безопасностью могли показать запрос пользователю, а необеспокоенные сразу разрешить).

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

KivApple ★★★★★
()
Последнее исправление: KivApple (всего исправлений: 5)

Многооконные интерфейсы — пережиток прошлого. Постоянно двигать руками окошки это треш. Я спецом свалили на тайловые WM, чтобы избавиться от этой необходимости.

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

Вейланду 15 лет, а контекстные меню только пару лет назад начали открываться рядом с указателем, а не в углу экрана. Это провал. Вот что бывает, когда начинаешь пилить сложную вещь без предварительной архитектурной проработки.

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

Многооконные интерфейсы — пережиток прошлого.

Так тут как раз пытаются сделать одно-оконный, а Wayland не дает.

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

Виджеты для панели в Xfce4 и некоторых других DE

Это наследие иксов

Глупые деды не хотели что бы падение пагина за собой тащило панель, или что бы один процесс в плагине тормозил за собой все, но Wayland то им покажет как надо.

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

Глупые деды не хотели что бы падение пагина за собой тащило панель, или что бы один процесс в плагине тормозил за собой все, но Wayland то им покажет как надо

Иногда проще перезапустить панель, чем заморачиваться с решением если его нет изначально.

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

На секундочку, это промежуток между Windows 98 и Windows 10.

Никогда не задумывался об этом. Мощно. Особенно если учесть что как раз в такой промежуток Windows внедрил все что только можно в свой графический стек, а приложения даже не заметили и продолжили запускаться получая преимущества от новых технологий.

MOPKOBKA ★★★★★
() автор топика
Последнее исправление: MOPKOBKA (всего исправлений: 1)
Ответ на: комментарий от ox55ff

Нужно еще события передавать. Но если что то изменяется в редакторе, а окно не в фокусе, то не должны передаваться. Умные люди подумали и предоставили возможность, что бы рядовой программист мог вызывать простые функции как в Win32 или X11.

MOPKOBKA ★★★★★
() автор топика
Последнее исправление: MOPKOBKA (всего исправлений: 2)
Ответ на: комментарий от ox55ff

Проблемы?

Да. В вяленом нельзя достать текстуру из чужого процесса. Плюс эфективность этого механизма будет черезжопной. Для решения этого черезжопия ВНЕЗАПНО придумывался вяленный, но там покрыт только сценарий "из окна в композитор", а сценарий "из окна в окно" не покрыт.

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

Да. В вяленом нельзя достать текстуру из чужого процесса.

Можно в общий файл писать, так что это не проблема. Можно в обход графической системы пытаться выполнить ее работу. Именно этим и занимается сейчас упомянутый мной программист. Пока получается не очень хорошо, но скоро основные моменты он исправит!

MOPKOBKA ★★★★★
() автор топика
Последнее исправление: MOPKOBKA (всего исправлений: 1)
Ответ на: комментарий от MOPKOBKA

Можно в общий файл

Это уже не текстура в видео драйвере.

LamerOk ★★★★★
()
Ответ на: комментарий от Vsevolod-linuxoid

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

Iron_Bug ★★★★★
()

нужно заново реализовать Wayland-сервер, но уже в приложении

Без системд нещитово

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

Никогда не задумывался об этом. Мощно. Особенно если учесть что как раз в такой промежуток Windows внедрил все что только можно в свой графический стек, а приложения даже не заметили и продолжили запускаться получая преимущества от новых технологий.

Да, это верно.

Когда-то в 2001 кажется году, мы изучали Borland Pascal 7.0. Его фишка была в том, что компилятор мог конпелять не только под ДОС, а и под Винду. Под виндой юзался т.н. GDI.

ИЧСХ, программа написанная на пацкале для Windows 3.11, запускается без изменений на Windows 10. Ну если конечно не используются какие-то грязные характерные для виндов старых лет трюки.

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

DUH~ DERP ,STABLE API IS NONSENSE!!!!!11111 МОРАЛЬНОЕ УСТАРЕВАНИЕ!!!!! СКОРЕЕ-СКОРЕЕ А ТО ПРОТУХНЕТ!!!! СРОЧНО ПЕРЕПИСАТЬ!!!! ПЕРЕПИСАТЬ С НУЛЯ!!! ЕЩЁ НЕ ВЫШЛО @ УЖЕ УСТАРЕЛО!!!! ГОВНО МАМОНТА!!! ГЛОБАЛЬНО И НАДЁЖНО!!!

thunar ★★★★★
()
Последнее исправление: thunar (всего исправлений: 1)
Ответ на: комментарий от thunar

Нет, ну в переписывании как таковом нет ничего плохого.

Рано или поздно от концепции иксов надо было избавляться, все это понимали и никто не был очень уж против.

От этих дебилов требовалось немногое: наваять транслятор между прикладным софтом и графическим драйвером ядра, желательно в процедурной парадигме - init(1920,1080);drawpixel(960,540,rgba) и тд. Ну и настройки драйвера обернуть в юзабельное API.

Но спустя 17 лет мы получили иксы. С глюками.

И сдается мне, что вяленд настолько оверинжинирнут и запутан специально чтобы повысить порог входа в разработку десктопа и замкнуть ее на себя. Других причин писать так - я не вижу.

windows10 ★★★★★
()

первые версии ноды джиэс, от которых хипстеры кончали до потолка… как раз написания стольких строчек и требовали. 3000 строк - это очень много.

rtxtxtrx ★★★
()

а godot - это движок, где из кучи трешовых игр взлетела лишь жесткая индюшатина dome keeper. зачем он тебе? что ты на нем делаешь все эти годы и почему не показываешь?

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

И имею сказать, что использовать это совершенно невозможно. Даже весь насквозь растровый VNC быстрее и отзывчивее минимум на порядок. А виндовый RDP вообще за пределами всякого сравнения.

Ну во-первых, сетевая прозрачность иксов была придумана для приложений вроде XCalc, Xeyes и так далее, посмотрите как они выглядят и как Firefox. Он использует свои виджеты, а не примитивы иксов и фактически канал клиент-сервер перегружен передачей всяких пиксмапов.

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

Например чтобы сервер хранил виджеты, а клиент только писал где какую кнопку и картинку расположить.

Уже сколько лет разрабатывают Wayland и он всё равно хуже иксов.

Xenius ★★★★★
()
Последнее исправление: Xenius (всего исправлений: 1)

Да. То что делал сервер теперь каждый должен делать сам. Технология!

Я вчера под вейляндом Musescore запускал. Застака сбоку, тут мигает, там чихает, нажал на значок арпеджио в партитуре -, вылетел. Перезапустил, то же самое. Видимо тоже недореализовали то, что раньше иксы делали

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

Ну во-первых, сетевая прозрачность иксов была придумана для приложений вроде XCalc, Xeyes и так далее

Не стоит забывать линукс-эксклюзив - glxgears. SGI опубликовала OpenGL вместе с GLX, расширением которое позволяет серализовывать команды OpenGL и передавать их по сети.

MOPKOBKA ★★★★★
() автор топика
Последнее исправление: MOPKOBKA (всего исправлений: 2)

...о совершенстве Wayland

Просто мухахец какой-то. 😁😁😁

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

Требует установки на сервере и клиенте, и совместимых библиотек

Ахаха. Зумеры пытаются изобрести rdp.

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

В Linux тоже есть стабильное API, это основное UNIX API, и X11, в качестве тулкита предложу Motif. Приложения написанные еще в прошлом веке запустятся и сейчас. Xterm - 1984 год.

Даже в Fedora после удаления Xorg можно будет через XWayland запустить любое X11/Motif приложение.

MOPKOBKA ★★★★★
() автор топика
Последнее исправление: MOPKOBKA (всего исправлений: 13)
Ответ на: комментарий от MOPKOBKA

Глупые деды

Деды были неглупые, просто у них был ровно один тулкит - motif. Интегрировать зоопарк разношёрстных виджетов с разным жизненным циклом и поведением, которые даже между своими версиями не особо совместимы и тащить это всё на уровень композитора - маразм.

bdrbt
()

А теперь покажу как встраиваются окна в MS Windows Win32:

Лучше бы X.org в пример привел, мы не на винфак же

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

Уже вроде как давно все поняли, что Wayland это полностью провальное решение, просто некоторым не хватает яиц признать что профукали кучу ресурсов.

Оно не провальное, а сильно отличается от того что есть сейчас и софт надо не портировать, а полностью переписывать (gui часть) с учетом wayland-way, а этим никто не хочет заниматься, а новый софт только под wayland никто пилить не хочет т.к. больщинство на Xorg сидят. Что делать? А не знаю, тут кризис-менеджмент нужен.

Kolins ★★★★★
()
Последнее исправление: Kolins (всего исправлений: 1)
Ответ на: комментарий от ox55ff

Отдельное окно, потому что это физически другой процесс (скомпилированная игра отдельна от редактора игр). Плюс вопрос же не только в отображении, но и в передаче событий и т. п.

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

Плюс это уже сложившийся стандарт де факто, что нормальные десктопные оконные менеджеры предоставляют такую фичу «сделать одно окно любого процесса дочерним другого окна другого процесса» - это есть и на Windows, и было на Linux (в иксах), и есть в Mac OS. Это используется кучей софта (выше уже приводили в пример виджеты на панели, также можно вспомнить оболочки над MPlayer). Это технически не должно быть сложно реализовать композитору/оконному менеджеру (просто позиции некоторых окон привязывать к другим окнам). Это само по себе уже достаточные условия для реализации фичи в новом оконном сервере претендующим на универсальность и повсеместное внедрение. Это важная фича просто потому что она везде есть и всеми используется.

KivApple ★★★★★
()
Последнее исправление: KivApple (всего исправлений: 1)
Ответ на: комментарий от Kolins

wayland-way

Не нужно. Есть устоявшиеся практики, которые Wayland должен поддерживать. Веских причин не реализовывать произвольное позиционирование окон приложениями и возможности привязывать окно одного процесса к окну другого процесса - нет.

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

Веских причин не реализовывать произвольное позиционирование окон приложениями и возможности привязывать окно одного процесса к окну другого процесса - нет.

Это уже у разработчиков или архитекторов вяленого надо спрашивать, тут либо «у них есть план и они его придерживаются, но массам не разглашают» либо «не осилили и забили»

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

с учетом wayland-way,

Как выше писали, легче под wine написать.

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

программа написанная на пацкале для Windows 3.11, запускается без изменений на Windows 10.

16-битные программы запускаются в 64-битных ОС?

question4 ★★★★★
()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)