Вопрос или проблема
У меня возникли проблемы с конкретным приложением https://www.salome-platform.org/, которое запускается с помощью python-скрипта. Я недавно перешел на сеанс Wayland при смене дистрибутива. Все работает правильно, за исключением этого приложения. Когда я запускаю скрипт, окно графического интерфейса открывается правильно, но когда я нажимаю на любое из меню, оно автоматически закрывается, выдавая следующую ошибку:
X Error of failed request: BadWindow (invalid Window parameter)
Major opcode of failed request: 3 (X_GetWindowAttributes)
Resource id in failed request: 0xe
Serial number of failed request: 10
Current serial number in output stream: 11
Как видно в этом посте, если мы сменим полный сеанс на X11, эта проблема решается.
Я искал возможность ‘изолировать’ программное обеспечение, чтобы оно работало так, как если бы это был сеанс X11, но внутри сеанса Wayland. В настоящее время я запускаю программное обеспечение, запуская исполняемый файл $Path_to_salome/salome
. Я хотел бы создать псевдоним в .bashrc, который бы запускал конкретную команду (если это вообще возможно) для создания ‘подсеанса/сервера’ или чего-то необходимого (прошу прощения, у меня нет правильных ключевых слов), поэтому псевдоним выглядел бы приблизительно так: alias salome="необходимые шаги && $Path_to_salome/salome"
Возможно ли это вообще, и как это можно реализовать?
Ответ или решение
Теория:
Системы оконных менеджеров X11 и Wayland представляют собой два различных подхода к управлению графическим интерфейсом пользователя в UNIX-подобных системах. X11 (также известная как X Window System) уже долгое время является стандартным протоколом для Unix-систем, обеспечивая гибкость и модульность. Однако он же несет в себе определенные уязвимости безопасности и производительности, что стало одной из причин для разработки Wayland. Wayland предлагает более современный подход, фокусируясь на эффективности и безопасности, обеспечивая более плавный рендеринг, улучшенное управление ресурсами и меньшее количество багов. Однако, несмотря на его преимущества, не все приложения полностью совместимы с Wayland, что зачастую требует дополнительных манипуляций для запуска приложений, разработанных исключительно для X11.
В примере, с которым вы столкнулись (столкновение работы SALOME на сессии Wayland), наблюдается типичная ситуация несовместимости. Ваша задача заключается в том, чтобы изолировать приложение SALOME в среде X11 внутри сессии Wayland. Это можно осуществить с помощью инструментов, обеспечивающих запуск X11-приложений на Wayland, используя, например, XWayland или другие подходы, позволяющие сэмулировать необходимую среду.
Пример:
Вы описали конкретную проблему: SALOME, приложение, которое запускается через Python-скрипт в оболочке X11, сталкивается с ошибками при попытке взаимодействия с пользовательским интерфейсом в среде Wayland. Ошибка, которую вы наблюдаете: "X Error of failed request: BadWindow (invalid Window parameter)" указывает на проблему с управлением окнами, характерную для конфликтов X11 и Wayland.
Одним из рабочих решений может стать использование XWayland. XWayland — это совместимость слоя, предоставляющая поддержку для X11-клиентов в среде Wayland. Он позволяет запускать приложения, разработанные для X11, в различных Wayland-выделенных композиторах, обеспечивая прозрачность и гибкость.
Применение:
Для того чтобы запустить SALOME как X11-приложение внутри Wayland, можно поступить следующим образом:
-
Убедитесь, что XWayland установлен в вашей системе. XWayland обычно идет в комплекте с большинством современных дистрибутивов Linux, поддерживающих Wayland. Используйте свой пакетный менеджер для проверки и установки:
sudo apt install xwayland # Для deb-подобных дистрибутивов sudo dnf install xorg-x11-server-Xwayland # Для Fedora и Red Hat
-
Создайте запуск скрипта для SALOME через XWayland. В файле .bashrc добавьте следующий alias, который будет создавать необходимую изоляцию сред для работы SALOME:
alias salome='env GDK_BACKEND=x11 $Path_to_salome/salome'
Здесь переменная окружения
GDK_BACKEND=x11
помогает насильно установить использование X11 бэкэнда для некоторых GTK приложений. -
Перезапустите shell или выполните команду
source ~/.bashrc
, чтобы обновить изменения. -
Попробуйте запустить SALOME, используя ваш новый alias
salome
. Это должно принудительно вызывать X11-контекст через эмуляцию XWayland, минимизируя шансы на появление ошибок. -
При необходимости можно дополнительно уточнить настройки XWayland в конфигурациях вашей среды рабочего стола.
Таким образом, вам удастся обеспечить совместимость и корректную работу SALOME, используя механизм интеграции XWayland, не выходя при этом из Wayland-сессии. Это решения подойдет для многих приложений, сталкивающихся с подобной проблематикой на современных дистрибутивах Linux.