Про OutWiker и Wayland

Про OutWiker и Wayland

Начал потихоньку заниматься следующей версией OutWiker. В первую очередь взялся за проблему запуска приложения под Linux с графическим окружением на основе Wayland. В этом посте расскажу, как идет работа в этом направлении. Сразу предупрежу, что будет много технических терминов, связанных исключительно с Линуксом.

Для не линуксоидов, которые зачем-то читают этот пост, надо дать некоторые пояснения, не вдаваясь в глубокие технические детали. Дело в том, что в операционных системах на основе Unix / Linux есть два протокола, которые используются для отображения графики. Первый — это X11, который начинал разрабатываться еще в 1980-х годах, и который до сих пор живее всех живых. Однако в 2008 году появилась его альтернатива — Wayland, который по задумке со временем должен вытеснить X11. Проблема в том, что множество программ, которые создавались с расчетом на X11, не всегда гладко переносятся на Wayland, и даже современные версии многих приложений не очень хорошо работают — если вообще запускаются — под Wayland.

Я до сих пор в Линуксах использовал графические оболочки, которые работают на основе X11. С ними никаких проблем с OutWiker не возникало. Однако после релиза OutWiker 4.0 мне написали, что в графических средах, которые работают поверх Wayland, OutWiker не запускается.

Проблема выглядит так: при запуске приложения из исходников все работает нормально, а после упаковки приложения внутрь flatpak-пакета OutWiker падает с ошибкой:

Unable to access the X Display, is $DISPLAY set properly?

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

Я недавно писал, что начал использовать тайловые оконные менеджеры и остановился на i3, тоже работающий через X11, поэтому для тестирования OutWiker решил настроить себе еще один тайловый менеджер, который должен работать под Wayland. Выбор пал на Hyprland.

Сначала я долго пытался понять причину проблемы, из-за которой я долго не мог перейти на оконные менеджеры на основе Wayland. Почему-то все, что работает на основе Wayland, у меня висло с вероятностью 50% при запуске. Причем если не зависло на старте, то дальше все работает стабильно. Потом заметил закономерность — сразу после перезагрузки Hyprland запускается без проблем, но после того как я разлогиниваюсь при повторной авторизации он виснет. Причем это касалось не только Hyprland, то и других оконных менеджеров, которые работают поверх Wayland. Я в этом винил видеокарту от NVidia и драйвера к ней, потому что по всем симптомам действительно висла именно видеокарта.

После совещания с несколькими ИИ оказалось, что виноват менеджер входа LightDM (я до сих пор его считаю самым удобным менеджером входа вреди всех, что я пробовал). После переключения на sddm или gdm, которые полноценно поддерживают Wayland, зависания прекратились.

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

Возвращаемся к OutWiker. В текущей выложенной версии для создания интерфейса используется библиотека wxPython 4.2.2. После различных экспериментов оказалось, что единственным рабочим способом запустить приложение под Wayland внутри flatpak-пакета — это принудительно заставить его работать через X11, запретив доступ пакета к протоколу Wayland. А это значит, что в системах на основе Wayland, приложение будет работать через прослойку XWayland. В принципе, это не то чтобы очень страшно, но работает медленнее, чем работа непосредственно через Wayland. Насколько такое замедление будет заметно пользователю, это отдельный вопрос. При этом в ветку бета-версий flatpak-пакета я уже отправил соответствующее исправление, поэтому если кто-то сейчас попытается установить flatpak из канала beta, как написано на этой странице, то все должно работать и под Wayland через прослойку XWayland.

В комментариях на https://linux.org.ru мне кинули ссылку на сообщение о том, что в wxPython 4.2.5 эту проблему исправили, поэтому я начал пробовать перейти на более новую версию wxPython. При запуске из исходников проблем с запуском OutWiker с использованием wxPython 4.2.5 не возникло, а вот с упаковкой новой версии wxPython внутрь flatpak пришлось повозиться еще несколько вечеров. В принципе, принципиальных проблем не было, но в каждой версии wxPython что-нибудь меняется при компиляции, и приходится угадывать, какого именно пакета недостает и как его надо устанавливать. При этом процесс компиляции достаточно долгий. Кажется, в версии 4.2.5 его ускорили, но все равно он занимает около получаса, а проблемы иногда возникают уже на последних стадиях сборки.

В итоге справился. Flatpak-пакет с использованием wxPython 4.2.5 собрался, и с ним никаких шаманств вокруг Wayland делать не надо — все работает, как положено. Но возникли некоторые оформительские проблемы при отрисовке дерева заметок и облака меток. Например, при наведении курсора мыши на элемент дерева этот элемент почему-то не перерисовывается, чтобы подсветить элемент под курсором. Подобная проблема наблюдается и с облаком меток. При выделении элементов все хорошо. Причем такой баг проявляется только под Wayland, если ту же сборку запустить под X11, то все отрисовывается как надо. С этой проблемой еще предстоит разобраться, это задача на ближайшее время.

Snap-пакет под Wayland тоже изначально не запускался. Обновил ядро snap-а, заодно обновилась версия Python внутри пакета (с 3.10 до 3.12), и там тоже перешел на wxPython 4.2.5. После этого проблема с запуском под Wayland тоже рассосалась. Обновление snap прошло даже более гладко, чем flatpak.

Что касается версии под Windows, то для сохранения поддержки Windows 7 пока используется старая версия wxPython 4.2.2.

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

На этом пока все. Вот чем я занимался последние две недели.

PS. Вы можете подписаться на новости сайта через RSS, Группу Вконтакте или Канал в Telegram.

Пожалуйста, оцените запись

УжасноПлохоТак себеХорошоОтлично (Количество голосов: 5, средняя оценка: 5,00)
Загрузка...

Leave a comment