查找 X.org 指针抓取所有者

查找 X.org 指针抓取所有者

我有一个应用程序似乎抓住了鼠标(我可以移动它,但无法单击任何地方),有没有办法找到哪个应用程序拥有 X.org 鼠标抓取?

这里给出的快捷方式释放鼠标似乎不起作用,所以我对可以提供更多信息的东西感兴趣。

答案1

您可以通过XF86LogGrabInfo按 中介绍的键来执行此操作这次提交

默认情况下,此键符号不绑定到任何物理键或键组合。但您仍然可以使用以下方法激活它xdotool

xdotool key "XF86LogGrabInfo"

执行该命令后,活动抓取列表将记录到 X 日志中。至少在 Ubuntu 上,这是/var/log/Xorg.0.log.它将位于日志文件末尾附近的某个位置,但其下方可能有几条不相关的日志消息。如果没有抢夺,它会写道:

[1199271.146] (II) Printing all currently active device grabs:
[1199271.146] (II) End list of active device grabs

如果有抓取(这里,我在 Firefox 中打开了一个菜单),它会记录如下内容:

[1199428.782] (II) Printing all currently active device grabs:
[1199428.782] Active grab 0x4c00000 (core) on device 'Virtual core pointer' (2):
[1199428.782]       client pid 15620 /usr/lib/firefox/firefox 
[1199428.782]       at 1199423728 (from active grab) (device thawed, state 1)
[1199428.782]         core event mask 0x7c
[1199428.782]       owner-events true, kb 1 ptr 1, confine 0, cursor 0x0
[1199428.782] (II) End list of active device grabs

答案2

我刚刚遇到了类似的问题,并将其缩小到一个错误,该错误不知何故使 X11 认为中间按钮被按下而不是释放。在发生 mouseup 事件之前,物理上断开鼠标连接并没有帮助。

可以使用以下命令重现该问题xdotool mousedown 2- 无法在窗口之间切换焦点,

xdotool key XF86LogGrabInfo显示当前聚焦的进程窗口,但是当一个窗口杀死它时,另一个窗口接收焦点并且相同的情况继续。

解决方法: 问题xdotool mouseup 2.

更新:按下中间按钮但未释放是最不引人注目的,因为大多数应用程序不会对其做出响应,并且某些鼠标没有此按钮来尝试单击以查看问题是否消失。

答案3

Xorg 日志中的条目可能非常难以辨认。我编写了一个程序来解析它们并以人类易于处理的形式呈现它们:

https://gist.github.com/Cyber​​Shadow/6412d11aea64144f8905cc0b8196f38e

要使用,首先运行xdotool key XF86LogGrabInfo,如 Mechanical snail 的答案中所述。然后,运行上面链接的程序。如果您的 Xorg 日志文件不位于/var/log/Xorg.0.log,您可以使用--xorg-log选项指定其位置。--help详情请参阅。

相关内容