Вопрос или проблема
Я создаю простое приложение с графическим интерфейсом “Hello World” с использованием .net и sdk, и когда я конвертирую его в snap и запускаю, я получаю эту ошибку. Сначала я добавил пакет x11, но я хочу, чтобы мое приложение использовало только сервер Wayland для отображения, так как я создаю это приложение для Ubuntu Core.
GDK Backend: wayland (HelloWorldGuiApp:91366):Gtk-WARNING **: 22:44:58.503: невозможно открыть дисплей: :0
Это мой snapcraft.yaml для моего .net apk.
{
name: helloworldguiapp
base: core22
version: ‘1.0’
summary: Простое приложение Hello World с графическим интерфейсом
description: | Это простое .NET Gtk# приложение Hello World, разработанное для работы в режиме киоска с использованием ubuntu-frame.
grade: stable
confinement: strict
architectures:
build-on: amd64
build-on: arm64
apps:
helloworldguiapp:
command: HelloWorldGuiApp
daemon: simple
restart-condition: always
plugs:
- wayland
- opengl
- network
- content[graphics-core22] # Добавил отсутствующий плагин graphics-core22
environment:
WAYLAND_DISPLAY: wayland-0
parts:
helloworldguiapp:
plugin: dotnet
dotnet-build-configuration: Release
dotnet-self-contained-runtime-identifier: linux-x64
source: .
build-packages:
- dotnet-sdk-8.0
stage-packages:
- libgtk-3-0
- libglib2.0-0
- libwayland-client
}
Какие изменения мне нужно внести в мой файл yaml?
Я пытался запустить .net snap на Ubuntu Core и ожидал, что он откроет графический интерфейс “Hello World” на Ubuntu Core, но это привело к этому предупреждению=>
GDK Backend: wayland (HelloWorldGuiApp:91366):Gtk-WARNING **: 22:44:58.503: невозможно открыть дисплей: :0
Ответ или решение
Ошибка, с которой вы столкнулись, связана с попыткой вашего приложения открывать графический дисплей в среде Wayland в Ubuntu Core. Сообщение о предупреждении Gtk-WARNING **: cannot open display: :0
указывает на то, что ваше приложение не может подключиться к дисплею, так как на самом деле вы используете Wayland, а не X11, как это указано в вашем конфигурационном файле Snap. Давайте подробно рассмотрим, как вы можете решить эту проблему и исправить ваш файл snapcraft.yaml
.
Причина проблемы
При использовании Wayland, ваша программа не может открыть дисплей по умолчанию :0
, поскольку он в основном относится к X11. Вместо этого, для Wayland используется специальный переменная окружения WAYLAND_DISPLAY
, которая, как правило, имеет значение wayland-0
.
Рекомендуемые изменения в файле snapcraft.yaml
Чтобы обеспечить правильную работу вашего приложения в среде Wayland, внесите следующие изменения в ваш файл snapcraft.yaml
:
-
Убедитесь, что плоги указаны правильно. Плагин Wayland, который позволяет вашему приложению получить доступ к графическим ресурсам, должен быть прописан в секции
plugs
. -
Добавьте зависимость к пакету
libwayland-server
. Это может быть необходимо для работы вашего приложения с Wayland.
Вот пример обновленного snapcraft.yaml
:
name: helloworldguiapp
base: core22
version: '1.0'
summary: A simple Hello World GUI app
description: |
This is a simple .NET Gtk# Hello World GUI application designed to run in kiosk mode using ubuntu-frame.
grade: stable
confinement: strict
architectures:
- amd64
- arm64
apps:
helloworldguiapp:
command: HelloWorldGuiApp
daemon: simple
restart-condition: always
plugs:
- wayland
- opengl
- network
- content[graphics-core22]
environment:
WAYLAND_DISPLAY: wayland-0
parts:
helloworldguiapp:
plugin: dotnet
dotnet-build-configuration: Release
dotnet-self-contained-runtime-identifier: linux-x64
source: .
build-packages:
- dotnet-sdk-8.0
stage-packages:
- libgtk-3-0
- libglib2.0-0
- libwayland-client
- libwayland-server # Добавьте эту строку
Дополнительные рекомендации
-
Запуск приложения в правильной сессии Wayland: Убедитесь, что вы запускаете ваше приложение в сессии Wayland и что ваше приложение имеет соответствующие разрешения. Вы можете проверить, доступен ли браузер к дисплею, выполнив
echo $WAYLAND_DISPLAY
в терминале перед запуском приложения. -
Используйте отладочные сообщения: Поскольку ваше приложение может не открываться по другим причинам, полезно включить дополнительную отладочную информацию. Попробуйте использовать
G_MESSAGES_DEBUG=all
перед запуском вашего приложения, чтобы увидеть все сообщения от GDK/GTK. -
Проверьте зависимости: Убедитесь, что на целевой системе присутствуют все необходимые зависимости для работы вашего приложения под Wayland.
Выполнение этих шагов должно помочь вам устранить ошибку и успешно запустить ваше приложение на Wayland в Ubuntu Core. Если проблемы продолжаются, полезно будет обратиться к документации Gtk и разрабатывать с учетом особенностей вашей среды.