Quel est le chemin réel des actions lorsque j’appuie sur une touche du clavier et que cela apparaît sur un shell?

J’utilise un clavier usb générique, Linux 2.6.27 avec gnome desktop, gnome-terminal et bash shell. Je suis intéressé de savoir ce qui se passe dans le logiciel. Comment les caractères spéciaux de mon clavier sont-ils interprétés avec un encodage en caractères et d’où proviennent les images des personnages?

La couche d’entrée Linux avec les pilotes USB reçoit des scancodes (essentiellement “KEY 1 DOWN” “KEY 1 UP”) du clavier.

X utilise sa keymap pour convertir les codes de calcul en codes clés et en événements d’entrée X.

La méthode de saisie GTK convertit la séquence des événements d’entrée en caractères unicodes composés.

Gnome-terminal les encode dans UTF-8 pour le shell.

Le Shell s’en fiche. il sait juste qu’il s’agit d’un encodage multi-octets.

Le shell renvoie le texte codé sur plusieurs octets via le TTY.

Gnome-terminal décode le texte entrant et détermine les points de code unicode.

Gnome-terminal dessine des caractères en utilisant les fonctionnalités de GTK +.

GTK + utilise Pango pour rendre le texte et appelle la bibliothèque X pour dessiner les pixels sur l’écran.

Le serveur X dessine des caractères dans le tampon d’écran et la carte vidéo les affiche.

Voici ma tentative de diagramme:

alt text http://img.zgserver.com/encoding/system_layers.png

Regardez-le en couches. Le premier est le matériel, et un pilote de périphérique dans le kernel Linux aura des méthodes spécifiques pour contrôler et répondre au clavier via les registres d’état du périphérique et les gestionnaires d’interruption, par exemple.

Ensuite, il y a le kernel Linux, qui aura une méthode de chargement du pilote approprié pour chaque morceau de matériel détecté au démarrage. Une fois chargé, le pilote de périphérique est compatible avec certaines interfaces du kernel, fournissant des données du périphérique au kernel et inversement.

En dehors du kernel, à un certain niveau, le pilote de périphérique et le matériel sont visibles, généralement sous la forme d’une liste dans le répertoire / dev. Un logiciel, comme un émulateur de terminal, qui doit utiliser un périphérique aura access au périphérique via une entrée dans / dev.

La communication entre une application de niveau utilisateur et le périphérique se produit désormais via une série d’opérations de lecture / écriture et d’ioctl. Celles-ci s’insèrent dans le kernel (voir les pages de manuel pour plus de détails), à quel point le kernel communique avec le pilote de périphérique chargé ci-dessus.

L’émulateur de terminal affichera les caractères à mesure que vous les tapez (dans la plupart des cas) et à mesure qu’ils sont reçus du périphérique (dans la plupart des cas) en utilisant des fonts accessibles, situées à différents endroits en fonction de l’application. (Je parle en général ici parce que je ne connais pas spécifiquement Gnome).

est-ce que cela aide?