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
может показывать вывод, подобный этому, и связывание клавиш не работает:
Сначала я бы проверил, есть ли ключи в вопросе - 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.Если это не так, какой-то другой инструмент захватывает эти клавиши. Один вероятный кандидат
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 "''"