изолировать приложение в X11 в сессии Wayland

Вопрос или проблема

У меня возникли проблемы с конкретным приложением 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, можно поступить следующим образом:

  1. Убедитесь, что XWayland установлен в вашей системе. XWayland обычно идет в комплекте с большинством современных дистрибутивов Linux, поддерживающих Wayland. Используйте свой пакетный менеджер для проверки и установки:

    sudo apt install xwayland  # Для deb-подобных дистрибутивов
    sudo dnf install xorg-x11-server-Xwayland  # Для Fedora и Red Hat
  2. Создайте запуск скрипта для SALOME через XWayland. В файле .bashrc добавьте следующий alias, который будет создавать необходимую изоляцию сред для работы SALOME:

    alias salome='env GDK_BACKEND=x11 $Path_to_salome/salome'

    Здесь переменная окружения GDK_BACKEND=x11 помогает насильно установить использование X11 бэкэнда для некоторых GTK приложений.

  3. Перезапустите shell или выполните команду source ~/.bashrc, чтобы обновить изменения.

  4. Попробуйте запустить SALOME, используя ваш новый alias salome. Это должно принудительно вызывать X11-контекст через эмуляцию XWayland, минимизируя шансы на появление ошибок.

  5. При необходимости можно дополнительно уточнить настройки XWayland в конфигурациях вашей среды рабочего стола.

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

Оцените материал
Добавить комментарий

Капча загружается...