Как коды клавиш сопоставляются с соответствующим действием?

После выяснения, как изменить отображение кодов сканирования на коды клавиш, используя udev, см. этот вопрос , мне было интересно, как эти коды клавиш (или события, если хотите) отображаются на соответствующее действие.

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

Я предполагаю, что где-то должен быть вызван скрипт, поэтому я хотел бы знать, где находятся эти скрипты.

РЕДАКТИРОВАТЬ: коды клавиш, которые я упоминаю, не следует путать с кодами клавиш xev, но я также заинтересован в них;)

18
задан 13 April 2017 в 15:24

3 ответа

В большинстве случаев нет запущенных скриптов. Они вызывают отправку событий диспетчеру окон или демону настроек. Единственный раз, когда я знаю о сценариях в процессе, это когда вы настраиваете пользовательские привязки клавиш. Для пользовательских привязок клавиш вы можете добавить командные строки (исполняемые файлы или скрипты) и привязать их к клавишам.

Пожалуйста, посмотрите ответ, который я написал на вопрос о резервном копировании сочетаний клавиш в Ubuntu: Где хранятся сочетания клавиш GNOME? У меня есть скрипт, который создает резервные копии или восстанавливает все сочетания клавиш, включая пользовательские сочетания клавиш , Если вы запустите скрипт, вы увидите, где в dconf хранятся сочетания клавиш, и какое приложение получает уведомление о событии ключа.

0
ответ дан 13 April 2017 в 15:24

Ответ касается Драйверов.

Каждые аппаратные средства должны иметь драйвер для взаимодействия с операционной системой.

Заключение в кавычки http://www.linuxforu.com/2010/11/understanding-linux-device-drivers/:

Драйвер управляет, управляет, управляет, направляет и контролирует объект при своей команде. Какой драйвер шины делает с шиной, драйвер устройства делает с компьютерным устройством (любая часть аппаратных средств, подключенных к компьютеру) как мышь, клавиатура, монитор, жесткий диск, веб-камера, часы, и т.д.

Далее, “пилот” мог быть человеком или даже автоматической системой, контролируемой человеком (система автопилота в авиалайнерах, например). Точно так же определенной частью аппаратных средств могла управлять часть программного обеспечения (драйвер устройства) или могло управлять другое устройство, которым в свою очередь мог управлять драйвер устройства программного обеспечения. В последнем случае такое управляющее устройство обычно называют контроллером устройства. Этому, будучи самим устройством, часто также нужен драйвер, который обычно упоминается как драйвер шины.

Устройство имеет регистр устройства, который хранит Управление/Биты состояния и Биты данных. Каждый раз, когда некоторые данные должны быть переданы, они обычно отправляются путем установки Битов данных.

Так, каждый раз, когда Вы нажимаете некоторую клавишу на своей клавиатуре, некоторые данные записаны на регистре. Те биты читаются драйвером устройства, и соответствующие меры выполняются. Это - короткое объяснение.

Ссылки:

  • Если бы Вам интересно, я рекомендовал бы считать этот ряд на Драйверах устройств, состоящих из 17 правильно написанных статей linuxforu: http://www.linuxforu.com/tag/linux-device-drivers-series/.

  • Можно прочитать определенный документ, содержащий инструкции относительно того, как записать драйвер устройства для клавиатуры USB: http://www.emntech.com/docs/USB_KeyBoard_Driver_eMNTech.pdf

  • Если Вы очень взволнованы драйверами устройств Linux, прочитайте книгу "Драйверы устройств Linux", который доступен как PDF бесплатно: http://lwn.net/Kernel/LDD3/

0
ответ дан 13 April 2017 в 15:24

Хорошо, нашел это на https://help.ubuntu.com/community/MultimediaKeys

Когда вы нажимаете клавишу на клавиатуре, ядро ​​Linux генерирует необработанный скан-код для него (если он назначен). Каждый скан-код может быть сопоставлен с кодом ключа. Это на уровне ядра. X имеет (квази) полностью независимый способ сопоставления ключей: X читает таблицу кодов ключей ядра при запуске, затем сопоставляет код ключа с его независимой таблицей кодов ключей (она такая же, как коды ключей ядра, но отличается :)). Затем каждый код ключа может быть сопоставлен с keyym, то есть строкой, которая представляет ключ или предлагает действие. Таким образом, чтобы наши ключи работали в полном объеме, им нужен скан-код ядра / код ключа плюс код ключа X / keysym. Это может показаться странным, но у разработчиков X есть причина оставить отдельную раскладку клавиатуры в ядре. Это совсем не сложно, просто довольно утомительная процедура.

Значит, коды клавиш сопоставлены с ключами, так где же ключи? Я нашел и ответил на этот вопрос: Где я могу найти список всех X клавиш в наши дни? Поскольку речь идет о клавишах громкости, его можно найти в XF86keysym.h в исходном коде, упомянутом в ответ.

В этом файле на моем компьютере я обнаружил следующее для тома:

#define XF86XK_AudioLowerVolume 0x1008FF11   /* Volume control down        */
#define XF86XK_AudioMute    0x1008FF12   /* Mute sound from the system */
#define XF86XK_AudioRaiseVolume 0x1008FF13   /* Volume control up          */

Странно ... отличается от других значений, может быть, есть несколько систем для обработки ключей? http://crunchbang.org/forums/viewtopic.php?id=16656


Я использую Xubuntu, и для управления ключами мне нужно сопоставить действия вручную (как это Как я могу изменить свои сочетания клавиш в xubuntu? ). Однако уведомления кажутся независимыми, как будто они реагируют на нажатие клавиши и действуют соответственно. Это может означать, что другие программы в Ubuntu настроены таким образом, поэтому нет необходимости сопоставлять скрипты с клавишами.

Так что я совершенно уверен, что программы теперь подхватывают ключ (так что никаких скриптов не найдено).

В Xubuntu у меня была эта проблема с Pulse Audio и использованием пользовательских скриптов для изменения громкости. Казалось, что Pulse перехватывает клавишу Mute, клавиша Mute отключает звук Alsa и PulseAudio, но включает только Alsa , созданный для интересные обходные пути.


Проверьте это о NotifyOSD https://wiki.ubuntu.com/NotifyOSD#Volume_changes

Если вы посмотрите эти диаграммы: https: // wiki.ubuntu.com/NotifyOSD#Architecture

Особенно этот: enter image description here

Это показывает, что есть «слушатель аппаратных ключей», который получает форму DBus или HAL? Затем он «извлекает визуальный элемент из системы», в котором значки звука и яркости находятся в источнике Notify-OSD, а затем создает пузырь оттуда.


Это все смущает, но насколько я понимаю (пока):

raw scancode (ex. e016)> keycode (ex. 160)> keysym (ex. XF86AudioMute )> gnome-settings-daemon (например, увеличение громкости)> сигнал DBus> слушатель аппаратных ключей для notify-osd (или прослушивания другой программы)

0
ответ дан 13 April 2017 в 15:24

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

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