我正在学习 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'>
如果您从使用 XWayland 的程序启动应用程序,则可能会发生这种情况。例如,如果您使用的 IDE 或终端使用 XWayland 并运行您的应用程序,如果您没有设置环境变量,它将使用 X11 后端。
一个例子是从 VSCode 启动,如果您尚未将其配置为在 Wayland 上运行。
因此,请确保您从真正的 Wayland 应用程序启动该应用程序,并且它应该无需环境变量即可工作。