如何找出系统范围的键绑定来自哪里并删除它们?

如何找出系统范围的键绑定来自哪里并删除它们?

我将键盘布局切换为波兰语,其中 Alt_R 用于生成各种非拉丁字母。其中一些正在工作,有些则没有:

  • Alt_R-l生成“ł”,因为它应该
  • Alt_R-c应该生成“ć”,但启动 Chromium
  • 其他几个 Alt_R 组合键也可以启动各种程序,或者将当前窗口向下移动一小段距离,或者不执行任何操作

这些函数从哪里来?我的“设置”->“键盘”对话框或 ~/.Xmodmap 中没有任何内容 - 还有哪些地方可以定义系统范围的键盘快捷键或其他键盘修改?有详尽的清单吗?

更好的是,有没有办法找出什么应用程序/系统对按键组合做出反应,Alt_R-c以便我可以找出它保存其按键绑定的位置?

这是 Xubuntu 20.04.3 上的。

答案1

有一个键符号XF86LogGrabInfo当按下该按钮时,X 服务器会打印有关所有抢夺在其日志文件中(通常/var/log/Xorg.$DISPLAY.log)。如果您已xdotool安装,则可以使用类似命令触发该键

xdotool key XF86LogGrabInfo

从那里您可以识别罪魁祸首 X11 客户端。例如,为了确定哪个 X11 客户端弄乱了“Space”键,我首先获取绑定到space键符的键码:

$ xkbcomp $DISPLAY - | grep SPCE
    <SPCE> = 65;
    key <SPCE> {         [           space ] };

(您也可以使用xev+按Space),然后我通过以下方式搜索它Xorg.$DISPLAY.log

$ awk '/registered grabs of client/{c=$0}/detail 65/{if(c)print c; c=""; print}' /var/log/Xorg.0.log
[452727.209]   Printing all registered grabs of client pid 32055 openbox --config-file /home/pi/.config/openbox/lxde-pi-rc.xml
[452727.220]     detail 65 (mask 0), modifiersDetail 8 (mask 0)
[452727.220]     detail 65 (mask 0), modifiersDetail 24 (mask 0)
[452727.220]     detail 65 (mask 0), modifiersDetail 10 (mask 0)
[452727.220]     detail 65 (mask 0), modifiersDetail 26 (mask 0)
[452727.241]     detail 65 (mask 0), modifiersDetail 12 (mask 0)
[452727.241]     detail 65 (mask 0), modifiersDetail 28 (mask 0)
[452727.241]     detail 65 (mask 0), modifiersDetail 14 (mask 0)
[452727.241]     detail 65 (mask 0), modifiersDetail 30 (mask 0)

modifiersDetail 8又名等Mod1MaskAlt

所以它openbox正在窃取Alt-Space组合键。


请注意,客户端的 pid 和命令行并不总是准确的;它们是进程的 pid 和命令行连接的到 Xorg unix 域套接字,如果它们同时分叉并且它们的子进程继承了套接字文件描述符,则该套接字可能不再存在(这是天真的滥用SO_PEERCRED“身份验证”的普遍问题,这是一个很长的故事;-))

相关内容