Я только что установил 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
Похоже, что рассматриваемые ключи уже захватываются глобально некоторым другим приложением. Три сегмента вывода Вы добираетесь от xev
только связаны с xev выпуском окна и reaquireing фокус, в то время как ключ захватывается иначе (См. мое сообщение на старом i3 FAQ).
Существует две вероятных причины, почему xev
мог бы показать вывод как этот, и привязка клавиш не работает:
Сначала я проверил бы, ли рассматриваемые ключи - 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.
Если это не так некоторый другой инструмент захватывает те ключи. Один вероятный кандидат gnome-settings-daemon
, unity-settings-daemon
мог бы быть другой. Кроме того, некоторые медиаплееры могут попытаться связать эти ключи глобально. Я предлагаю проверить вывод ps aux
на новой i3 сессии для наблюдения, что автоматически запускается. При нахождении преступника, у Вас есть по существу три опции:
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 "''"