После того, как выяснить , как изменить отображение кодов сканирования ключевых кодов с использованием udev
см этого вопроса , мне было интересно , как эти коды ключей (или события , если хотите) отображается на соответствующие действия.
Так, например, если вы нажмете volume upна клавиатуре, отправляется код сканирования, который затем будет преобразован в volumeup
код клавиши. Но как перехватить этот код клавиши, увеличить громкость и отобразить соответствующее уведомление?
Я предполагаю, что где-то должен быть вызван скрипт, поэтому я хотел бы знать, где находятся эти скрипты.
РЕДАКТИРОВАТЬ: коды клавиш, которые я упоминаю, не следует путать с xev
возвратами кодов клавиш , но я также заинтересован в них;)
notify-osd
работает? Я думаю, что именно здесь отправляются уведомления о яркости ...Ответы:
Хорошо, нашел это на https://help.ubuntu.com/community/MultimediaKeys
Итак, коды клавиш сопоставлены с ключами, так где же ключи? Я нашел и ответил на этот вопрос: где я могу найти список всех X ключей в эти дни? Поскольку речь идет о клавишах регулировки громкости, это можно найти в
XF86keysym.h
исходном коде, упомянутом в ответе.В этом файле на моем компьютере я нашел следующее для тома:
Странно ... отличные значения от чего-то еще, может быть, есть несколько систем для обработки ключей? 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
Особенно этот:
Это показывает, что есть «слушатель аппаратных ключей», который получает форму DBus или HAL? Затем он «извлекает визуальный элемент из системы», который значками звука и яркости находятся в источнике Notify-OSD, а затем создает пузырь оттуда.
Это все сумасшедшее смущение, но, насколько я понимаю (пока):
необработанный код сканирования (например, e016)> код ключа (например, 160)> keysym (например, XF86AudioMute)> gnome-settings-daemon (например, увеличение громкости)> сигнал DBus> аппаратный ключ-прослушиватель для notify-osd (или другой программа прослушивания)
источник
В большинстве случаев нет запущенных скриптов. Они вызывают отправку событий диспетчеру окон или демону настроек. Единственный раз, когда я знаю о сценариях в процессе, это когда вы настраиваете пользовательские привязки клавиш. Для пользовательских привязок клавиш вы можете добавить командные строки (исполняемые файлы или сценарии) и привязать их к ключам.
Пожалуйста, посмотрите ответ, который я написал на вопрос о резервном копировании сочетаний клавиш в Ubuntu: где хранятся сочетания клавиш GNOME? У меня есть сценарий, который создает резервную копию или восстанавливает все сочетания клавиш, в том числе пользовательские сочетания клавиш. Если вы запустите скрипт, вы увидите, где в dconf хранятся привязки клавиш, и какое приложение получает уведомление о событии ключа.
источник
Ответ относится к драйверам .
Каждое оборудование должно иметь драйвер для взаимодействия с операционной системой.
Цитирование 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/
источник
evdev
драйвер, но я не понимаю, как это было бы полезно здесь ...