2008-09-18 4 views
3

Console de texte GNU/Linux, X11 non impliqué, en effet même pas installé. Le clavier est la disposition des États-Unis, keymap US default. Noyau version 2.20.x ou ultérieure.Scancodes de clavier?

Une application écrite en C obtient une entrée au clavier en mode de traduction , c'est-à-dire XLATE ou UNICODE. Lorsqu'une touche est , l'application reçoit la chaîne de touches correspondante. À titre d'exemple, vous appuyez sur F1, l'application lit "\033[[A". Avant que le noyau n'envoie la chaîne de touches à l'application, il faut que sache quelle touche est enfoncée, c'est-à-dire qu'il doit connaître son code . Dans l'exemple F1 ci-dessus, le code de scission pour la touche est 59 ou 0x3b. C'est-à-dire que même lorsque le clavier est en mode traduction, les codes sont conservés quelque part en mémoire. Comment l'application peut-elle y accéder sans passer le clavier au mode RAW ou MEDIUMRAW? Un extrait de code aiderait.

Répondre

1

Bien sûr, le code que vous voulez regarder se trouve dans kbd-1.12.tar.bz2, qui est le paquet source du paquet 'kbd'. Le paquet 'kbd' fournit des outils tels que 'dumpkeys', 'showkeys' et 'loadkeys', qui sont utiles pour regarder le mappage de clavier en cours, vérifier quelles clés émettent quels codes et charger un nouveau mapping.

Vous devrez communiquer avec le noyau via ioctls, et c'est assez compliqué, donc je vous recommande de lire la source de ce paquet pour voir comment c'est fait.

Voici un lien vers l'archive: kbd-1.12.tar.bz2 (618K).

0

à un terminal je suis entré dans

dumpkeys -f > test.txt 

et il y avait beaucoup d'informations détaillées, y compris:

keycode 29 = Contrôle
...
chaîne F1 = « \ 033 [[A "
chaîne F2 =" \ 033 [[B "
chaîne F3 =" \ 033 [[C "
chaîne F4 =" \ 033 [[D "
chaîne F5 = "\ 033 [[E"
chaîne F6 = "\ 033 [17 ~"
chaîne F7 = "\ 033 [18 ~"
chaîne F8 = "\ 033 [19 ~"
...
chaîne Avant = "\ 033 [5 ~"
chaîne suivante = "\ 033 [6 ~"
chaîne Macro = "\ 033 [M"
chaîne Pause = "\ 033 [P"

Dumpkeys a été inclus par défaut avec ma distribution. Mais vous devriez être capable de le trouver dans ce que jerub posté. Je commencerais par regarder kbd-1.12/src/loadkeys.y.

Il semble que le noyau soit responsable de la conservation de ces données, et peut rapporter à ceux qui savent comment demander.

0

Vous voulez peut-être regarder kbdev ou evdev (regardez votre fichier Documentation/input/input.txt dans votre répertoire source du noyau pour les démarreurs.) Cela fonctionnerait pour l'accès à la console.

2

Les chances sont que vous émettiez les commandes ioctl sur le mauvais descripteur de fichier, vérifiez les codes d'erreur revenant de ioctl et tcsetattr.

Vous devez ouvrir le périphérique de console, puis émettre vos commandes de traduction du clavier sur ce périphérique. Vous devez essentiellement imiter ce que fait le serveur X.

Ceci est un lien vers le code source sur codesearch.google.com.

+0

Pourriez-vous s'il vous plaît remplacer le tinyurl par l'URL réelle? Le tinyurl spécifié ne fonctionne pas. – slashmais