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


17

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

这里提供的释放鼠标的快捷方式似乎无效,因此我对可以为我提供更多信息的东西感兴趣。


您确定这是问题所在吗?对于您不习惯执行此操作的应用程序来说,这有点奇怪(如果确实如此,我将停止使用该应用程序),因此,如果这确实是原因,那么您所使用的就是这种可能性。
goldilocks 2012年

我通过反复试验发现了哪一个,杀死了一些东西,直到某个东西(一个葡萄酒应用程序)释放了抓斗。
东武

Answers:


16

您可以通过按此commit中XF86LogGrabInfo引入的键来执行此操作。

默认情况下,此keyym不绑定到任何物理键或组合键。但是您仍然可以使用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

更新:按下而不放开中间按钮只是最不明显的一个,因为大多数应用程序都没有响应,并且某些鼠标没有该按钮可以尝试单击以查看问题是否消失。


0

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

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

要使用,请先运行xdotool key XF86LogGrabInfo,如机械蜗牛的答案中所述。然后,运行上面链接的程序。如果您的Xorg日志文件不在/var/log/Xorg.0.log,则可以使用--xorg-log选项指定其位置。有关--help详细信息,请参见。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.