我有一个应用程序似乎抓住了鼠标(我可以移动它,但无法单击任何地方),有没有办法找到哪个应用程序拥有 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/CyberShadow/6412d11aea64144f8905cc0b8196f38e
要使用,首先运行xdotool key XF86LogGrabInfo
,如 Mechanical snail 的答案中所述。然后,运行上面链接的程序。如果您的 Xorg 日志文件不位于/var/log/Xorg.0.log
,您可以使用--xorg-log
选项指定其位置。--help
详情请参阅。