Voir aussi la section quelques détails sur le fonctionnement des terminaux.
Chaque terminal est relié à un port série sur l'ordinateur hôte (souvent un simple PC). Les ports ont les noms suivants : ttyS0, ttyS1, ttyS2, etc. Ils sont représentés par des fichiers spéciaux dans le répertoire /dev (device : périphérique). /dev/ttyS0 correspond au COM1 sous DOS ou Windows. ttyS1 est le COM2, etc. Voyez fichiers spéciaux pour les terminaux pour plus de détails sur ceux-ci et les "périphériques" connexes tels que cua.
Quand l'ordinateur hôte démarre il lance le programme getty (voyez le HOWTO Serial 4.1 et 7.2) sur chaque port série qui y possède un terminal (ainsi qu'il est spécifié dans le fichier /etc/inittab). Le programme getty lance le programme "login" pour que les gens puissent se logger. Une invite "login:" apparaît à l'écran. Les gens sur le terminal se loggent (après avoir donné leur mot de passe) et ont alors accès à l'ordinateur. Quand il est temps d'éteindre le terminal, on se délogge en général et on éteint le terminal. Voyez restrictions sur le login à propos de la restriction sur les logins (avec la permission pour l'utilisateur root de se logger sur un terminal).
Si on regarde quelqu'un taper sur un terminal, les lettres tapées apparaissent simultanément sur l'écran. Une personne naïve pourrait penser que ce qu'on tape est envoyé directement du clavier à l'écran avec une copie dirigée vers l'ordinateur (de manière half-duplex, voir le paragraphe suivant). Ce qui se passe généralement est que ce qui est tapé au clavier est envoyé directement à l'ordinateur hôte uniquement qui en retour renvoie au terminal chaque caractère qu'il reçoit (ce qu'on appelle full-duplex). Dans certains cas (comme les mots de passe ou des commandes brutes d'éditeurs) les lettres tapées ne sont pas renvoyées.
Full-duplex veut dire qu'il y a deux liens de communications unidirectionnels. Le full-duplex est la norme de fait sur les terminaux. Le half-duplex est la moitié d'un duplex, ce qui veut dire qu'il n'y a qu'un lien de communication unidirectionnel. Ce lien doit être partagé par les communications allant dans les deux directions et on ne peut utiliser qu'une direction à la fois. Dans ce cas l'ordinateur n'est pas en mesure de répéter les caractères que vous tapez (et que vous lui envoyez) et par conséquent le terminal doit aussi envoyer directement sur son écran chaque caractère que vous tapez. Certains terminaux possèdent un mode de fonctionnement half-duplex qui est rarement utilisé.
L'image sur un tube à électrons s'évanouira presque instantanément à moins qu'elle ne soit réaffichée fréquemment sur l'écran par un faisceau d'électrons lancés sur la face du tube. Puisque que le texte envoyé à un terminal doit rester sur l'écran, l'image de l'écran doit être stockée dans les puces mémoire du terminal et le faisceau d'électrons doit balayer l'écran de façon répétée (disons 60 fois par seconde) pour maintenir l'image. Voyez mémoire du terminal pour plus de détails.
Le terminal est sous le contrôle de l'ordinateur. L'ordinateur envoie au terminal non seulement du texte pour afficher ce dernier sur l'écran mais aussi des commandes que le terminal exécute. Ce sont des codes de contrôle (octets) et des séquences d'échappement. Par exemple, le code de contrôle CR (retour chariot) déplace le curseur sur le côté gauche de l'écran. Une certaine séquence d'échappement (plusieurs octets dans lesquels le premier octet est le code de contrôle d'"échappement") peut déplacer le curseur à l'emplacement de l'écran spécifié par les paramètres placés dans la séquence d'échappement.
Les premiers terminaux n'avaient que peu de telles commandes mais les terminaux modernes en ont des centaines. L'apparence de l'affichage peut être modifiée à certains endroits : fort, faible, souligné, clignotant et vidéo inverse. Un haut-parleur dans un terminal peut émettre un "cliquetis" quand une touche est pressée ou émettre un bip si une erreur s'est produite. Les touches de fonctions peuvent être programmées pour des utilisations spéciales. Des polices variées peuvent exister. On peut faire défiler l'affichage vers le haut ou vers le bas. On peut effacer des parties spécifiques de l'affichage. On peut utiliser divers types de contrôle de flux pour arrêter le flux de données quand les octets sont envoyés au terminal plus rapidement que le terminal ne peut le supporter. Il y en a bien plus, que vous découvrirez en parcourant une notice de terminal très technique ou à travers les liens Internet de la liste des séquences d'échappement.
Alors que les terminaux faits pour les États-Unis utilisaient tous le même code ASCII pour l'alphabet (sauf les terminaux IBM qui utilisaient EBCDIC), il n'utilisaient malheureusement pas tous les mêmes séquences d'échappement. Ceci s'est produit même après que plusieurs normes ANSI (et ISO) aient été établies puisque ces normes n'ont jamais été suffisamment matures. De plus, les vieux terminaux n'avaient pas les possibilités des nouveaux terminaux. Ceci pouvait poser des problèmes. Par exemple, l'ordinateur pouvait envoyer une séquence d'échappement à un terminal lui disant de séparer l'écran en deux fenêtres de taille spécifiée, sans réaliser que le terminal était incapable de le faire.
Pour surmonter ces problèmes une base de données appelée "termcap" (maintenant "terminfo") a été mise en place. Cette base de données réside dans certains fichiers sur l'ordinateur et en une partie (quelquefois le fichier entier) pour chaque modèle de terminal. Pour chaque modèle (comme le VT100) une liste des capacités est fournie, avec une liste de certaines séquences d'échappement disponibles et ce qu'elles font. Par exemple blink=\E5m veut dire que pour faire clignoter le curseur, il faut envoyer au terminal : Escape 5 m. Voyez la section termcap et terminfo (détaillés) pour plus de détails. Les applications peuvent utiliser cette base de données en appelant certaines fonctions de la bibliothèque C. Un grand ensemble de tels programmes (il y en a plus de 200) est appelé "ncurses" et ils sont listés sur la page de manuel de "ncurses".
La variable d'environnement TERM décrit le type de terminal que Linux croit que vous utilisez. Certaines applications l'utilisent pour regarder les capacités dans la base de données terminfo et par conséquent TERM doit être positionnée correctement. Mais que l'ordinateur connaisse les capacités du terminal n'est qu'une partie du chemin vers une interface correcte.
Pour que les octets affluent de l'ordinateur vers le terminal, le terminal doit être configuré pour recevoir les octets à la même vitesse (en bits par seconde) qu'ils sont envoyés du terminal. Si on configure le terminal pour recevoir à 19200 bauds et que l'ordinateur envoie des caractères à 9600 bauds, on ne verra à l'écran que des parasites (ou peut-être rien du tout). On sélectionne la vitesse de transmission pour un terminal (ainsi que bien d'autres possibilités) à partir des menus de "configuration" (set-up) sur le terminal. La plupart des terminaux possèdent un grand nombre d'options dans leurs menus de "configuration" (voyez configuration du terminal (détaillée)). Le port série de l'ordinateur a aussi des options et ces options doivent être configurées d'une manière compatible (voyez configuration de l'ordinateur (détaillée)).
La plupart des terminaux de nos jours possèdent plus d'une émulation (personnalité ou "mode de terminal"). Les numéros de modèles des terminaux fabriqués autrefois par DEC (Digital Equipment Corporation, maintenant Compaq) commencent par VT (par exemple, VT100). Bien d'autres terminaux différents des VT100 peuvent être configurés pour émuler un VT100. Wyse est un grand fabricant de terminaux et la plupart de leurs terminaux peuvent émuler des terminaux DEC divers comme les VT100 et les VT220. Par conséquent si vous voulez, disons, utiliser un terminal VT320 vous pouvez soit utiliser un vrai VT320 en personnalité "naturelle" soit utiliser un autre terminal capable d'émuler un VT320. Les personnalités "naturelles" ont en général plus de capacités donc, toutes choses étant égales par ailleurs, c'est la meilleure option à utiliser.
Le type d'émulation le plus courant est d'utiliser un PC comme si c'était un terminal vt100 (ou identique). Les programmes chargés dans la mémoire du PC permettent ceci. Dans Linux (sauf si vous êtes dans X Window) le moniteur du PC (appelé la console) émule un terminal de type "Linux" (proche du vt100). Même certaines fenêtres dans X Window émulent des terminaux. Voyez émulation de terminal.
Sur un PC, le moniteur est appelé la console. Elle émule un terminal de type "Linux". On se logge dessus via un terminal virtuel. Voyez la console : /dev/tty?. Elle reçoit des messages du noyau concernant la progression du démarrage (boot) et de l'arrêt de la machine. On peut faire en sorte que les messages allant normalement sur la console aillent sur le terminal. Pour ceci, vous devez patcher et recompiler le noyau à la main, sauf pour les noyaux 2.2 (et plus) pour lesquels il s'agit d'une option de configuration. Voyez faire qu'un terminal devienne la console.