如何将 XF86XK_AudioMicMute 绑定到 XMonad 中的操作?

如何将 XF86XK_AudioMicMute 绑定到 XMonad 中的操作?

我正在考虑从 dwm 切换回 XMonad,但我上次使用 XMonad 时遇到的问题之一是我的 micmute 键(我的键盘有一个)自从 XMonad 以来就无法使用图形.X11.ExtraTypes.XF86不包括 的 KeySym XF86XK_AudioMicMute

这是否意味着我无法将此键绑定到 XMonad 中的操作?请注意,键符号存在于/usr/include/X11/XF86keysym.h(因此,我能够毫无问题地将其绑定在 dwm 中)。

答案1

事实上,Graphics.X11.ExtraTypes.XF86 似乎没有提供XF86XK_AudioMicMuteKeySym。这要么是一个疏忽(也许 MicMute 键 keysym 是在编写 Haskell 模块之后添加的),要么是一个有意的决定(可能是因为 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 答案

相关内容