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

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

Что странно, так это то, что клавиши мультимедиа по-прежнему прекрасно работают в unity и gnome, это просто проблема, когда я использую 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
2
задан 12 May 2016 в 02:28

1 ответ

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

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

  1. Сначала я проверил бы, ли рассматриваемые ключи - XF86AudioLowerVolume (код клавиши 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 "''"
3
ответ дан 12 May 2016 в 12:28
  • 1
    Я имею в виду, изменяют устройство загрузки от SDD до жесткого диска. – Gayan Weerakutti 11 October 2017 в 01:07

Другие вопросы по тегам:

Похожие вопросы: