问题标签 [xcb]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
10178 浏览

x11 - Xlib 中的窗口位置

如何使用普通的 ol' xlib(或全新的 XCB)获得相对于根窗口(即整个屏幕)的顶级窗口位置?

0 投票
1 回答
832 浏览

deadlock - xlib/ xcb 死锁或阻塞

我有一个使用 xlib 和 cairo 开发的程序。仅供参考,我确实在 cairo 和 xlib 之间混合调用,尽管我不确定这是否可能是错误的原因。在某些情况下,我会遇到死锁或阻塞。我有三个与 xlib 一起工作的线程。一个是主 UI 线程,它同时调用 xlib 和 cairo,另一个使用它来发送 XClientMessage,第三个调用一些 xlib 调用,如 XCopyArea,最后发送一个 XClientMessage(那些用于某些动画)。我在程序开始时调用了 InitThreads。我还使用 XLockDisplay 保护了所有 xlib 调用(cairo 调用也使用 XLockDisplay 保护)。我正在使用 ubuntu 10.10。堆栈跟踪是:

(gdb)
__kernel_vsyscall () 中的线程 1 0
来自 /lib/tls/i686/cmov/libc.so.6 的 poll () 中的 1
2 在 ?? () 来自 /usr/lib/libxcb.so.1
3 在 ?? () from /usr/lib/libxcb.so.1
4 in xcb_writev () from /usr/lib/libxcb.so.1
5 in _XSend () from /usr/lib/libX11.so.6
6 in _XEventsQueued ()从 /usr/lib/libX11.so.6
7 在 XPending () 从 /usr/lib/libX11.so.6
(gdb) 线程 6
0 在 __kernel_vsyscall ()
1 在 __llll_lock_wait () 从
/lib/tls/i686/ cmov/libpthread.so.0
2 in _L_lock_752 () from /lib/tls/i686/cmov/libpthread.so.0
3 in pthread_mutex_lock () from /lib/tls/i686/cmov/libpthread.so.0
4 in ? ? () 来自 /usr/lib/libX11.so.6
5 在 XLockDisplay () 来自 /usr/lib/libX11.so.6
(gdb) 线程 7
0 在 __kernel_vsyscall ()
1 在 __lll_lock_wait () 来自 /lib/tls/i686/cmov/libpthread.so.0
2 在 _L_lock_752 ( ) 从 /lib/tls/i686/cmov/libpthread.so.0
3 在 pthread_mutex_lock () 从 /lib/tls/i686/cmov/libpthread.so.0
4 在 ?? () 来自 /usr/lib/libX11.so.6
5 在 XLockDisplay () 来自 /usr/lib/libX11.so.6
其中线程 1 是主 ui 线程,当前在事件循环中调用 XPending(它已经调用了 XLockDisplay),thead 7 是仅发送 XClientMessage 的线程,线程 6 是对 XCopyArea 进行了一些调用的线程,现在大约调用 XSendMessage(它与线程 7 一起等待线程 1 完成)。但是线程 1 似乎永远不会从民意调查中返回。我不确定它是否相关(我绝不是 linux 或 libc 方面的专家),但我有另一个线程正在轮询中等待(它是 TCP/IP 网络通信的线程)(gdb)线程 2
0 在__kernel_vsyscall ()
1 in poll () from /lib/tls/i686/cmov/libc.so.6
有没有人遇到过类似的死锁/阻塞?这可能是 xcb 中的错误吗?是否值得尝试在没有 xcb 的情况下编译 xlib?谢谢

0 投票
1 回答
839 浏览

python - 窗口管理器应该如何处理 ConfigureRequestEvent?

为了我的罪过(以及为了有趣的学习经验),我正在编写一个窗口管理器(我知道,我知道)。

我正在使用 python 和 XCB (python-xpyb)。

到目前为止,我已经发现我需要在根窗口上使用 SubStructureRedirect 掩码,并且我成功地传递了与应用程序的顶级窗口相关的事件。我正在通过启动 xterm 来测试它。

我得到一个 ConfigureRequestEvent,然后是一个暂停,然后是另一个 ConfigureRequestEvent,然后是一个 MapRequestEvent。

当我得到 MapRequestEvent 时,我调用connection.core.MapWindowChecked(e.window)它,它可以工作,但映射一个只有一个像素或两个宽/高的窗口。

那么,我的问题是,我应该如何处理 ConfigureRequestEvent 以使窗口大小正确(假设这就是我所缺少的)?

更准确地说,我到底叫什么?MapWindowChecked 是一个明显的选择,但我似乎无法找到如何实际配置宽度/高度。我猜它是 ConfigureWindow,但接受的参数对我来说似乎很模糊。上次我调用它时,我使用了 xcb.xproto.CW.EventMask,但 CW 中的所有标志似乎都与宽度/高度无关。

PS 关于所有这些的文档对我来说似乎非常难以捉摸。我查看了几个据称使用 xcb 的 python 窗口管理器,它们似乎使用自己的自定义版本和额外的功能。此外,检查/调试正在运行的窗口管理器(也负责映射调试器的窗口)是一个 PITA,因此我在这里问。可能会更好使用两台机器或一个虚拟机或其他东西。

谢谢。

0 投票
1 回答
420 浏览

python - 如何在 Xorg 中获取窗口的图标名称?

我正在尝试使用 python 获取窗口的图标名称,以便在基于 pyclutter 的任务栏中使用。我已经通过 wnck 获得了 XID,但 wnck 似乎只能给我一个 gtk.gdk.Pixbuf,这对混乱没有用处。我确信有一些方法可以使用 python-xlib 或 python-xcb 来做到这一点,我只是找不到它:-)

有任何想法吗?

0 投票
1 回答
2782 浏览

linux - 如何在 XCB 中使用关闭按钮退出程序

找不到有关如何通过“X”按钮关闭应用程序的任何参考。我正在使用 XCB 进行编程,并想通过“X”按钮关闭程序。我看了看,找不到任何关于它的东西。我知道如何按下按钮关闭。此外,通过按“X”按钮,窗口看起来像是关闭了,但实际上并没有。

0 投票
2 回答
3109 浏览

c++ - 如何使用 XCB 向应用程序发送关键事件?

如何使用 将按键或按键释放事件从另一个程序发送到窗口(当前活动窗口)XCB

我找到了一些使用 的教程XLib,但是我想使用XCB.

我想我将不得不调用xcb_send_event,但是我不知道将它作为参数传递什么。

0 投票
2 回答
7392 浏览

linux - XCB 准备好用于生产了吗?我应该改用 Xlib 吗?

如果需要在不使用 GTK、QT 等的情况下对 X11 事件、窗口和输入进行低级别访问,应该使用 Xlib 还是XCB?各自的优缺点是什么?

0 投票
1 回答
1235 浏览

linux - 使用 X11,如何在忽略某些事件的同时让用户的时间“远离键盘”?

我正在制作一个小应用程序,它需要知道用户空闲了多长时间——例如,不使用键盘或鼠标。XCB 和 Xlib 都承诺通过它们各自的屏幕保护程序扩展程序给我空闲时间。这是我使用 XCB 获得空闲时间的地方:

但是,这与“ms_since_user_input”建议的行为非常不同。如果我正在观看视频(使用 Totem 测试),空闲时间会在 30 秒内重置为 0,无一例外。许多游戏也会发生同样的事情,即使它们被暂停也会导致这种情况!使用 XLib,我得到了完全相同的行为。

我也许可以改进使用空闲时间的代码,所以这种行为不是什么大问题,但我真的很想完全摆脱这个问题。如果我只获得自上次用户输入事件(并且只有最后一次用户输入事件)以来的时间,我会更喜欢。只要我的程序不会产生大量流量,我不介意使用其他一些库来到达那里。

您对如何做到这一点有任何想法吗?

0 投票
1 回答
1625 浏览

xcb - xcb 说明伪透明度(将根窗口像素图复制到子窗口背景)

我想用 xcb 说明 windows 的伪透明度(在窗口背景上复制根窗口 pixmap 的一部分)

为此,我使用:

根像素图设置为 feh 然后我启动我的程序(只是代码的一部分):

->初始化连接:

-> 创建窗口:

-> 抓取 xcb 事件:

->回答map_request_event(当它是我们窗口的请求时)或property_notify(当更改的属性是通过feh的根像素图时):

获取根像素图:

将根像素图的一部分复制到窗口像素图:

我使用 xcb_request_check 但似乎我对最后一个请求没有错误。

然后我用 cairo 在我的窗口中绘制元素。

问题是我只看到一个带有 cairo 绘制元素的白色窗口。即使没有 cairo 元素,我也无法显示窗口的复制像素图。

你有什么想法可以帮助我吗?谢谢

0 投票
1 回答
250 浏览

ruby - swig xcb lib 和 ruby

我想为 xcb 创建一个基本的 ruby​​ 模块供我自己使用。我尝试了一个基本测试,用 swig 包装头文件:这是我的 xcb_ruby.i

当我在 irb 中尝试它时,我能够连接以初始化连接,从这个连接中获取信息,但是 ruby​​ 接口就像在 C 中一样。我想要一个更面向对象的接口。

例如在 xcb.h 中有:

我想要一个 Connection 类,其中包含 new/connect()、flush()、generate_id() 和 disconnect() 方法,这是我的新 xcb_ruby.i:

如果我在生成 c 文件后尝试编译,则会出现错误:erreur: unknown type name 'Connection'</p>

有人可以告诉我我错在哪里吗?

谢谢

编辑

我做了一些修改,现在我可以编译它,但我仍然得到一些错误:

现在我可以编译我的模块并使用它:

但是当我尝试另一种方法时,我遇到了错误:

似乎该方法存在,但是在将参数传递给该方法时仍然存在问题。

有任何想法吗??