在命令行上操纵X键和指针


20

有哪些命令行工具可以列出和管理X服务器抢夺?(就像在键和指针的抓取中那样,即将特定的键或鼠标按钮限制在特定的应用程序中使用,或者将鼠标指针限制在特定的屏幕区域中。)我正在寻找一种假设的xgrab实用程序显示类似

Key     0x00f00ba5  0x123   0
Button  0x00f00ba5  2       
Pointer 0x00abcdef  

这意味着出现了一个电话XGrabKey(display, 0x123, 0, 0x00f00ba5, ...)等用XGrabButtonXGrabPointerXGrabKeyboardXGrabServer(如果可能)。显示格式无关紧要,我想要的是某种方式来查看谁在抢什么,或者可能是某种方式来撤销这些抢夺(如果可能,我不确定X11 API是否允许这样做)。

Answers:


21

X的最新版本(X.org服务器≥1.11)支持在此commit中引入的几个调试键符号。触发后,它们执行与抓取有关的动作。

默认情况下(至少在最新版本中),这些功能处于禁用状态(默认键盘映射中不存在)。

但是,如果已xdotool安装,可以通过在命令行上执行来调用它们:

xdotool key NameOfKey

NameOfKey您要激活的键盘符号在哪里。例如,要将活动抓取列表打印到X服务器日志,请使用xdotool key XF86LogGrabInfo

相关的键盘符号是:

请注意,XF86LogGrabInfo仅列出主动抓斗,而不列出被动抓斗,例如当前未按下的按键抓斗。如果要获取有关被动抓取的信息,则需要激活抓取:xdotool key XF86LogGrabInfo在按下您感兴趣的和弦或鼠标按钮组合时运行。做类似的事情:

  1. sleep 1; xdotool key XF86LogGrabInfo
  2. 在1秒钟内,按下和弦或鼠标组合键。
  3. 1秒钟后,释放键/按钮。
  4. 检查X服务器日志中的“活动抓取...”信息(通常是/var/log/Xorg.0.log)。

2
现在使用Xorg 1.12.4在Debian wheezy上进行测试,xdotool key XF86LogGrabInfo将仅触发X日志中的两个条目:“打印所有当前活动的设备抓取:”,紧接着是“活动设备抓取的结束列表”。但是我的窗口管理器确实抓住了一堆钥匙。您看过抓钥匙的作品吗?
吉尔斯(Gilles)'所以

4
@Gilles-不,如果像这样运行它,将不会得到任何输出...尝试使用它运行sleep 2; xdotool key "XF86LogGrabInfo"并立即开始非常快速地按一个键(例如“ Win”键),然后您将在其中看到一些输出Xorg.log。或者使用xdotool同时按+ XF86LogGrabInfo的键,例如此处
don_crissti 2014年

@don_crissti啊,我知道,XF86LogGrabInfo仅显示有关当前按下的键的信息吗?那限制了它的用途。如果我正确理解术语,我想列出所有的抓斗-所有被动的抓斗。
吉尔斯(Gilles)'所以

可能有一些巧妙的方法将其与脚本化的键组合的详尽搜索结合起来,希望没有虚拟键盘。当然是我所不知道的。
亚当·卡兹

谢谢!这有助于我发现它xfsettingsd正在窃取我的Win+ L快捷方式。
Mikel

8

我不知道可能存在的单个键或按钮的被动抓取1,但是有几种方法可以列出整个键盘或鼠标设备的主动抓取。

  1. 在所有平台上,但仅在Xorg 1.11和更高版本(或应用了补丁的较早版本)上,如这些补丁说明中所述,映射热键以将抓取数据转储到日志
  2. 在Solaris 11(Solaris 11 Express 2010.11或实际的Solaris 11发行版)上,使用调试器脚本,例如/usr/demo/Xserver/mdb/list_Xserver_devicegrab_client,如从X Server中获取信息中所述。这里还有一个用于服务器抓取的功能,Xorg 1.11热键目前尚不提供。

1有关主动抓取与被动抓取的定义,请参见http://tronche.com/gui/x/xlib/input/pointer-grabbing.html


4

这是对机械蜗牛的回答的补充-

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

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

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


1
这里提到的要点是用语言D编程的。要获取可执行文件,可以安装软件包gdc(GNU D编译器),libx11-dev然后运行gdc -o xorg-show-grabs xorg-show-grabs.d -lX11
斯特凡·古里康
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.