banner

Новости

Sep 11, 2023

Wine и Wayland делают еще один шаг вперед благодаря объединению большего количества кода

Продолжающаяся постепенно работа над тем, чтобы Wine и Wayland полностью работали вместе в Linux, сделала еще один шаг: был принят третий большой запрос на слияние. Wine 8.4, вышедший в середине марта, стал первым разрабатываемым релизом, в котором действительно содержались некоторые из первоначальных наработок Wayland.

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

В этом MR представлены механизмы драйверов для обработки динамических событий от компоновщика Wayland с использованием событий wl_output в качестве основного варианта использования (т. е. мы хотим обновить настройки отображения win32u при изменении настроек хоста).

В этом проекте мы создаем специальный поток для чтения и отправки событий Wayland, полученных от композитора. Если обработчик событий Wayland хочет, чтобы какой-то код запускался в контексте определенного потока HWND, он может добавить внутреннее событие в пользовательскую очередь, которая у нас есть для каждого потока (с включенным графическим интерфейсом). Обратный вызов драйвера ProcessEvents обрабатывает внутренние события из этой очереди. Чтобы разбудить ожидающие потоки, мы используем канал для уведомления о новых внутренних событиях, причем конец чтения действует как fd очереди хоста потока. Это похоже на то, как работает Winemac.drv.

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

Зачем это вообще нужно? В настоящее время Wine использует X11, и поэтому для всех, кто использует Wayland, он будет запускаться через XWayland, который по сути представляет собой X, работающий под Wayland, как уровень совместимости. Как заявила Collabora в своем первоначальном объявлении еще в 2020 году, говоря об этом, они сказали, что это «источник сложности и возможной неэффективности», и поэтому было бы «идеально, если бы Wine мог напрямую общаться с Wayland, чтобы обеспечить более компактный и эффективный стек в современных системах». "

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

Лиам Доу Об авторе - Лиам Доу
ДЕЛИТЬСЯ