X11

如何將 XF86XK_AudioMicMute 綁定到 XMonad 中的操作?

  • May 17, 2020

我正在嘗試從 dwm 切換回 XMonad,但我在上一次使用 XMonad 期間遇到的問題之一是我的 micmute 鍵(我的鍵盤有一個),因為 XMonad 的Graphics.X11.ExtraTypes.XF86沒有工作不包括XF86XK_AudioMicMute.

這是否意味著我無法將此鍵綁定到 XMonad 中的操作?請注意,keysym 存在/usr/include/X11/XF86keysym.h(因此,我可以將它綁定到 dwm 中而不會出現問題)。

實際上,Graphics.X11.ExtraTypes.XF86 似乎沒有提供XF86XK_AudioMicMuteKeySym。這可能是一個疏忽(可能是在編寫 Haskell 模組之後添加了 MicMute 鍵鍵符)或故意決定(可能是因為 Mic Mute 鍵非常罕見)。

無論哪種方式,幸運的是,有一種方法可以在沒有 KeySym 的情況下在 Haskell 中綁定鍵:您使用實際的事件標識符(KeySym 從中/usr/include/X11/XF86keysym.h只提供了一個宏);事實上,Graphics.X11.ExtraTypes.XF86 中的 KeySyms 也只是事件標識符的宏。

使用xevXorg組件工具)將允許您檢查與特定按鍵相關的鍵事件(或 KeySym 名稱)。如果事件標識符本身由於某種原因不可見,一旦您知道 KeySym 名稱,您就可以檢查/usr/include/X11/XF86keysym.h以確定確切的事件標識符。在我的系統上,該標題中存在以下行:

#define XF86XK_AudioMicMute 0x1008FFB2   /* Mute the Mic from the system */

這意味著,在我的系統上(並註意這些鍵符是特定於供應商的),XF86XK_AudioMicMute具有事件標識符0x1008FFB2。現在,就像魔術一樣,您可以將事件標識符放入您的xmonad.hs其中,它可能看起來像這樣:

myKeys conf@(XConfig {XMonad.modMask = modMask}) = M.fromList $
   [ ... <snip>
   , ((0, xF86XK_AudioMute), spawn $ "pactl -- set-sink-mute   1 toggle")
   , ((0, XF86XK_AudioMicMute), spawn $ "pactl -- set-source-mute 2 toggle")
   , ... <snip>
   ]

瞧!您現在是您自己的功能性 MicMute 鑰匙的自豪擁有者!

此外,此策略可用於任何沒有公共 KeySym 但仍具有可辨識事件標識符的密鑰。

對於類似的答案(我最初發現此功能的答案),請參閱此 Superuser.SE 答案

引用自:https://unix.stackexchange.com/questions/211939