我有一个似乎抓住了鼠标的应用程序(我可以移动它,但是不能在任何地方单击),有没有办法找到拥有X.org鼠标抓取器的应用程序?
我有一个似乎抓住了鼠标的应用程序(我可以移动它,但是不能在任何地方单击),有没有办法找到拥有X.org鼠标抓取器的应用程序?
Answers:
您可以通过按此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
我刚刚遇到了一个类似的问题,并将其缩小为一个错误,该错误以某种方式使X11认为按下了中间按钮却没有松开。在出现mouseup事件之前,物理上断开鼠标的连接无济于事。
可以使用来重现该问题xdotool mousedown 2
-无法在窗口之间切换焦点,
xdotool key XF86LogGrabInfo
显示当前聚焦的过程窗口,但是当一个窗口被杀死时,另一个窗口将获得焦点,并且相同的场景继续。
解决方法:问题xdotool mouseup 2
。
更新:按下而不放开中间按钮只是最不明显的一个,因为大多数应用程序都没有响应,并且某些鼠标没有该按钮可以尝试单击以查看问题是否消失。
Xorg日志中的条目可能非常难以理解。我编写了一个程序来解析它们并以易于处理的形式呈现它们:
https://gist.github.com/CyberShadow/6412d11aea64144f8905cc0b8196f38e
要使用,请先运行xdotool key XF86LogGrabInfo
,如机械蜗牛的答案中所述。然后,运行上面链接的程序。如果您的Xorg日志文件不在/var/log/Xorg.0.log
,则可以使用--xorg-log
选项指定其位置。有关--help
详细信息,请参见。