i3: Как использовать мультимедийные клавиши, которые отображаются на отдельном устройстве ввода?

682
dpkoch

Я установил оконный менеджер 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события нажатия клавиш etc не регистрируются.

Если я 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файле, но это не работает. Я отредактировал выше, чтобы исправить это, но это не было корнем проблемы.

1

2 ответа на вопрос

1
dpkoch

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

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

Обновление: запуск i3 только с `exec i3` в моем файле` ~ / .xinitrc` вызывал некоторые проблемы с dbus, из-за которых такие вещи, как мой терминал открывались за 6 секунд. Для тех, кто может следовать этому методу, изменение содержимого `~ / .xinitrc` на` exec dbus-launch --exit-with-session i3`, похоже, исправило это dpkoch 5 лет назад 0
0
dirkt

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

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

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

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

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

Хорошая информация, спасибо. Я не смог выяснить многое с `xlsclients`, так как он, казалось, просто перечислял активные приложения в моем текущем сеансе i3. Однако, используя `ps`, я заметил, что` gnome-shell` все еще работает, я предоставил [ответ] (https://superuser.com/a/1361387/945020), объясняющий, как я справился с этим dpkoch 5 лет назад 0