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_AudioMicMute
KeySymを提供していないようです。これは間違い(おそらく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の答え。