Como faço para ligar o XF86XK_AudioMicMute a uma ação no XMonad? [fechadas]

1

Estou brincando de voltar ao XMonad do dwm, mas um dos problemas que enfrentei durante meu último período com o XMonad foi que minha tecla de micmute (meu teclado tem um), não funcionava desde que o XMonad Graphics.X11.ExtraTypes.XF86 não inclui o KeySym para XF86XK_AudioMicMute .

Isso significa que é impossível vincular essa chave a uma ação no XMonad? Observe que o keysym está presente em /usr/include/X11/XF86keysym.h (e, consequentemente, eu posso vinculá-lo no dwm sem problemas).

    
por HalosGhost 24.06.2015 / 22:09

1 resposta

2

De fato, Graphics.X11.ExtraTypes.XF86 não parece fornecer um XF86XK_AudioMicMute KeySym. Ou isso foi um descuido (talvez a tecla KeyMaster MicMute foi adicionada depois que o módulo Haskell foi escrito) ou uma decisão intencional (talvez porque a tecla Mic Mute seja tão incomum).

De qualquer maneira, felizmente, existe uma maneira de ligar chaves no Haskell sem um KeySym: você usa o identificador de evento real (para o qual o KeySym de /usr/include/X11/XF86keysym.h apenas fornece uma macro); na verdade, os KeySyms em Graphics.X11.ExtraTypes.XF86 também são apenas macros para os identificadores de evento.

Usar xev (a ferramenta do componente Xorg ) permitirá que você verifique o evento principal (ou nome do KeySym) associado a um pressionamento de tecla específico. Depois que você souber o nome do KeySym se o próprio identificador de evento não estiver visível por algum motivo, poderá verificar /usr/include/X11/XF86keysym.h para determinar o identificador de evento exato. No meu sistema, a seguinte linha existe nesse cabeçalho:

#define XF86XK_AudioMicMute 0x1008FFB2   /* Mute the Mic from the system */

Isso significa que, no meu sistema (e observe que esses keyyms são específicos do fornecedor), XF86XK_AudioMicMute tem o identificador de evento 0x1008FFB2 . Agora, como mágica, você pode lançar o identificador de evento no seu xmonad.hs , que pode ser algo como isto:

myKeys conf@(XConfig {XMonad.modMask = modMask}) = M.fromList $
    [ ... <snip>
    , ((0, xF86XK_AudioMute), spawn $ "pactl -- set-sink-mute   1 toggle")
    , ((0, 0x1008FFB2      ), spawn $ "pactl -- set-source-mute 2 toggle")
    , ... <snip>
    ]

E voila! Você é agora o orgulhoso proprietário da sua própria chave MicMute funcional!

Além disso, essa estratégia pode ser usada para qualquer chave que não tenha um KeySym público, mas ainda tenha um identificador de evento reconhecível.

Para uma resposta semelhante (uma através da qual eu originalmente descobri esse recurso), veja esta resposta Superuser.SE .

    
por 25.06.2015 / 01:30