Як ключові коди відображаються на відповідні дії?


18

Вияснивши, як змінити відображення кодів сканування на ключові коди за допомогою udev, див. Це питання , мені було цікаво, як ці ключові коди (або події, якщо ви хочете) відображаються на відповідні дії.

Так, наприклад, якщо натиснути volume upна клавіатурі, надсилається код сканування, який потім буде перетворений на volumeupкод клавіші. Але як цей ключ ключа перехоплюється, збільшується гучність і відображається відповідне повідомлення?

Я здогадуюсь, що десь треба викликати сценарій, тому я хотів би знати, де такі сценарії.

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


3
Я не погоджуюся, наприклад, сповіщення дуже специфічне для Ubuntu, тому я хочу знати, як сповіщення отримано. Я здогадуюсь, що десь треба викликати сценарій, тому я хочу знати, де ці сценарії.
Герхард Бургер

2
Це дійсне специфічне для Ubuntu питання, оскільки спосіб обробки Ubuntu змінився за роки IIRC. Дуже цікаво дізнатися, яка послідовність подій в Ubuntu події, натиснувши гарячу клавішу, що викликає відповідні дії. Можливі цілі: користувацькі керування яскравістю , налагодження гарячих ключових проблем тощо
gertvdijk

2
@Seth Здається застарілим. HAL застарілий давно, з 10.04 . Також не вистачає інформації про те, як спрацьовують сповіщення на робочому столі.
gertvdijk

1
Сьогодні я натрапив на wiki.ubuntu.com/Hotkeys/Troubleshooting , який дає деякі приємні вказівки (є посилання на wiki.ubuntu.com/Hotkeys/Architecture, що дуже інформативно). Я думаю, що відповідь Стівена Остерміллера в правильному напрямку, але я хочу знайти ці сценарії та зможу їх змінити;)
Герхард Бургер

1
^^ ця інформація здається застарілою, тут немає в'язків клавіш під gnome-settings-daemon ... Хоча багато звернень до яскравості в розділі compiz (хоча я здогадуюсь про єдність?) Хто знає, як notify-osdпрацює? Я думаю, що саме тут надсилаються сповіщення про яскравість ...
Герхард Бургер

Відповіді:


6

Добре, знайшли це на https://help.ubuntu.com/community/MultimediaKeys

Коли ви натискаєте клавішу на клавіатурі, ядро ​​Linux генерує для нього неочищений код сканування (якщо він призначений). Кожен сканувальний код може бути відображений у ключовий код. Це на рівні ядра. X має (квазі) повний незалежний спосіб відображення ключів: X при запуску зчитує таблицю кодів ключів ядра, потім відображає код клавіші на свою незалежну таблицю кодів ключів (це те саме, що і ключові коди ядра, але різні :)). Тоді кожен код клавіш може бути відображений у ключовій формі, тобто рядку, який представляє ключ або пропонує дію. Таким чином, щоб наші ключі були повністю функціональними, їм потрібен код сканування / код коду ядра плюс код X / keyym X. Це може здатися дивним, але розробники 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

Особливо цей: введіть тут опис зображення

З нього видно, що існує "апаратний слухач ключів", який отримує форму DBus або HAL? Потім "витягує візуальний елемент із системи", який значки звуку та яскравості є у джерелі Notify-OSD, а потім робить звідти бульбашку.


Це все шалено заплутано, але наскільки я це розумію (поки що):

неочищений код сканування (наприклад, e016)> клавішний код (приклад 160)> keyym (напр. XF86AudioMute)> gnome-settings-daemon (ex. volume-up)> сигнал DBus> апаратний ключ-слухач для notify-osd (або інше) прослуховування програми)


Схоже, це кудись дістається! Позначений як CW з самого початку, так що я думаю, ви все ще вдосконалюєтесь? :)
gertvdijk

так, мені потрібно розглянути ще декілька, на схемі є багато запитань.
Матео

Ви, до речі, випадково внесли відповідь у вікі спільноти? Можливо, попросіть мода скасувати це ... О, і ці графіки, швидше за все, трохи застаріли, тому що HAL давно застарів ... Ну, принаймні, ми кудись потрапляємо: D
Герхард Бергер


@gertvdijk Я знаю, але було б соромно за всіх учасників, які він пропустить;)
Герхард Бургер

1

У більшості випадків запущених сценаріїв немає. Вони змушують надсилати події до менеджера вікон або демона налаштувань. Єдиний раз, коли мені відомо про сценарії в процесі, - це коли ви налаштовуєте власні прив’язки ключів. Для користувацьких вкладень клавіш можна додати командні рядки (виконувані файли або сценарії) та прив’язати їх до клавіш.

Ознайомтеся з цією відповіддю, яку я написав на запитання щодо резервного копіювання сполучень клавіш в Ubuntu: Де зберігаються комбінації клавіш GNOME? У мене є сценарій, який створює резервну копію або відновлює всі в'язки клавіш, включаючи власні клавіші. Якщо ви запустите скрипт, ви зможете побачити, де в dconf зберігаються зв'язки клавіш, і яка програма отримує сповіщення про ключову подію.


то як спрацьовують сповіщення на робочому столі?
Герхард Бургер

Я вважаю, що демон налаштування гнома відповідає за запуск, наприклад, у випадку гучності та яскравості.
Стівен Остерміллер

2
Я запустив ваш сценарій, але все, що здається, - це отримати ярлики, до яких можна отримати доступ із налаштуваннями системи> клавіатура> ярлики , я не знайшов посилання на яскравість, наприклад.
Герхард Бургер

класний сценарій для отримання клавіш розгортки.
Матео

0

Відповідь стосується водіїв .

Для взаємодії з операційною системою кожне обладнання повинно мати драйвер.

Цитуючи 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/


3
Ум ... я не думаю, що водії насправді не мають поняття про значення клавіші, яку я натискаю на клавіатурі. Деяким спеціальним пристроям гарячих клавіш у ноутбуках для цього може знадобитися драйвер - але це не охоплює звичайні мультимедійні гарячі клавіші, наприклад "збільшення гучності". Це повинно бути охоплене в більш поширеній області ядра / X / DE. Я також думаю, що посилання є дуже широкими щодо програмування драйверів пристроїв kerner.
gertvdijk

Я думаю, що для більшості сучасних клавіатур Ubuntu використовує evdevдрайвер, але я не бачу, як це було б корисно тут ...
Герхард Бургер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.