Linux 使用XGrabServer抓取X服务器

Linux 使用XGrabServer抓取X服务器,linux,embedded,Linux,Embedded,在嵌入式Linux系统中,我试图显示一个关机通知,该通知应在关机时覆盖任何其他窗口。现在创建窗口不是问题,但是可靠地显示窗口是问题。X服务器或WM不知何故太忙,无法每次都提取通知。考虑到我们有限的CPU能力,这并不奇怪 因此,我想通过使用gdk_x11_grab_server()(在默认显示中调用XGrabServer)抓取X服务器,可以简化WM/X。但是我应该什么时候打电话给抓取函数?如果我在构建窗口之前调用它,在显示窗口之前或在窗口的曝光事件中调用它,则屏幕上不会显示任何内容(即使在空载测试

在嵌入式Linux系统中,我试图显示一个关机通知,该通知应在关机时覆盖任何其他窗口。现在创建窗口不是问题,但是可靠地显示窗口是问题。X服务器或WM不知何故太忙,无法每次都提取通知。考虑到我们有限的CPU能力,这并不奇怪

因此,我想通过使用gdk_x11_grab_server()(在默认显示中调用XGrabServer)抓取X服务器,可以简化WM/X。但是我应该什么时候打电话给抓取函数?如果我在构建窗口之前调用它,在显示窗口之前或在窗口的曝光事件中调用它,则屏幕上不会显示任何内容(即使在空载测试中)

报告说:

XGrabServer功能禁用 处理请求和关闭 在除此之外的所有其他连接上 这一要求是在一个月后提出的

我想这意味着只有来自我的应用程序的请求才应该被处理,但情况似乎并非如此,因为如果我的应用程序抓取X,则不会绘制任何内容


那么,应该如何以及何时使用抓取X服务器来实现想要的结果,或者它是一个完全错误的工具,我误解了它的用途(或者试图使用它的级别太高,以至于它无法真正工作)。

你不应该接着调用
XUngrabServer
,让X服务器恢复处理请求吗?所有其他连接都已关闭,因为您调用了
XGrabServer
,但您显然需要请求处理才能恢复,因为您希望对连接进行请求。

您可能需要使用来跟踪呼叫。

我猜,由于您正在打开一个正常的顶级窗口,因此不会绘制任何内容,在这种情况下,窗口管理器需要对其进行操作,然后才能看到它;但是,您已经通过调用XGrabServer()锁定了窗口管理器

您可以尝试在窗口上设置OverrideDirect,这会告诉X服务器窗口管理器根本不应该与此窗口相关。这还可以从窗口中删除任何装饰(标题栏、关闭按钮等),这很可能是关闭通知所需要的