我如何找出哪个程序“拥有”一个热键?

And*_*edd 40 keyboard-shortcuts xfce x11 events

我在带有 4.2.0 内核的 Gentoo 之上运行 XFCE 4.12。我键盘上的 PlayPause 按钮​​曾经用作 VLC 的全局热键。现在 VLC 甚至无法识别密钥。它确实看到“Alt + Media Play Pause”,但不是单独的键。

有没有办法查看是否以及什么程序可能会捕获该密钥?

当我运行xdotool key "XF86LogGrabInfo"tail /var/log/Xorg.0.log文件中读取

[ 10138.690] (II) Printing all currently active device grabs:
[ 10138.690] (II) End list of active device grabs
Run Code Online (Sandbox Code Playgroud)

don*_*sti 27

要找出哪个应用程序/程序获取了您的密钥,请使用调试 keysym XF86LogGrabInfo。用于xdotool同时按 + 键XF86LogGrabInfo,例如在终端运行中

KEY=XF86AudioPlay
xdotool keydown ${KEY}; xdotool key XF86LogGrabInfo; xdotool keyup ${KEY} 
Run Code Online (Sandbox Code Playgroud)

然后检查输出,tail /var/log/Xorg.0.log
注意 withgnome 3/gdm并且systemd这不再记录到Xorg.0.log(而是记录到journal)。在这种情况下,你可以运行

journalctl -f
Run Code Online (Sandbox Code Playgroud)

然后在另一个终端中运行xdotool命令。切换到第一个终端,你会看到类似的东西

/usr/lib/gdm/gdm-x-session[629]: Active grab 0x40c0a58e (xi2) on device 'Virtual core keyboard' (3):
/usr/lib/gdm/gdm-x-session[629]: client pid 708 /usr/bin/gnome-shell
/usr/lib/gdm/gdm-x-session[629]: at 32595124 (from passive grab) (device frozen, state 6)
/usr/lib/gdm/gdm-x-session[629]: xi2 event mask for device 3: 0xc000
/usr/lib/gdm/gdm-x-session[629]: passive grab type 2, detail 0xac, activating key 172
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,获取密钥的程序(客户端)是gnome-shell.

  • 可以通过提供一种方法来确定要传递给 xdotool 的键名称来改进这个答案,因为问题的名称是“如何找出哪个程序‘拥有’热键?” 并且答案可以变得更加通用。 (3认同)
  • 然后我在日志或日记中看不到它 (2认同)