1

Я установил оконный менеджер i3 вместе с рабочим столом GNOME на Ubuntu-GNOME 16.04. У меня проблемы с настройкой мультимедийных клавиш на клавиатуре Logitech G610.

В моем файле ~/.config/i3/config :

bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +5%
bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -5%
bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute 0 toggle

и подтвердили, что эти команды работают в терминале. Проблема, которую я вижу, состоит в том, что события нажатия клавиши XF86AudioRaiseVolume т.д. Не регистрируются.

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

MappingNotify event, serial 30, synthetic NO, window 0x0,
    request MappingKeyboard, first_keycode 8, count 248

KeymapNotify event, serial 31, synthetic NO, window 0x0,
    keys:  1   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

и не сообщается ни о каком коде ключа, как о других ключах. Однако, используя sudo showkey -k , я получаю следующие ожидаемые значения:

keycode 113 press
keycode 113 release
keycode 115 press
keycode 115 release
keycode 114 press
keycode 114 release

xinput , я вижу следующее

⎡ Virtual core pointer                      id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ Logitech MX Master                        id=12   [slave  pointer  (2)]
⎜   ↳ AlpsPS/2 ALPS DualPoint TouchPad          id=15   [slave  pointer  (2)]
⎜   ↳ AlpsPS/2 ALPS DualPoint Stick             id=16   [slave  pointer  (2)]
⎣ Virtual core keyboard                     id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ Power Button                              id=6    [slave  keyboard (3)]
    ↳ Video Bus                                 id=7    [slave  keyboard (3)]
    ↳ Power Button                              id=8    [slave  keyboard (3)]
    ↳ Sleep Button                              id=9    [slave  keyboard (3)]
    ↳ Logitech Gaming Keyboard G610             id=10   [slave  keyboard (3)]
    ↳ Logitech Gaming Keyboard G610             id=11   [slave  keyboard (3)]
    ↳ Dell WMI hotkeys                          id=13   [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard              id=14   [slave  keyboard (3)]
    ↳ DELL Wireless hotkeys                     id=17   [slave  keyboard (3)]

где клавиатура Logitech отображается как два устройства. Запуск xinput list-props 10 и xinput list-props 11 Я вижу, что первый список отображается на /dev/input/event8 , а второй - на /dev/input/event9 .

Если я запускаю xinput test 10 я вижу, что первый список для моей клавиатуры реагирует на все обычные клавиши клавиатуры, но не на клавиши мультимедиа, в то время xinput test 11 реагирует только на клавиши мультимедиа:

key press   121 
key release 121 
key press   123 
key release 123 
key press   122 
key release 122

(Они отключены на 8 из вывода showkey , но, видимо, это ожидаемо. Кроме того, эти значения соответствуют выводу сопоставления с помощью xmodmap -pke , то есть keycode 121 = XF86AudioMute NoSymbol XF86AudioMute). Запуск sudo evtest /dev/input/event8 и sudo evtest /dev/input/event9 дают аналогичные результаты.

Итак, мое понимание процесса между нажатием клавиши и обработкой довольно размыто, но, возможно, тот факт, что обычные клавиши и клавиши мультимедиа находятся на разных устройствах ввода, не позволяет событиям нажатия клавиши мультимедиа проходить в сеанс X (как свидетельствует не появившись на xev?) и, следовательно, не получить до i3? Это отлично работает для рабочего стола GNOME, так что мне нужно что-то настроить, чтобы они работали на i3? Я в растерянности из-за того, как действовать отсюда, любая помощь будет принята с благодарностью.

РЕДАКТИРОВАТЬ

Первоначально у меня были кавычки вокруг команд в моем файле ~/.config/i3/config , но это не работает. Я отредактировал выше, чтобы исправить это, но это не было корнем проблемы.

2 ответа2

1

Основываясь на информации, предоставленной в предыдущем ответе, я запустил ps и заметил, что gnome-session запущен, хотя я не входил на рабочий стол GNOME после загрузки и входил только в i3. Я подозревал, что сессия гнома крала события, но, как мне показалось, снятие этих сочетаний клавиш в настройках гнома ничего не изменило.

Мое решение состояло в том, чтобы загрузить непосредственно в tty-сессию, следуя инструкциям здесь, чтобы gnome-session не запускалась. Я создал файл ~/.xinitrc содержащий одну строку exec i3 , после загрузки я захожу в терминал tty и запускаю startx для запуска i3. С этим методом GNOME не работает, и мои медиа-ключи теперь работают.

0

Частичный ответ:

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

Событие MappingNotify может указывать на то, что какое-то приложение реагирует на клавиши мультимедиа. В частности, если вы получаете FocusOut и FocusIn которые вы не показывали нам, то какое-то другое приложение действует на них точно.

Теперь это может быть оконный менеджер i3 с настроенными вами ключами или что-то еще. Итак, первое, что нужно проверить, это удалить или закомментировать ваши привязки i3, протестировать снова и посмотреть, получаете ли вы по-прежнему события Mapping/Focus.

Если да, то следующий шаг - выяснить, какое приложение его крадет. Используйте ps , xlsclients и т.д., Чтобы сузить его. Один из способов - убивать / отключать приложения, пока они больше не будут украдены.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .