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

17

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

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

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

EDIT: Коды клавиш, о которых я упоминаю, не следует путать с кодами клавиш xev , но я также заинтересован в них;)

    
задан Gerhard Burger 16.01.2013 в 09:11
источник

3 ответа

5

Хорошо, нашел это на Ссылка

When you hit a key on your keyboard, the linux kernel generates a raw scancode for it (if it is assigned). Each scancode can be mapped to a keycode. This is at kernel level. X has a (quasi) total independent way of mapping keys: X reads the kernel keycode table at startup, then maps the keycode to its independent keycode table (it is the same as the kernel keycodes but different :)). Then each keycode can be mapped to a keysym, i.e. a string which represent a key or suggest an action. Thus to have our keys fully functional, they need a kernel scancode/keycode plus a X keycode/keysym. It may seem weird, but X developers have their reason to keep a separate keyboard mapping from the kernel. It is not difficult at all, just a quite tedious procedure.

Итак, коды клавиш сопоставлены с клавишами, так где же ключи? Я нашел и ответим на этот вопрос: Где я могу найти список всех X keysyms в наши дни? Поскольку мы говорим о клавишах тома, он будет найден в 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          */

Странно ... разные значения из чего-либо еще, может быть, есть несколько систем для обработки ключей? Ссылка

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

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

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

Посмотрите на NotifyOSD Ссылка

Если вы посмотрите на эти диаграммы: Ссылка

Особенно это:

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

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

raw scancode (например, e016) > код ключа (например, 160) > keysym (например, XF86AudioMute) > gnome-settings-daemon (например, volume-up) > Сигнал DBus > hardware-keys-listenener для уведомления-osd (или другого прослушивания программы)

    
ответ дан Mateo 13.04.2017 в 12:25
1

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

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

    
ответ дан Stephen Ostermiller 30.01.2013 в 21:53
0

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

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

Цитата Ссылка :

A driver drives, manages, controls, directs and monitors the entity under its command. What a bus driver does with a bus, a device driver does with a computer device (any piece of hardware connected to a computer) like a mouse, keyboard, monitor, hard disk, Web-camera, clock, and more.

Further, a “pilot” could be a person or even an automatic system monitored by a person (an auto-pilot system in airliners, for example). Similarly, a specific piece of hardware could be controlled by a piece of software (a device driver), or could be controlled by another hardware device, which in turn could be managed by a software device driver. In the latter case, such a controlling device is commonly called a device controller. This, being a device itself, often also needs a driver, which is commonly referred to as a bus driver.

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

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

Ссылки:

  • Если вы заинтересованы, я рекомендую вам прочитать эту серию на Драйвер устройств, состоящий из 17 хорошо написанных статей от linuxforu : Ссылка .

  • Вы можете прочитать конкретный документ, содержащий инструкции о том, как написать драйвер устройства для USB-клавиатуры: Ссылка

  • Если вы очень в восторге от драйверов устройств Linux, прочитайте книгу «Драйверы устройств Linux» , которая доступна в формате pdf бесплатно: Ссылка

ответ дан green 05.02.2013 в 21:23