gpt4 book ai didi

python - 从 Wayland 下的 xid 获取 GDK Window

转载 作者:行者123 更新时间:2023-12-01 02:40:36 31 4
gpt4 key购买 nike

简而言之:这是 How to get Gdk window from xid? 的重复,但在 Wayland 下。

在我将 Debian 从 Stretch 更新到 Buster 之前,类似以下的代码工作正常:

#!/usr/bin/env python3
from gi.repository import Gdk
from gi.repository import GdkX11

Gdk.Window.process_all_updates()
xlib_window = 0x2a00005 # for example. From wmctrl; xwininfo used in the previous question.
gdk_display = GdkX11.X11Display.get_default()
gdk_window = GdkX11.X11Window.foreign_new_for_display(gdk_display, xlib_window)
print gdk_window.get_geometry()

不幸的是,gdk_display现在是一个__gi__.GdkWaylandDisplay,因此GdkX11.X11Window.foreign_new_for_display抛出

TypeError: argument display: Expected GdkX11.X11Display, but got __gi__.GdkWaylandDisplay

那么我现在如何获取我的gdkWindow? (我根本无法在网上看到必要的文档,因此也将不胜感激。)

我很高兴还可以从 PID 或进程名称中获取 gdkWindow,因为这是我获取 XID 的地方。

最佳答案

作为一般性答案,从您的“例如。来自 wmctrl”评论来看,没有解决方案。

出于安全原因,Wayland 的设计不允许应用程序干扰或检查彼此的窗口。

像 wmctrl 这样的 X11 应用程序在名为 XWayland 的兼容层内运行,并且无权干预 native Wayland 应用程序。

您收到该错误是因为您尝试在作为 native Wayland 应用程序启动的应用程序内使用 GdkX11,并且它与您尝试使用 GdkX11 时遇到的错误没有本质上的不同在 Linux 上 native 运行的 C# 应用程序中调用 Win32 API。

使其发挥作用的唯一方法是查找如何强制任何相关应用程序回退到通过 XWayland 运行,或者编写您想要完成的任何内容作为 Wayland 合成器本身的补丁。

关于python - 从 Wayland 下的 xid 获取 GDK Window,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45762522/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com