XF86XK_AudioMicMuteをXMonadのタスクにバインドする方法は? [閉鎖]

XF86XK_AudioMicMuteをXMonadのタスクにバインドする方法は? [閉鎖]

dwmからXMonadに戻すことを検討していますが、最後にXMonadを使用したときに遭遇した問題の1つは、XMonad以降にmicmuteキー(キーボードに1つあります)が機能しないことです。Graphics.X11.ExtraTypes.XF86KeySymは含まれていませんXF86XK_AudioMicMute

これは、このキーをXMonadのタスクにバインドできないことを意味しますか?キー記号が存在することに注意してください/usr/include/X11/XF86keysym.h(それで問題なくdwmにバインドできました)。

答え1

実際、Graphics.X11.ExtraTypes.XF86はXF86XK_AudioMicMuteKeySymを提供していないようです。これは間違い(おそらくHaskellモジュールが作成された後にMicMuteキーシムが追加された可能性があります)、または意図的な決定(おそらくMicMuteキーが非常にまれであるため)です。

とにかく幸運にも、KeySymなしでHaskellにキーをバインドする方法があります。実際のイベント識別子を使用します(KeySymは/usr/include/X11/XF86keysym.hマクロのみを提供します)。実際、Graphics.X11.ExtraTypes.XF86のKeySymもイベント識別子用のマクロにすぎません。

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の答え

関連情報