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 volumeup
code 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 xev
retours de codes clés , mais je suis également intéressé par ceux-ci;)
notify-osd
marche? Je pense que c'est là que les notifications de luminosité sont envoyées ...Réponses:
Ok, trouvé ceci sur https://help.ubuntu.com/community/MultimediaKeys
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.h
dans le code source mentionné dans la réponse.Dans ce fichier sur mon ordinateur, j'ai trouvé ce qui suit pour le volume:
É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:
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)
la source
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é.
la source
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 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:
Si vous êtes intéressé, je vous recommande de lire cette série sur les pilotes de périphériques, composée de 17 articles bien écrits par linuxforu : http://www.linuxforu.com/tag/linux-device-drivers-series/ .
Vous pouvez lire le document spécifique contenant des instructions sur la façon d'écrire un pilote de périphérique pour clavier USB: http://www.emntech.com/docs/USB_KeyBoard_Driver_eMNTech.pdf
Si vous êtes très enthousiasmé par les pilotes de périphériques Linux, lisez le livre "Linux Device Drivers" qui est disponible en pdf gratuitement: http://lwn.net/Kernel/LDD3/
la source
evdev
pilote, mais je ne vois pas en quoi cela serait utile ici ...