跳转到内容

X11 抓取键盘

我遇到的问题可以用以下几个链接概括:

x11 - Unable to move window after XGrabKeyboard

Redirect Keyboard input with XGrabKey or XGrabKeyboard

一句话概括就是 XGrabKey 只要有其他客户端 Grab 过你要 Grab 的键位,就会失败,经过经验证明这是大概率失败的,而 XGrabKeyboard 也会影响鼠标拖动窗口调整窗口大小以上问题均没有解决方案。

经过一番摸索,我发现 xcb 会在鼠标进入标题栏抵达窗口边框移出窗口时触发 XCB_LEAVE_NOTIFY,在离开标题栏进入窗口时触发 XCB_ENTER_NOTIFY,于是在进入的时候调用 XGrabKeyboard,离开的时候调用 XUnGrabKeyboard 即可