Comment les codes clés sont-ils associés à l'action appropriée?


18

Après avoir compris comment changer le mappage des codes de numérisation en codes clés à l'aide de udev, consultez cette question , je me demandais comment ces codes clés (ou événements si vous voulez) sont mappés à l'action appropriée.

Ainsi, par exemple, si vous appuyez volume upsur sur votre clavier, un code de numérisation est envoyé qui sera ensuite converti en volumeupcode clé. Mais comment ce code clé est-il intercepté, le volume est-il augmenté et la notification appropriée est-elle affichée?

Je suppose que quelque part un script doit être appelé, donc j'aimerais savoir où sont ces scripts.

EDIT: Les codes clés que je mentionne ne doivent pas être confondus avec les xevretours de codes clés , mais je suis également intéressé par ceux-ci;)


3
Je ne suis pas d'accord, par exemple, la notification est très spécifique à Ubuntu, donc je veux savoir comment la notification a été envoyée. Je suppose que quelque part un script doit être appelé, donc je veux savoir où sont ces scripts.
Gerhard Burger

2
C'est une question valide spécifique à Ubuntu car la façon dont Ubuntu gère cela a changé au cours des années IIRC. Il est très intéressant de savoir quelle est la séquence d'événements dans Ubuntu lorsque l'événement appuie sur un raccourci déclenchant les actions appropriées. Objectifs possibles: contrôles de luminosité personnalisés , débogage des problèmes de touches de raccourci, etc.
gertvdijk

2
@Seth semble obsolète. HAL est obsolète depuis longtemps, depuis le 10.04 . Il manque également des informations sur le déclenchement des notifications sur le bureau.
gertvdijk

1
Aujourd'hui, je suis tombé sur wiki.ubuntu.com/Hotkeys/Troubleshooting , qui donne de bons pointeurs (il y a un lien vers wiki.ubuntu.com/Hotkeys/Architecture qui est très informatif). Je pense que la réponse de Stephen Ostermiller est dans la bonne direction, mais je veux trouver ces scripts et pouvoir les changer;)
Gerhard Burger

1
^^ cette information semble être obsolète, pas de raccourcis clavier sous gnome-settings-daemon ici ... Beaucoup de hits pour la luminosité sous la section compiz (je suppose pour l'unité?) Qui sait comment ça notify-osdmarche? Je pense que c'est là que les notifications de luminosité sont envoyées ...
Gerhard Burger

Réponses:


6

Ok, trouvé ceci sur https://help.ubuntu.com/community/MultimediaKeys

Lorsque vous appuyez sur une touche de votre clavier, le noyau Linux génère un scancode brut pour lui (s'il est attribué). Chaque scancode peut être mappé sur un code clé. C'est au niveau du noyau. X a une façon (quasi) totale indépendante de mapper les clés: X lit la table des codes de clés du noyau au démarrage, puis mappe le code de clés sur sa table de codes de clés indépendante (c'est la même chose que les codes de clés du noyau mais différent :)). Ensuite, chaque code de clé peut être mappé sur un symbole de clé, c'est-à-dire une chaîne qui représente une clé ou suggère une action. Ainsi, pour que nos clés soient pleinement fonctionnelles, elles ont besoin d'un scancode / keycode du noyau plus un X keycode / keysym. Cela peut sembler étrange, mais les développeurs X ont leur raison de garder un mappage de clavier distinct du noyau. Ce n'est pas difficile du tout, juste une procédure assez fastidieuse.

Donc, les codes-clés sont mappés à ceux de keysym, alors où sont les keysym? J'ai trouvé et répondu à cette question: Où puis-je trouver une liste de tous les X keysymes de nos jours? Puisque nous parlons des touches de volume, elles se trouveraient XF86keysym.hdans le code source mentionné dans la réponse.

Dans ce fichier sur mon ordinateur, j'ai trouvé ce qui suit pour le volume:

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

Étrange ... valeurs différentes de toute autre chose, peut-être qu'il existe plusieurs systèmes pour gérer les clés? http://crunchbang.org/forums/viewtopic.php?id=16656


J'utilise Xubuntu, et pour contrôler les touches, je dois mapper les actions manuellement (comme ceci Comment changer mes raccourcis clavier dans xubuntu? ). Cependant, les notifications semblent indépendantes comme si elles prenaient appui sur la touche et agissaient en conséquence. Cela peut signifier que d'autres programmes dans Ubuntu sont configurés de cette façon, il n'est donc pas nécessaire de mapper les scripts aux touches.

Je suis donc tout à fait sûr que les programmes récupèrent maintenant la clé (donc pas de scripts à trouver).

Dans Xubuntu, j'ai eu ce problème avec Pulse Audio et en utilisant des scripts personnalisés pour changer le volume, il semblait que Pulse interceptait la touche Muet, la touche Muet coupe Alsa et PulseAudio, mais seulement Muhammad Alsa a fait des contournements intéressants.


Découvrez ceci sur NotifyOSD https://wiki.ubuntu.com/NotifyOSD#Volume_changes

Si vous regardez un de ces diagrammes: https://wiki.ubuntu.com/NotifyOSD#Architecture

Surtout celui-ci: entrez la description de l'image ici

Cela montre qu'il existe un "écouteur de clés matérielles" qui reçoit le formulaire DBus ou HAL? Il "récupère ensuite l'élément visuel du système" dont les icônes de son et de luminosité sont dans la source de Notify-OSD, puis fait la bulle à partir de là.


Tout cela est complètement déroutant, mais pour autant que je le comprenne (jusqu'à présent):

scancode brut (ex. e016)> keycode (ex. 160)> keysym (ex. XF86AudioMute)> gnome-settings-daemon (ex. volume-up)> DBus signal> hardware-keys-listener for notify-osd (ou autre écoute de programme)


On dirait que ça arrive quelque part! Marqué comme CW depuis le début, donc je suppose que vous vous améliorez toujours? :)
gertvdijk

oui, je dois approfondir, le diagramme contient beaucoup de points d'interrogation.
Mateo

En passant, avez-vous accidentellement fait une réponse wiki communautaire? Peut-être demander à un mod de le défaire ... Oh et ces graphiques sont probablement un peu obsolètes, car HAL est obsolète depuis longtemps ... Eh bien au moins nous arrivons quelque part: D
Gerhard Burger

@GerhardBurger Il
gertvdijk

@gertvdijk Je sais, mais ce serait dommage pour tous les votes positifs qu'il va manquer;)
Gerhard Burger

1

Dans la plupart des cas, aucun script n'est exécuté. Ils provoquent l'envoi d'événements au gestionnaire de fenêtres ou au démon de paramètres. Le seul moment où je suis au courant des scripts dans le processus est lorsque vous configurez des liaisons de touches personnalisées. Pour les raccourcis clavier personnalisés, vous pouvez ajouter des lignes de commande (exécutables ou scripts) et les associer à des clés.

Veuillez voir cette réponse que j'ai écrite à une question sur la sauvegarde des raccourcis clavier dans Ubuntu: Où sont stockés les raccourcis clavier GNOME? J'ai un script qui sauvegarde ou restaure tous les raccourcis clavier, y compris les raccourcis clavier personnalisés. Si vous exécutez le script, vous pouvez voir où dans dconf les raccourcis clavier sont stockés et quelle application est notifiée de l'événement clé.


alors comment les notifications du bureau sont-elles déclenchées?
Gerhard Burger

Je crois que le démon de paramétrage gnome est responsable du déclenchement de ceux-ci dans le cas du volume et de la luminosité par exemple.
Stephen Ostermiller

2
J'ai exécuté votre script, mais tout ce qu'il semble faire est d'obtenir les raccourcis auxquels vous pouvez accéder avec Paramètres système> Clavier> Raccourcis , je n'ai trouvé aucune référence à la luminosité par exemple.
Gerhard Burger

script cool pour obtenir des touches de shoutcut.
Mateo

0

La réponse concerne les pilotes .

Chaque matériel doit avoir un pilote pour interagir avec le système d'exploitation.

Citant http://www.linuxforu.com/2010/11/understanding-linux-device-drivers/ :

Un pilote conduit, gère, contrôle, dirige et surveille l'entité sous son commandement. Ce qu'un pilote de bus fait avec un bus, un pilote de périphérique le fait avec un périphérique informatique (tout matériel connecté à un ordinateur) comme une souris, un clavier, un moniteur, un disque dur, une webcam, une horloge, etc.

De plus, un «pilote» pourrait être une personne ou même un système automatique surveillé par une personne (un système de pilote automatique dans les avions de ligne, par exemple). De même, un matériel spécifique pourrait être contrôlé par un logiciel (un pilote de périphérique), ou pourrait être contrôlé par un autre périphérique matériel, qui à son tour pourrait être géré par un pilote de périphérique logiciel. Dans ce dernier cas, un tel dispositif de contrôle est communément appelé contrôleur de périphérique. Ceci, étant un périphérique lui-même, a souvent besoin d'un pilote, communément appelé pilote de bus.

Un appareil possède un registre d'appareil qui stocke les bits de contrôle / état et les bits de données. Chaque fois que certaines données doivent être transférées, elles sont généralement envoyées en définissant les bits de données.

Ainsi, chaque fois que vous appuyez sur une touche de votre clavier, certaines données sont écrites sur le registre. Ces bits sont lus par le pilote de périphérique et l'action appropriée est effectuée. Ceci est la courte explication.

Liens:


3
Uhm ... Je ne pense pas que les conducteurs aient réellement une idée de la signification de la touche sur laquelle j'appuie sur mon clavier. Certains périphériques de raccourcis clavier spéciaux dans les ordinateurs portables peuvent avoir besoin d'un pilote pour cela, mais cela ne couvre pas les raccourcis clavier multimédias classiques comme "augmentation du volume". Cela doit être couvert dans une zone plus commune du noyau / X / DE. Je pense également que les références sont très larges sur la programmation du pilote de périphérique Linux kerner.
gertvdijk

Je pense que pour la plupart des claviers modernes, Ubuntu utilise le evdevpilote, mais je ne vois pas en quoi cela serait utile ici ...
Gerhard Burger
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.