O Ubuntu não fornece os códigos de teclas corretos para algumas teclas de mídia

1

Acabei de instalar o Ubuntu 16.04 no meu ThinkPad T450s e, por alguma razão, as teclas de mídia para volume e brilho da tela não estão fornecendo códigos de teclas ou keyyms (ou seja, XF86AudioRaiseVolume). Mas todas as outras chaves de mídia fornecem os valores corretos.

O que é estranho é que as teclas de mídia ainda funcionam bem na unidade e no gnome, é apenas um problema quando uso o i3 porque não consigo mapear as teclas de volume para alterar o volume.

Isso é o que o xev retorna para as teclas de volume desativado, volume ativo e volume:

Diminuir o volume:

FocusOut event, serial 33, synthetic NO, window 0x1a00001,
    mode NotifyUngrab, detail NotifyPointer

FocusIn event, serial 33, synthetic NO, window 0x1a00001,
    mode NotifyUngrab, detail NotifyAncestor

KeymapNotify event, serial 33, synthetic NO, window 0x0,
    keys:  2   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   


0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0 

Aumentar o volume:

FocusOut event, serial 33, synthetic NO, window 0x1a00001,
    mode NotifyGrab, detail NotifyAncestor

FocusIn event, serial 33, synthetic NO, window 0x1a00001,
    mode NotifyUngrab, detail NotifyAncestor

KeymapNotify event, serial 33, synthetic NO, window 0x0,
    keys:  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   
           0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   

Volume mudo:

FocusOut event, serial 33, synthetic NO, window 0x1a00001,
    mode NotifyUngrab, detail NotifyPointer

FocusIn event, serial 33, synthetic NO, window 0x1a00001,
    mode NotifyUngrab, detail NotifyAncestor

KeymapNotify event, serial 33, synthetic NO, window 0x0,
    keys:  2   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   
           0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0 

Como você pode ver, eles são todos iguais. Então eu não tenho ideia de como a união ou o gnomo pode diferenciá-los. Apenas para referência, mostrarei a saída para as chaves de mídia mic off e wifi off de xev :

KeyRelease event, serial 33, synthetic NO, window 0x1a00001,
    root 0xf6, subw 0x0, time 3107820, (-19,759), root:(625,798),
    state 0x0, keycode 198 (keysym 0x1008ffb2, XF86AudioMicMute), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyPress event, serial 34, synthetic NO, window 0x1a00001,
    root 0xf6, subw 0x0, time 3112189, (-19,759), root:(625,798),
    state 0x0, keycode 246 (keysym 0x1008ff95, XF86WLAN), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

E eu costumava obter resultados semelhantes para as teclas de volume antes de instalar o Ubuntu também (eu estava usando o Arch).

As teclas de brilho também não funcionam. Elas estão sendo substituídas em algum nível baixo? Existe uma maneira que eu possa corrigi-lo para que eles retornem o valor correto ou há alguma outra maneira que eu possa obter as teclas de mídia trabalhando para o Ubuntu?

Atualizar : isso é o que o xev dá para as teclas de volume para cima e para baixo durante a execução da unidade.

FocusOut event, serial 47, synthetic NO, window 0x4800001,
    mode NotifyGrab, detail NotifyAncestor

FocusIn event, serial 47, synthetic NO, window 0x4800001,
    mode NotifyUngrab, detail NotifyAncestor

KeymapNotify event, serial 47, synthetic NO, window 0x0,
    keys:  2   0   0   0   0   0   0   0   0   0   0   0   0   0   0   4   
           0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   

KeyRelease event, serial 47, synthetic NO, window 0x4800001,
    root 0xf7, subw 0x0, time 2182026, (-1217,972), root:(525,2104),
    state 0x0, keycode 122 (keysym 0x1008ff11, XF86AudioLowerVolume), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

FocusOut event, serial 47, synthetic NO, window 0x4800001,
    mode NotifyGrab, detail NotifyAncestor

FocusIn event, serial 47, synthetic NO, window 0x4800001,
    mode NotifyUngrab, detail NotifyAncestor

KeymapNotify event, serial 47, synthetic NO, window 0x0,
    keys:  2   0   0   0   0   0   0   0   0   0   0   0   0   0   0   8   
           0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   

KeyRelease event, serial 47, synthetic NO, window 0x4800001,
    root 0xf7, subw 0x0, time 2185429, (-1217,972), root:(525,2104),
    state 0x0, keycode 123 (keysym 0x1008ff13, XF86AudioRaiseVolume), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

Ao executar a unidade, também tenho unity-settings-daemon , unity-panel-service e unity-fallback-mount-helper . Um desses poderia estar capturando o evento e adicionando os XF86 keysyms? Nenhum desses está em execução no i3.

Em resposta a @Adaephon eu tenho isso na minha configuração do i3:

# volume controls
bindsym XF86AudioRaiseVolume exec amixer -q  set Master playback 2%+ unmute
bindsym XF86AudioLowerVolume exec amixer -q  set Master playback 2%- unmute
bindsym XF86AudioMute exec amixer -q set Master mute
    
por Yep_It's_Me 03.05.2016 / 10:48

1 resposta

1

Parece que as chaves em questão já são captadas globalmente por algum outro aplicativo. Os três segmentos de saída que você obtém de xev são relacionados apenas à perda da janela xev e à obtenção do foco, enquanto a chave é capturada de outra forma (consulte meu post no antigo i3 FAQ ).

Existem duas causas prováveis, por que xev pode mostrar uma saída assim e a atalho de teclado não funciona:

  1. Primeiro eu verificaria se as chaves em questão - XF86AudioLowerVolume (código_de_code 122 ), XF86AudioRaiseVolume (código_de_code 123 ) e XF86AudioMute (keycode 121 ) - já estão vinculados com bindsym (ou bindcode ) em sua configuração i3 . Talvez seja apenas o comando ligado, o que não funciona.

    (Update) Do trecho de sua configuração do i3 , este parece ser o caso. Acho que 16.04 usa o PulseAudio por padrão, então amixer pode nem ser instalado. Você pode usar pactl para alterar o volume no PulseAudio. Para emular suas configurações anteriores de amixer , tente isto:

    bindsym XF86AudioRaiseVolume exec pactl set-sink-volume @DEFAULT_SINK@ +2%; exec pactl set-sink-mute @DEFAULT_SINK@ 0
    bindsym XF86AudioLowerVolume exec pactl set-sink-volume @DEFAULT_SINK@ -2%; exec pactl set-sink-mute @DEFAULT_SINK@ 0
    bindsym XF86AudioMute exec pactl set-sink-mute @DEFAULT_SINK@ toggle
    

    Você também pode usar 1 em vez de toggle on set-sink-mute , se você deseja ativar apenas com as teclas XF86AudioLowerVolume e XF86AudioRaiseVolume .

  2. Se esse não for o caso, alguma outra ferramenta está pegando essas chaves. Um provável candidato é gnome-settings-daemon , unity-settings-daemon pode ser outro. Além disso, alguns players de mídia podem tentar vincular essas chaves globalmente. Sugiro verificar a saída de ps aux em uma sessão i3 para ver o que é iniciado automaticamente. Quando você encontrou o culpado, você tem basicamente três opções:

    • Na maioria dos casos, deve ser possível des-configurar as combinações de teclas. Provavelmente a solução mais fácil, se você quiser continuar usando o que estiver pegando as chaves.
    • Faça funcionar corretamente. Pode ser que o programa que captura a chave realmente faça, o que você quer fazer de qualquer maneira (por exemplo, controle de volume), mas por algum motivo não pode. Por exemplo: o programa tenta alterar o volume com o PulseAudio, enquanto você não está realmente usando o PulseAudio.
    • Pare de começar. Se você colocá-lo em autostart sozinho (por exemplo, exec declaração em sua configuração i3 ), basta removê-lo. Se for iniciado automaticamente devido a alguma predefinição do Ubuntu, isso pode exigir mais trabalho.

Para gnome-settings-daemon , você pode usar as instruções de minha (outra) postagem no antigo i3 FAQ :

Você deve conseguir uma lista de chaves encadernadas com os seguintes comandos:

gsettings list-recursively org.gnome.settings-daemon.plugins.media-keys

Você pode desassociá-los, marcando uma string empy

gsettings set org.gnome.settings-daemon.plugins.media-keys volume-mute ''
gsettings set org.gnome.settings-daemon.plugins.media-keys volume-down ''
gesttings set org.gnome.settings-daemon.plugins.media-keys volume-up ''

Como alternativa, você também pode usar dconf :

dconf write /org/gnome/settings-daemon/plugins/media-keys/volume-mute "''"
dconf write /org/gnome/settings-daemon/plugins/media-keys/volume-down "''"
dconf write /org/gnome/settings-daemon/plugins/media-keys/volume-up "''"
    
por Adaephon 10.05.2016 / 08:03