Ubuntu не дает правильные коды клавиш для некоторых мультимедийных клавиш

Я только что установил Ubuntu 16.04 на свой ThinkPad T450s и по какой-то причине мультимедийные клавиши для регулировки громкости и яркости экрана не дают никаких кодов клавиш или клавиш (например, XF86AudioRaiseVolume). Но все остальные медиа-ключи дают правильные значения.

Что странно, так это то, что мультимедийные клавиши по-прежнему прекрасно работают в единстве и гноме, это просто проблема, когда я использую i3, потому что я не могу сопоставить клавиши регулировки громкости, чтобы изменить громкость.

Это то, что xev возвращает клавиши уменьшения громкости, увеличения громкости и отключения звука:

Убавить звук:

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 

Увеличить громкость:

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   

Отключение звука:

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 

Как видите, они все одинаковые. Поэтому я понятия не имею, как единство или гном могут отличить их друг от друга. Просто для справки я покажу вывод для выключения микрофона и выключения Wi-Fi медиа-клавиш от 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

И раньше я получал аналогичные результаты для клавиш регулировки громкости до установки Ubuntu (я использовал Arch).

Клавиши яркости тоже не работают, переопределяются ли они на каком-то низком уровне? Есть ли способ, которым я могу это исправить, чтобы они возвращали правильное значение, или есть какой-то другой способ, которым я могу заставить медиа ключи работать на Ubuntu?

Обновление: это то, что xev дает для громкости клавиш вверх и вниз, пока я бегу единство.

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

Когда работает единство, у меня также есть unity-settings-daemon, unity-panel-service а также unity-fallback-mount-helper, Может ли один из них поймать событие и добавить XF86? символы клавиш Ни один из них не работает в i3.

В ответ на @Adaephon у меня есть это в моей конфигурации 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

1 ответ

Решение

Похоже, что эти ключи уже захвачены другим приложением. Три сегмента продукции, которые вы получаете от xev связаны только с потерей и восстановлением фокуса окна xev, в то время как ключ захватывается иначе (см. мой пост на старом FAQ по i3).

Есть две вероятные причины, почему xev может показывать вывод, подобный этому, и связывание клавиш не работает:

  1. Сначала я бы проверил, есть ли ключи в вопросе - XF86AudioLowerVolume (keycode 122), XF86AudioRaiseVolume (код клавиши 123) и XF86AudioMute (код ключа) 121) - уже связаны с bindsym (или же bindcode) в вашей конфигурации i3. Может быть, это только связанная команда, которая не работает.

    (Обновление) Из фрагмента вашей конфигурации i3 это похоже на случай. Я думаю, что 16.04 использует PulseAudio по умолчанию, поэтому amixer может даже не быть установлен. Ты можешь использовать pactl изменить громкость на PulseAudio. Подражать вашему предыдущему amixer Настройки попробуйте это:

    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
    

    Вы также можете использовать 1 вместо toggle на set-sink-mute, если вы хотите включить звук только с помощью клавиш XF86AudioLowerVolume и XF86AudioRaiseVolume.

  2. Если это не так, какой-то другой инструмент захватывает эти клавиши. Один вероятный кандидат gnome-settings-daemon, unity-settings-daemon может быть другим. Кроме того, некоторые медиаплееры могут пытаться связать эти ключи глобально. Я предлагаю проверить вывод ps aux на свежем сеансе i3, чтобы увидеть, что автоматически запускается. Когда вы нашли преступника, у вас есть три основных варианта:

    • В большинстве случаев должна быть возможность отключить привязки клавиш. Вероятно, самое простое решение, если вы хотите продолжать использовать то, что захватывает ключи.
    • Заставь это работать правильно. Может случиться так, что программа, захватывающая клавишу, на самом деле должна делать то, что вы хотите сделать в любом случае (например, регулятор громкости), но по какой-то причине это не может. Например: программа пытается изменить громкость с помощью PulseAudio, в то время как вы фактически не используете PulseAudio.
    • Прекратите это начинать. Если вы включите его в автозапуск самостоятельно (например, exec заявление в вашей конфигурации i3), вы можете просто удалить его. Если он запускается автоматически из-за какой-то предустановки Ubuntu, может потребоваться дополнительная работа.

За gnome-settings-daemon Вы можете использовать инструкции из моего (другого) поста на старом i3 FAQ:

Вы должны быть в состоянии получить список связанных ключей с помощью следующих команд:

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

Затем вы можете сбросить их, задав строку 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 ''

Кроме того, вы также можете использовать 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 "''"
Другие вопросы по тегам