在 Wayland 上,为什么我的默认 Gtk 显示是 X11Display?

问题描述 投票:0回答:1

我正在学习 GTK4 并在 Linux 上使用 wayland (hyprland)。

当我尝试检索默认显示时,我的 python 代码返回 X11Display。 我发现

GDK_BACKEND
环境变量未设置为
wayland

但是,我的问题是,为什么代码甚至能够返回 X11Monitor? 难道是因为它使用了XWayland?在 Wayland 上访问 X11Monitor 时是否存在潜在问题(开销等)?

另外,引用https://docs.gtk.org/gtk4/wayland.html#wayland_display

GDK Wayland 后端支持在 Wayland 合成器下运行 GTK 应用程序。要以这种方式运行您的应用程序,请通过设置 GDK_BACKEND=wayland 来选择 Wayland 后端。

在 UNIX 上,Wayland 后端默认启用,因此编译时无需执行任何特殊操作,一切都应该“正常工作”。

那么为什么我的系统默认情况下没有启用它? hyprland 应该设置这个变量吗?

import gi
gi.require_version("Gtk", "4.0")

from gi.repository import Gtk, Gdk

display = Gdk.Display.get_default()
assert display is not None

print(display.__class__)

monitors = display.get_monitors()

for monitor in monitors:
    print(monitor.__class__)

输出:

<class 'gi.repository.GdkX11.X11Display'>
<class 'gi.repository.GdkX11.X11Monitor'>
<class 'gi.repository.GdkX11.X11Monitor'>

设置时输出

GDK_BACKEND=wayland
:

<class '__gi__.GdkWaylandDisplay'>
<class '__gi__.GdkWaylandMonitor'>
<class '__gi__.GdkWaylandMonitor'>
python x11 wayland gtk4
1个回答
0
投票

如果您从使用 XWayland 的程序启动应用程序,则可能会发生这种情况。例如,如果您使用的 IDE 或终端使用 XWayland 并运行您的应用程序,如果您没有设置环境变量,它将使用 X11 后端。

一个例子是从 VSCode 启动,如果您尚未将其配置为在 Wayland 上运行。

因此,请确保您从真正的 Wayland 应用程序启动该应用程序,并且它应该无需环境变量即可工作。

© www.soinside.com 2019 - 2024. All rights reserved.