dwm에서 XMonad로 다시 전환하는 것을 고려하고 있지만 마지막으로 XMonad를 사용했을 때 겪었던 문제 중 하나는 XMonad 이후로 micmute 키(키보드에 하나 있음)가 작동하지 않는다는 것입니다.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 답변.