具体来说,我想在显示器上,在所有其他窗口的顶部显示文本和图像,但没有可点击或以任何可能的方式进行交互 - 点击它应该直接进入下面的任何窗口。< / p>
到目前为止,我的研究让我尝试阅读有关复合叠加窗口的X文档,但遗憾的是我无法随意使用它。我找到的唯一有帮助的资源是一个小的nodejs库(node-x11),遗憾的是它似乎已被遗弃但仍然不完整,而且我无法开始工作。显然还有一个python库,但它似乎比nodejs更不完整。
答案 0 :(得分:1)
node-x11作者在这里(并没有放弃,我只是添加了我需要的功能或用户请求的功能,所以如果你遗漏了什么请填写问题!)
您可以使用composite extension中的GetOverlayWindow
:
协议版本0.3添加了复合叠加窗口,其中 为合成管理者提供一个无需绘制的表面 干扰。此窗口始终高于正常窗口 屏幕保护程序窗口下方。它是一个InputOutput窗口,其宽度 和高度是屏幕尺寸。它的视觉是根视觉 它的边界宽度为零。试图使用。重定向它 复合扩展被忽略。此窗口不会出现在 QueryTree请求的回复。它也是一个覆盖重定向窗口。 最后两个功能使窗口管理器和其他X11不可见 客户端。访问此窗口的XID的唯一方法是通过 CompositeGetOverlayWindow请求。最初,复合叠加 窗口未映射。
CompositeGetOverlayWindow返回Composite Overlay的XID 窗口。如果窗口尚未映射,则由此映射 请求。调用此请求的所有客户端都已终止 他们的X11连接窗口未映射。
复合管理器可以直接渲染到复合叠加层 窗户,或者他们可能重新将其他窗户重新成为这个孩子 窗口并渲染到这些。多个客户端可能会呈现给 复合叠加窗口,创建它的子窗口,重塑它,和 重新定义其输入区域,但遵循特定的仲裁规则 本规范未定义这些客户端;这些政策 应该由客户自己定义。
node-x11示例:
var x11 = require('x11');
x11.createClient(function(err, display) {
var X = display.client;
var root = display.screen[0].root;
X.require('composite', function(err, Composite) {
Composite.GetOverlayWindow(root, function(err, overlayId) {
// now you can draw on overlayId window here.
});
});
});