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)
Ответ на: комментарий от LamerOk

К Xembed’у твой пример не имеет никакого отношения.

Мне как программеру который пишет под это все, виднее - раз.

«The communication between a GtkSocket and a GtkPlug follows the XEmbed Protocol.» (с) https://docs.gtk.org/gtk3/class.Socket.html - два.

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

Мне как программеру который пишет под это все, виднее - раз.

Ты жопы от пальца не отличаешь, "программер".

два

Ты ещё и читать не умеешь.

https://www.freedesktop.org/wiki/Specifications/xembed-spec/

embedding of a control from one application into another application

https://docs.gtk.org/gtk3/class.Socket.html

embedding a Qt widget in GTK or vice versa

GtkWidget *socket = gtk_socket_new ();
gtk_widget_show (socket);
gtk_container_add (GTK_CONTAINER (parent), socket);

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

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

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

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

В 32-ух битных запускаются и работают.

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

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

Да.

Нет. ntvdm не поддерживается на 64-ёх битах.

https://learn.microsoft.com/ru-ru/windows/compatibility/ntvdm-and-16-bit-app-support

NTVDM — это компонент по запросу и поддерживается только в версии x86 Windows. Она не поддерживается в версиях Windows x64 и ARM, которые не поддерживают 16-разрядный код x86 любого типа, включая программы DOS.

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

Ты утверждал что мой пример не имеет отношения к Xembed.

Я тебе скинул документацию к GTK, где написано что имеет. Остальное твои фантазии и домыслы.

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

В программе №1 создал окно, из программы №2 заполняю это окно кубиками, картинками, текстами по алгоритму этой программы. Получаю указатель на окно через gtk_widget_get_parent. Делаю короче в окне программы №1 что хочу из программы №2.

Зови это хоть магией, суть не поменяется.

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

Остальное твои фантазии и домыслы.

Остальное - это твоя безграмотность. Xembed - это про встраивание одного виджета в другой на уровне X-сервера.

Зови это хоть магией

Ну, вот это и есть примерно твой уровень квалификации. Ты через сокет работаешь с gtk, где сам X-овый механизм xembed не задействован.

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

Остальное - это твоя безграмотность. Xembed - это про встраивание одного виджета в другой на уровне X-сервера.

Ага, прикинь.

Ну, вот это и есть примерно твой уровень квалификации. Ты через сокет работаешь с gtk, где сам X-овый механизм xembed не задействован.

Во-первых, перечитай топик.

Во-вторых, я работаю с окном X, а ГТК просто предоставляет удобный инструмент для работы с таким окном.

В-третьих открывай gtksocket.c и не тупи. Сокет, если ты до сих пор не понял - это просто удобное название способа взаимодействия «розетка-вилка», и с классическим юниксовым сокетом не имеет ничего общего.

https://ibb.co/XvdBQ83 - на тот случай если тебе влом.

И правда

status = XGetWindowProperty (GDK_DISPLAY_XDISPLAY (display),
			       GDK_WINDOW_XID (window),
			       xembed_info_atom,
			       0, 2, False,
			       xembed_info_atom, &type, &format,
			       &nitems, &bytes_after, &data);

Не задействован)))

- - -

Да я не обвиняю тебя в ламеризме, бро. Тебе простительно.

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

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

В-третьих открывай gtksocket.c и не тупи.

Такая валюта принимается в нашем банке.

XGetWindowProperty, xembed_info_atom

Ты не то выделил. Xembed - это список сообщений.

Да, я был не прав, у тебя встраивание есть. Просто порядок создания объектов отличается от Embedding life cycle довольно существенно.

Без знания потрохов GtkSocket я прочёл код не верно.

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

В 32-ух битных запускаются и работают.

Речь шла про Windows 10, которая 32-битной не бывает. Последней 32-битной была 8, и она спросом не пользовалась, все ставили 64-битную.

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

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

Да. В мире Винды в этом как бы ничего удивительного нет.

Каким образом это позволяет процессор AMD64, в котором 16-битные команды недоступны в 64-битном режиме? И почему из 64-битных Windows убрали поддержку эмуляции MS-DOS, сохраняя её в 32-битных?

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

Речь шла про Windows 10, которая 32-битной не бывает.

Ты себя хорошо чувствуешь?

https://en.wikipedia.org/wiki/Windows_10

Windows 10 is the last version of Microsoft Windows that supports 32-bit processors (IA-32 and ARMv7-based) and the last major version to support 64-bit processors that don’t meet the x86-x64-v2 (i.e., having POPCNT and SSE4.2) or ARMv8.1 specifications, across all minor versions.

На всякий:

Latest release 22H2 (10.0.19045.5968) (June 16, 2025; 7 days ago)

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

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

А насколько сложно добавить расширения в официальный стандарт Wayland? И через какое время это появится в существующих реализациях? Примеры такого были?

question4 ★★★★★
()

Вяленный он не хороший и не плохой. Он такой какой нужен шапке, кто дев. танцует и т.п. А на что шапке то надо? Шапка это прослойка под сапы, ораклы и т.п. соответственно ей нужно рисовать простые диалоги, заявлять о мегасекурности и чтоб на вебинарах было всё красиво. Валенный эту потребность закрывает. Вот и всё. Ну а то что все, как идиоты, побежали за этим вяленным показатель, что опенсорц в крызысе и не могёт без карпов уже ничего делать. Так что чуваку с либрой успехов - по мне вяленный это тупик.

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

Деды были неглупые, просто у них был ровно один тулкит - motif.

Нет, было много тулкитов.

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

Это Wayland-мышление. Дело в том что WM уже этим занимается, когда предлагает окна на разных тулкитах.

В хорошо проработанной концепции, твои обычные окна, это лишь дочерние окна главного экранного окна. Таким образом SetParent дается бесплатно если реализованны обычные окна. А вставка как в Godot это лишь присоединение окна игры не к экранному окну, а к окну с редактором.

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

Он не поддерживается Microsoft, но его можно установить самостоятельно и запускать все нужные приложения.

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

Есть реализация для 64 бит, вот она: https://github.com/leecher1337/ntvdmx64

Аппаратный vm8086 тоже можно было бы завести в x64 отдав под это ядро, но у Microsoft уже была софтверная поддержка 16 битных приложений для альтернативных архитектур (MIPS, Alpha).

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

Есть реализация для 64 бит, вот она

Нет, это не она:

It turned out that Insignia shipped SoftPC with a complete emulated C-CPU which also got used by Microsoft for MIPS, PPC and ALPHA-Builds.

Это порт MS эмулятора i386 с MIPS, PPC и ALPHA.

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

Что не она? Она. Открой статью NTVDM на википедии, и увидишь что NTVDM был для MIPS, Alpha. Оно и по ссылке на GitHub. NTVDM не обязательно обозначает vm8086.

То что я тебе приложил, это буквально NTVDM (именно так оно называется) который распространялся Microsoft для MIPS и Alpha.

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

Открой статью NTVDM на википедии, и увидишь что NTVDM был для MIPS, Alpha

Не крути напёрстки, речь шла о MS NTVDM на x86.

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

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

Непонятно зачем тебе нужен именно версия с intel32, если ты спрашиваешь про возможность запуска на intel64. Ну да, там еще никто не сделал реализацию с vm8086, но как я написал, это возможно.

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

Речь шла про запуск 16 битных программ.

Нет, речь не шла про запуск 16 битных программ. Речь шла о поддержке 16-ти битных программ в венде:

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

Да.

Нет. ntvdm не поддерживается на 64-ёх битах.

Твой вариант ничем не отличается от установки любой другой сторонней виртуалки / эмулятора в венду. При такой трактовке вопроса, сам вопрос теряет смысл. Очевидно, спрашивали не об этом.

И да, я вангую, что с https://github.com/otya128/winevdm будет больший шанс на успех.

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

Речь шла о поддержке 16-ти битных программ в венде

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

Хотя всякие старые DirectX и Net из коробки тоже не работают, при запуске старых приложений есть диалоговое окно с предложением установить дополнительные компоненты, так что я отличия большого не вижу. https://otvet.imgsmail.ru/download/297058216_c29057f49af62d192b97f49113195e56...

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

Windows 10 is the last version of Microsoft Windows that supports 32-bit processors (IA-32 and ARMv7-based)

Наш отдел продаж считает иначе. И не было повода проверять. Учту.

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

эээ... а как вы там будете эмулировать старую FAT16 и прочее? система - это же не просто выполнение команд процом, но и окружение, к которому DOS'овские программы обычно намертво привязаны.

а ещё DOSовские софтины часто писали в порты. я даже помню, какое негодование вызвал у меня тот факт, что начиная с не помню уже какого маздая в порт писать запретили. это казалось просто лишением прав человека :) ну и ещё они дёргали всякие там прерывания периферии и BIOS, например. это всё давно уже не поддерживается напрямую.

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

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

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

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

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

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

многооконные интерфейсы - это пережитки капитализма никому не нужно

А зачем тому же эмулятору терминала много окон?

Всему, что нужно обычному юзеру, достаточно одного окна. И всякие DE с их кучей окон в панели задач не нужны. И интерфейсы как в GIMP'е 20 лет назад тоже.

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

это уже не «поддержка», а виртуальная машина

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

Нативного запуска нету, но причем тут поддержка запуска приложений? Java приложения тоже нативно не запускаются. Или C#.

в общем, я не думаю, что запуск обычной DOSовской программы в современных 64-битных защищённых системах возможен

Ну кроме отсутствие аппаратного vm8086 без перевода ядра в режим 32 бит, 32 битная ОС в этом плане от 64 битной ОС ничем не отличается. Запускаются Microsoft C, Turbo C, Turbo Pascal, MASM, игрушки разные.

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

если там MASM запускается и работает - это точно уже полновесная виртуальная машина. иначе как он там будет выполнять инструкции какого-нибудь x286? это не «поддержка 16 бит», а виртуалка типа bochs. в виртуалке и под Linux можно что-то такое запустить наверняка, если упороться. есть даже относительно современный FreeDOS.

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

иначе как он там будет выполнять инструкции какого-нибудь x286?

На 32 битной будет vm8086, на 64 битной будет софтверный эмулятор.

это не «поддержка 16 бит», а виртуалка типа bochs

В чем разница? И не забывай что графические приложения Win16 тоже запускаются, и используют системные библиотеки, за счет чего получают HiDPI: https://github.com/otya128/winevdm/blob/master/screenshot.PNG?raw=true

Пользователь нажимает два раза по .exe, приложение запускается. В Linux тоже поддерживаются DOS/Windows приложения. Есть DOSemu (vm8086) и Wine.

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

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

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

Конечно поддерживают. Java тоже нативно не запускается, теперь получается Linux не поддерживает Java приложения? Или вот возьмем 32 битные приложения в 64 битном режиме, они же тоже не могут исполнится без перехода в режим совместимости, не эмуляция полная, но уже что то не то?

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

я просто задала вопрос касательно одного заявления в этой теме: Немного о совершенстве Wayland (комментарий)

это лукавство, мягко говоря. можно там заменить слово маздай на любую ось, в которой существуют виртуалки с эмуляцией.

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

Скорее всего имеется виду другое, в Windows можно кликнуть два раза по .exe/.com, а в Linux что бы запустить нативное приложение из 90х нужно помучиться. Между gcc12 и gcc14 всего ничего прошло, а уже трудности в сборке, много поменялось.

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

ну, у меня musl. причём он ещё и недавно обновился. кто знает, что там поломали и где. это проблема где-то между gcc и musl. можно раскопать, в чём там загвоздка, но пока нет времени. пока я знаю, что 12-й работает и компилит всё нормально. я им собирала большие пакеты. я тоже думала, что 14-й не слишком далеко ушёл от 12-го. но вот оказалось нифига не так.

хотя 12-й тоже компилился со свежим musl'ом, так что это проблема на стороне gcc.

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

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

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

hateyoufeel ★★★★★
()

Рекурсивный вяленый это что-то новенькое.

Даёшь вяленый в каждую приложуху!

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

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

Так и есть.

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

Тут ты не прав, 16-битнын экзешники не стартуют на 64 битной винде, они только на 32битаной могут работать. Но способ запустить есть.

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

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

Начал за здравие…

а контекстные меню только пару лет назад начали открываться рядом с указателем, а не в углу экрана

…а закончил за упокой. Где это у тебя контекстные меню в углу экрана открываются? Я уже 9 лет wayland использую каждый день, ни разу такого не видел.

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

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

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

эээ… а как вы там будете эмулировать старую FAT16 и прочее?

Для ДОСа не нужен fat16. ДОС умел с сетевыми дисками работать, версии этак с 4й, емнип.

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

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

Что значит, возможен, или невозможен? Даже в 32битных виндах ДОСовские проги работали не совсем нативно, а через ntvdm. Так и так обвязка понадобится. Вопрос лишь, насколько жирная.

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

Ну кроме отсутствие аппаратного vm8086 без перевода ядра в режим 32 бит,

v86 никуда не делся. Он просто перекочевал в VTx. Только самые ранние x86_64 процы не имели поддержки аппаратной виртуализации.

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

утверждать, что маздай «поддерживает DOS-приложения».

32битный - поддерживает. 64битный - вполне может (VTx), но уже просто забили, ведь эмуляторы есть.

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