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

Я не то чтобы прям защищаю сетевую прозрачность, но ей нужна не bandwidth, а latency

Я регулярно запускаю какие-нибудь софтины из ssh консоли, обычно смотрелку пдф (evince) или что-то такое не сильно тяжелое. Оно всё ещё нормально работает в 2025м году, но у меня машины довольно близко - пинги где-то 10мс

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

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

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

Ну сам vm8086 остался в 32 битном режиме, а повторить его возможно с полноценной виртуализацией.

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

Тут еще проблема в том, что vm8086 поддерживает и Intel и AMD, а VT-x только Intel.

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

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

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

Детали реализации предполагаемого ntvdm? Да.

Только в ранних процах были существенные различия между SVM и VTx.

С vm8086 все проще было, и VTx многие отключают в BIOS.

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

Детали реализации предполагаемого ntvdm? Да.

Именно! Просто не портанули его на VTx. А так бы он продолжал использовать всё тот же v86, только чуть больше «сетапа» бы потребовалось.

С vm8086 все проще было,

Ну, типа, да. По-проще. Хотя, и то сказать… Вот в досему я видел функцию kvm_vm86(). Да, она не маленькая, но, я полагаю, её вполне можно оттуда выдрать, и просто использовать как библиотеку. И будет ни чем не сложнее, чем раньше.

и VTx многие отключают в BIOS.

Да зачем бы…

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

А так бы он продолжал использовать всё тот же v86

Почему ты считаешь что VTx == vm8086? Почему не VM/CMS, он же раньше появился?

Ну, типа, да. По-проще. Хотя, и то сказать Вот в досему я видел функцию kvm_vm86().

Не нашел этой функции, DOSemu умеет в реальный vm8086, может ты его видел?

и VTx многие отключают в BIOS.

Да зачем бы…

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

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

Почему ты считаешь что VTx == vm8086?

Что за ерунда, я где-то говорил про ==? Я говорил, что v86 там доступен, даже если сама хостовая ОСь и работает в 64битном режиме.

Почему не VM/CMS, он же раньше появился?

Не распарсил, повтори вопрос.

Не нашел этой функции, DOSemu умеет в реальный vm8086, может ты его видел?

Ты к словам будешь придираться, или всё таки смысл важнее? :) Ну перепутал, в dosemu2 её видел, а не в DOSemu… Велика ли разница? Одной циферкой ошибся. :)

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

Не заработает, поди, WSL?

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

Что за ерунда, я где-то говорил про ==? Я говорил, что v86 там доступен, даже если сама хостовая ОСь и работает в 64битном режиме.

Непонятно ты написал, ну так то можно запустить и в 64 битах, я об этом тоже выше писал, но я предлагал сразу vm8086 запускать через перевод одного ядра в 32 битный режим. Казалось что ты приравниваешь vm86 и VTx.

Ты к словам будешь придираться, или всё таки смысл важнее? :)

Так я не знал что есть еще какой то dosemu2, я скачал dosemu, grep не нашел, зато нашел vm86.

Не заработает, поди, WSL?

Не заработает, он же на hyper-v.

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

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

В смысле? Вот как раз v86 в 64битах только под VTx и доступен. И больше никак! (ну, без софтовой эмуляции ежели) Просто это не столь важно, ведь, в принципе, он доступен и юзабелен. А уж через какие механизмы - дело 10е.

Так я не знал что есть еще какой то dosemu2, я скачал dosemu, grep не нашел, зато нашел vm86.

vm86 можно было и по-проще найти: man vm86.

Не заработает, он же на hyper-v.

Мож хоть WSL1 заработает?

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

В смысле? Вот как раз v86 в 64битах только под VTx и доступен.

Можно держать избранное ядро в 32 битах, и через него использовать vm8086.

vm86 можно было и по-проще найти

Я про то что kvm_vm86 там не нашел.

Мож хоть WSL1 заработает?

Да, оно работает без виртуализации, так же как работала UNIX подсистема в старых NT.

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

Можно держать избранное ядро в 32 битах

Которое, в свою очередь, запускать под кему? Ну, такое себе решение.

Я про то что kvm_vm86 там не нашел.

Ты ещё написал «зато нашел vm86», ну да не важно. Теперь-то нашёл kvm_vm86()? Я только об этом! Типа, вот же, есть лекарство. А ntvdm - ну, его просто не портанули и забили.

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

Можно держать избранное ядро в 32 битах

Которое, в свою очередь, запускать под кему?

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

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

Нет, можно держать реальное ядро.

Да понятно, что не «виртуальное» - запускать-то как? Либо под кему, либо вообще с ребута?

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

Для этого нужна поддержка со стороны ОС, что бы не переводила его в 64 битный режим, и предоставляла возможность использовать vm8086. Кого запускать не понял, ядро запускает ОС, vm8086 тоже она должна запускать, по требованию.

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

Кого запускать не понял, ядро запускает ОС

Ничего не понял… Эту фразу чел написал, или нейронка? :)

И так, ещё раз. Вы предложили собрать 32битное ядро. Я спросил: как его запускать? Вы сказали, что его запускает ОС… Ответ не верный, попробуйте ещё раз. :)

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

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

А нельзя его сразу держать в real mode? Мне кажется за нативный 16бит режим любители прогревать провода заплатят больше

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

Можно держать избранное ядро в 32 битах, и через него использовать vm8086.

А, или ты про ядро процессора? Я думал, 32битное ядро собрать…

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

И так, ещё раз. Вы предложили собрать 32битное ядро.

Я говорил про cpu core а не linux kernel. Дальше надеюсь понятнее станет если перечитаешь мои комментарии.

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

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

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

Я говорил про cpu core а не linux kernel.

Ну вообще, было бы безумием оставлять ядро без использования, только ради того, чтобы оно ждало, пока юзер ни соизволит ДОСовсксую прогу запустить…

Помимо просёра целого ядра, понадобится ещё и не хилая обвязка, то есть, мини-ОСь, которая будет реализовывать обработку исключений и перенаправлять их в основную ОСь. Такая модель будет существенно тормозить, так как вам придётся закидывать исключения из 1го ядра в другое, в то время как они и без этого не быстро обрабатываются.

ЕМНИП вмварь пыталась так делать, пока ни ввели VTx. Хотя, конечно, она ядро не перманентно оттяпывала, а пыталась его возвращать линуксу, когда не нужно было ничего из легаси исполнять…

Зачем вы предлагаете то, от чего все бежали, как от чумы, и пересели на нормальный VTx?

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

ей нужна не bandwidth, а latency

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

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

Не так просто. RDP адаптивный, элементы интерфейса он передает векторными командами, соответствующими вызовам GDI API. Причем передает он их не «в лоб», а умно группирует для сокращения трафика и предотвращения множественных перерисовок одной области экрана. Небольшие глифы кеширует на клиенте. А вот если запустить видос или игру, то тогда уже жмет видеокодеком. Причем жмет только область отображения, а не весь экран. Это видно по артефактам сжатия (и их отсутствию).

ИМХО это просто шедевр в свой области, никто даже рядом не стоит. А если вспомнить, что он умеет еще передавать звук в обе стороны и пробрасывать устройства с клиента на сервер, то линуксы в полном пролете со своей «сетевой прозрачностью».

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

Я так понимаю большинство по прежнему работает в режиме запрос-ожидание ответа, след запрос и т.д. Наверное дело в этом, хотя в libxcb обещали асинхронность.

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

Википедия пишет, что gdi - legacy, теперь они юзают direct2d и ускоряют его с помощью 3d. Оно тоже может по сети летать и ускоряться?

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

Контент, визуализируемый с помощью Direct2D, также может быть отображен удаленно с помощью инфраструктуры протокола удаленного рабочего стола (RDP) в операционной системе Windows 7. Разработчики могут выбрать, будет ли визуализация обрабатываться графическим процессором на компьютере-дисплее или визуализироваться локально и передаваться в виде растровых изображений

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