如何將 XF86XK_AudioMicMute 綁定到 XMonad 中的操作?
我正在嘗試從 dwm 切換回 XMonad,但我在上一次使用 XMonad 期間遇到的問題之一是我的 micmute 鍵(我的鍵盤有一個),因為 XMonad 的Graphics.X11.ExtraTypes.XF86沒有工作不包括
XF86XK_AudioMicMute
.這是否意味著我無法將此鍵綁定到 XMonad 中的操作?請注意,keysym 存在
/usr/include/X11/XF86keysym.h
(因此,我可以將它綁定到 dwm 中而不會出現問題)。
實際上,Graphics.X11.ExtraTypes.XF86 似乎沒有提供
XF86XK_AudioMicMute
KeySym。這可能是一個疏忽(可能是在編寫 Haskell 模組之後添加了 MicMute 鍵鍵符)或故意決定(可能是因為 Mic Mute 鍵非常罕見)。無論哪種方式,幸運的是,有一種方法可以在沒有 KeySym 的情況下在 Haskell 中綁定鍵:您使用實際的事件標識符(KeySym 從中
/usr/include/X11/XF86keysym.h
只提供了一個宏);事實上,Graphics.X11.ExtraTypes.XF86 中的 KeySyms 也只是事件標識符的宏。使用
xev
(Xorg
組件工具)將允許您檢查與特定按鍵相關的鍵事件(或 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 答案。