web-dev-qa-db-fra.com

Ubuntu ne donne pas les codes de clé corrects pour certaines clés multimédias

Je viens d’installer Ubuntu 16.04 sur mon ThinkPad T450 et, pour une raison quelconque, les touches de support pour le volume et la luminosité de l’écran ne donnent pas de codes de clé ou d’appareils de frappe (par exemple, XF86AudioRaiseVolume). Mais toutes les autres clés multimédias donnent les valeurs correctes.

Ce qui est étrange, c'est que les touches multimédias fonctionnent toujours bien dans l'unité et gnome, c'est simplement un problème lorsque j'utilise i3 car je ne peux pas mapper les touches de volume pour modifier le volume.

Voici ce que xev renvoie pour les touches Volume bas, Volume haut et Muet muet:

Baisser le 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 

Monter le son:

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 muet:

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 

Comme vous pouvez le constater, ils sont tous identiques. Je ne vois donc pas comment l’unité ou le gnome peuvent les différencier. Juste pour référence, je vais montrer la sortie pour le micro éteint et le wifi éteint par les touches multimédias 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

Avant d’installer Ubuntu (j’utilisais Arch), j’obtenais des résultats similaires pour les clés de volume.

Les touches de luminosité ne fonctionnent pas non plus, sont-elles remplacées à un niveau bas? Existe-t-il un moyen de résoudre le problème pour qu'ils renvoient la valeur correcte ou existe-t-il un autre moyen de faire en sorte que les clés multimédias fonctionnent pour ubuntu?

Mise à jour: C'est ce que xev donne pour les touches d'augmentation et de diminution du volume pendant l'exécution de l'unité.

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

Lors de l'exécution de l'unité, j'ai également unity-settings-daemon, unity-panel-service et unity-fallback-mount-helper. L'un de ceux-ci pourrait-il intercepter l'événement et ajouter les XF86 keysyms? Aucun d'entre eux ne fonctionne sous i3.

En réponse à @Adaephon, j'ai ceci dans ma config 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
2
Yep_It's_Me

Il semble que les clés en question aient déjà été récupérées globalement par une autre application. Les trois segments de sortie que vous obtenez de xev ne sont liés qu’à la perte et à la réactivation de la fenêtre xev, tandis que la clé est saisie autrement (Voir mon message sur l’ancien i3 FAQ ).

Il y a deux causes probables, pourquoi xev pourrait afficher une sortie comme celle-ci et que la liaison de clé ne fonctionne pas:

  1. Je voudrais d’abord vérifier si les clés en question - XF86AudioLowerVolume (keycode 122), XF86AudioRaiseVolume (keycode 123) et XF86AudioMute (keycode 121) - sont déjà liés à bindsym (ou bindcode) dans votre configuration i3 . Peut-être que c'est seulement la commande liée, qui ne fonctionne pas.

    (Mise à jour) De l'extrait de code de votre i3 config, cela semble être le cas. Je pense que 16.04 utilise PulseAudio par défaut, donc amixer pourrait même ne pas être installé. Vous pouvez utiliser pactl pour modifier le volume sur PulseAudio. Pour émuler vos paramètres amixer précédents, essayez ceci:

    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
    

    Vous pouvez également utiliser 1 au lieu de toggle sur set-sink-mute, si vous souhaitez réactiver le son uniquement avec le XF86AudioLowerVolume et XF86AudioRaiseVolume clés.

  2. Si ce n'est pas le cas, un autre outil récupère ces clés. Un candidat probable est gnome-settings-daemon, unity-settings-daemon pourrait en être un autre. En outre, certains lecteurs multimédias peuvent essayer de lier ces clés globalement. Je suggère de vérifier la sortie de ps aux sur une nouvelle session i3 == pour voir ce qui est démarré automatiquement. Lorsque vous avez trouvé le coupable, vous avez essentiellement trois options:

    • Dans la plupart des cas, il devrait être possible de déconfigurer les raccourcis clavier. Probablement la solution la plus simple, si vous voulez continuer à utiliser ce qui est en train de saisir les clés.
    • Faites le fonctionner correctement. Il se peut que le programme qui saisit la clé doive réellement faire ce que vous voulez faire (contrôle du volume, par exemple), mais pour une raison quelconque, cela ne peut pas. Par exemple: le programme tente de modifier le volume avec PulseAudio, alors que vous n'utilisez pas réellement PulseAudio.
    • Arrêtez de commencer. Si vous le mettez dans le démarrage automatique vous-même (par exemple, une instruction exec dans votre configuration i3 ), vous pouvez simplement le supprimer. S'il est démarré automatiquement en raison de certains préréglages Ubuntu, cela peut nécessiter davantage de travail.

Pour gnome-settings-daemon, vous pouvez utiliser les instructions de mon (autre) message sur l'ancien i3 FAQ :

Vous devriez pouvoir obtenir une liste de clés liées avec les commandes suivantes:

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

Vous pouvez ensuite les supprimer en analysant une chaîne 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 ''

Vous pouvez également utiliser 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 "''"
3
Adaephon