在Linux中仅使用修饰符注册热键

在Linux中仅使用修饰符注册热键,linux,x11,hotkeys,Linux,X11,Hotkeys,我正在使用Linux X11图形系统在我的程序中设置热键。问题是我不知道如何设置热键组合,如Ctrl+Alt和Ctrl+Shift,即没有任何键,只有修改器。我试着这样做: KeyCode key = XKeysymToKeycode(display, 0); //no key code XGrabKey(display, key, ControlMask | ShiftMask, grabWin, true, GrabModeAsync, GrabModeAsync); 但它不起作用。然而,

我正在使用Linux X11图形系统在我的程序中设置热键。问题是我不知道如何设置热键组合,如Ctrl+Alt和Ctrl+Shift,即没有任何键,只有修改器。我试着这样做:

KeyCode key = XKeysymToKeycode(display, 0); //no key code
XGrabKey(display, key, ControlMask | ShiftMask, grabWin, true, GrabModeAsync, GrabModeAsync);
但它不起作用。然而,它是这样工作的(有点):

我不喜欢这个解决方案,因为:

  • 逻辑错误
  • 它仅在按住Ctrl+Alt键时触发,而不是按住Alt+Ctrl键,即按下顺序很重要
  • 它使用Ctrl和Alt键阻止windows中的所有其他组合
  • 我做错了什么?

    试试看。抓取是你消费的热键;如果你想只听而不看事件,你需要其他的东西。
     KeyCode key = XKeysymToKeycode(display, XK_Alt_L); //Alt key
     XGrabKey(display, key, ControlMask, grabWin, true, GrabModeAsync, GrabModeAsync);