6.6. Configuration des terminaux virtuels

Un terminal est, comme son nom l'indique, un équipement qui se trouve au bout d'une connexion à un ordinateur et qui permet de travailler sur l'ordinateur. Un terminal comprend généralement un clavier et un écran (graphique pour les terminaux X), et parfois une souris. Initialement, les terminaux étaient des périphériques passifs connectés sur un port série de l'ordinateur. Cette architecture permettait de partager une même unité centrale avec plusieurs utilisateurs. De nos jours, la plupart des terminaux sont simplement d'autres ordinateurs du réseau, qui se connectent à l'aide d'un programme que l'on appelle « émulateur de terminal ». L'émulateur de terminal se contente de simuler un terminal réel et permet de se connecter à toute machine gérant des terminaux clients. Du point de vue du système, tous les utilisateurs sont connectés via des terminaux, qu'ils soient physiques ou émulés.

Les connexions locales sont donc réalisées par l'intermédiaire d'un terminal local, la console. La console est tout simplement le périphérique prenant en charge le clavier et l'écran. Ce périphérique est géré directement par le noyau, et émule un modèle de terminal standard, le VT102. En fait, la console n'est utilisée directement en tant que terminal de login qu'en mode monoutilisateur (c'est-à-dire en mode maintenance). En mode multiutilisateur, la console est partagée entre plusieurs terminaux dits « virtuels », parce qu'ils simulent la présence de plusieurs terminaux sur la même console. Ces terminaux virtuels se partagent le clavier et l'écran, mais seulement un de ces terminaux peut accéder à la console à chaque instant : celui qui traite les caractères saisis au clavier et qui réalise l'affichage. Pour pouvoir passer d'un terminal virtuel à un autre, il faut utiliser une séquence de touches spéciale, comme par exemple ALT+Fn (ou CTRL+ALT+Fn si vous êtes sous XWindow), où Fn est l'une des touches de fonction du clavier. Si l'on utilise cette combinaison avec la touche F1, on accédera au premier terminal virtuel. Avec la touche F2, ce sera le deuxième, avec F3, le troisième, etc.

Il est donc possible de simuler la présence de plusieurs écrans et claviers sur une même machine, ce qui est très pratique lorsqu'on commence à lancer plusieurs programmes en même temps (cela nécessite évidemment de se connecter plusieurs fois sur des terminaux différents). Bien entendu, la configuration du clavier et la police de caractères utilisée sont communs à tous les terminaux virtuels, puisqu'ils utilisent tous la même console.

La plupart des distributions utilisent au moins quatre terminaux virtuels, plus éventuellement un terminal pour le serveur X. Mais il est possible de définir d'autres terminaux, qu'ils soient graphiques ou non. Nous allons maintenant voir comment modifier le nombre de terminaux virtuels disponibles. L'utilisation des terminaux avec XWindow sera traitée dans le chapitre traitant de la configuration de XWindow.

Chaque terminal virtuel utilise un fichier spécial de périphérique du répertoire /dev/. Le nom de ce fichier commence toujours par « tty » et est complété par le numéro du terminal. Ainsi, le fichier spécial de périphérique /dev/tty1 correspond au premier terminal virtuel, accessible avec la combinaison de touches CTRL+ALT+F1, le fichier spécial de périphérique /dev/tty2 correspond au deuxième terminal virtuel, etc. Linux peut gérer jusqu'à 64 terminaux virtuels, cependant, il est nécessaire de définir d'autres combinaisons de touches pour accéder aux terminaux 13 et suivants (puisqu'il n'existe que 12 touches de fonctions). Il serait possible d'utiliser les combinaisons de touches ALT+DROITE et ALT+GAUCHE pour les atteindre, mais d'une part ce ne serait pas très pratique, et d'autre part, vous ne devriez pas avoir besoin de plus de quatre ou cinq terminaux virtuels. Nous n'utiliserons donc ici que les douze premiers terminaux virtuels.

Les terminaux virtuels sont créés par le noyau à la demande, dès qu'un processus cherche à y accéder. Ainsi, le système n'alloue les ressources utilisées pour la gestion de ces terminaux que lorsque cela est nécessaire. Les terminaux peuvent être créés par différents processus, et leur emploi n'est pas restreint à la simple connexion des utilisateurs. Par exemple, il est possible d'afficher un message sur un terminal simplement en écrivant dans son fichier spécial de périphérique. Ainsi, si vous tapez la commande suivante sous le compte root :

echo Coucou > /dev/tty11

la chaîne de caractères « Coucou » devrait apparaître sur le terminal virtuel 11.

En général, les terminaux virtuels sont utilisés soit pour afficher les messages du système, soit pour permettre aux utilisateurs de se connecter, soit pour XWindow. Les terminaux peuvent donc être attribués à différents programmes, selon l'emploi qu'on leur réserve. Il faudra cependant bien prendre garde au fait que les terminaux ne sont pas partageables entre tous les processus. Ainsi, on ne devra pas essayer de lancer un serveur X sur un terminal utilisé par un processus de connexion en mode texte.

Pour créer des terminaux de login, il suffit de demander au système de lancer les processus de connexion sur chaque terminal désiré. Ce travail est à la charge du processus fondamental du système : init. La définition des terminaux de login se fait donc dans le fichier de configuration /etc/inittab. Si vous regardez le contenu de ce fichier, vous trouverez quelques lignes semblables à la suivante :

1:2345:respawn:/sbin/getty 9600 tty1 linux
2:2345:respawn:/sbin/getty 9600 tty2 linux
etc.

Ces lignes indiquent à init que plusieurs processus getty doivent être lancés sur les différents terminaux virtuels. Le programme getty est le programme qui vous demande votre nom d'utilisateur sur les terminaux virtuels. Plus précisément, getty initialise le terminal, demande le nom d'utilisateur et lance le programme login en lui fournissant le nom saisi, afin que celui-ci demande le mot de passe de cet utilisateur.

Si vous désirez rajouter des terminaux de login à votre configuration, vous devrez donc rajouter des lignes de ce genre dans le fichier /etc/inittab. En fait, ces lignes sont constituées de quatre champs :

Vous pouvez bien entendu vous baser sur les lignes existantes pour en créer de nouvelles. L'opération est très simple : il suffit de renuméroter les lignes et les terminaux virtuels utilisés. Prenez garde cependant à ne pas affecter à getty un terminal utilisé par XWindow. Il est recommandé d'effectuer ces modifications dans le niveau d'exécution 2 pour ne pas être gêné par XWindow.

Une fois les modifications ajoutées, vous pourrez demander à init de relire son fichier de configuration avec la commande suivante :

init Q

Dès lors, les nouveaux terminaux sont prêts à être utilisés.