Skip to main content

Terminaux texte sous Linux

14.1 Getty (utilisé dans / etc / inittab)

Introduction à Getty

Pour qu'un processus de connexion soit exécuté sur un port série (et le terminal qui y est connecté) au démarrage de l'ordinateur (ou au changement de niveau d'exécution), une commande getty doit être placée dans le fichier / etc / inittab. L'exécution de getty à partir de la ligne de commande peut causer des problèmes (voir Si getty est exécuté à partir de la ligne de commande: les programmes sont arrêtés pour savoir pourquoi). Getty obtient un téléscripteur (un terminal). Chaque terminal a besoin de sa propre commande getty. Il existe également au moins une commande getty pour la console dans chaque fichier / etc / inittab. Trouvez ceci et placez les commandes getty pour les terminaux réels à côté. Ce fichier peut contenir des exemples de lignes getty pour les terminaux texte commentés. Il vous suffit donc de les décommenter (supprimez le # du début) et de modifier quelques arguments.

Les arguments autorisés dépendent du moteur que vous utilisez:Deux meilleures solutions pour les terminaux directement connectés sont:

  • agetty (parfois juste appelée getty): très facile à configurer. Pas de fichiers de configuration. Voir agetty
  • getty (partie de getty_ps)

Les deux meilleurs choix pour les modems d’appel (à éviter pour les terminaux directement connectés) sont:

  • mgetty: le meilleur pour les modems; fonctionne pour les terminaux aussi mais inférieure
  • uugetty: pour les modems uniquement; partie du paquet getty_ps

Gettys simple à utiliser si vous n'utilisez pas de terminal texte réel. La plupart des utilisateurs de Linux utilisent l'un de ceux-ci sur leur moniteur:

  • Mingetty
  • fbgetty
  • fgetty
  • Rungetty

Votre distribution Linux peut venir avec ps_getty ou agetty pour les terminaux texte. Certaines distributions ne fournissent ni l'un ni l'autre. Malheureusement, ils appellent souvent simplement "getty", vous devrez donc peut-être déterminer lequel vous avez, car les arguments que vous placez après dans / etc / inittab diffèrent. Debian utilise agetty (dans le paquet util-linux). RedHat et Fedora ont utilisé ps_getty qui est situé à: ps_getty

En dernier recours pour essayer de déterminer votre moteur getty, vous pouvez extraire son code exécutable (généralement dans / sbin). ps_getty intègre / etc / gettydefs dans ce code. Pour le rechercher, allez dans / sbin et tapez:des chaînes de données getty | grep getty Si getty est réellement agetty, rien ne résultera de ce qui précède. Cependant, si vous avez déjà agi en tapant:getty -hdevrait montrer les options [-hiLmw].

Si vous n’avez pas l’index que vous voulez, vérifiez les autres distributions et le extraterrestre programme pour convertir les paquets RPM et Debian. Le code source peut être téléchargé à partir de Getty Software.

Si vous n'utilisez pas les lignes de contrôle du modem (par exemple, si vous n'utilisez que le nombre minimal de 3 conducteurs: transmission, réception et masse de signal commune), vous devez en informer un utilisateur en utilisant un indicateur "local". Le format de ceci dépend de quel getty vous utilisez.

Getty quitte après la connexion (et peut réapparaître)

Une fois connecté, vous remarquerez (en utilisant "top", "ps -ax" ou "ptree") que le processus getty n'est plus en cours d'exécution. Qu'est-ce qui lui est arrivé? Pourquoi getty redémarre-t-il si votre shell est tué? Voici pourquoi.

Une fois que vous avez saisi votre nom d'utilisateur, getty le prend et appelle le programme de connexion en lui indiquant votre nom d'utilisateur. Le processus getty est remplacé par le processus de connexion. Le processus de connexion vous demande votre mot de passe, le vérifie et lance le processus spécifié dans votre fichier de mots de passe. Ce processus est souvent le shell bash. Si tel est le cas, bash démarre et remplace le processus de connexion. Notez qu'un processus en remplace un autre et que le processus shell bash a initialement été lancé en tant que processus getty. Les implications de ceci seront expliquées ci-dessous.

Maintenant, dans le fichier / etc / inittab, getty est censé réapparaître (redémarrer) s'il est tué. C'est indiqué sur la ligne qui appelle getty. Mais si le shell bash (ou le processus de connexion) est tué, getty respawns (redémarre). Pourquoi? Eh bien, le processus de connexion et bash sont des remplacements pour getty et héritent

* Index de procédures de terminal texte

les connexions de signal établissent par leurs prédécesseurs. En fait, si vous observez les détails, vous remarquerez que le processus de remplacement aura le même ID de processus que le processus d'origine. Ainsi, bash est une sorte de getty déguisé avec le même numéro d’ID de processus. Si bash est tué, c’est comme si getty avait été tué (même si getty ne fonctionnait plus). Cela a pour conséquence de relancer la création de getty.

Quand on se déconnecte, tous les processus sur ce port série sont tués, y compris le shell bash. Cela peut également se produire (si activé) si un signal de raccrochage est envoyé au port série par une chute de tension DCD par le modem. La déconnexion ou l’abandon de DCD aura pour conséquence le réapparition de getty. On peut forcer getty à respawn en supprimant manuellement bash (ou login) en appuyant sur la touche k, etc. en étant "top" ou avec la commande "kill". Vous devrez probablement le tuer avec le signal 9 (qui ne peut pas être ignoré).

Si getty est lancé en ligne de commande: les programmes sont arrêtés

Vous devriez normalement lancer getty de l'intérieur / etc / inittab et pas à partir de la ligne de commande, sinon certains programmes exécutés sur le terminal risquent d’être suspendus (arrêtés) de façon inattendue. Voici pourquoi (passez à la section suivante si le pourquoi n’est pas important pour vous). Si vous lancez getty for say ttyS1 à partir de la ligne de commande d'un autre terminal, disons tty1, il aura tty1 comme "terminal de contrôle" même si le terminal sur lequel il est utilisé est ttyS1. Ainsi, il a le mauvais terminal de contrôle. Mais si cela commence dans le fichier inittab, alors ttyS1 sera le terminal de contrôle (correct).

Même si le terminal de contrôle est incorrect, la connexion sur ttyS1 fonctionne correctement (puisque vous avez donné ttyS1 en tant qu'argument à getty). L'entrée et la sortie standard sont définies sur ttyS1 même si le terminal de contrôle reste tty11. D'autres programmes exécutés sur ttyS1 peuvent hériter de cette entrée / sortie standard (connectée à ttyS1) et tout va bien. Mais certains programmes peuvent faire l'erreur d'essayer de lire depuis leur terminal de contrôle (tty1) ce qui est faux. Maintenant, tty1 peut penser que ces programmes sont exécutés à l’arrière-plan par tty1; une tentative de lecture à partir de tty1 (c’est donc ttyS1) a pour effet d’arrêter le processus de lecture. (Un processus en arrière-plan n'est pas autorisé à lire à partir de son terminal de contrôle.). Vous pouvez voir un message comme: "[1] + arrêté"sur l'écran. À ce stade, vous êtes bloqué car vous ne pouvez pas interagir avec un processus qui tente de communiquer avec vous via le mauvais terminal. Bien sûr, vous pouvez vous échapper, vous pouvez accéder à un autre terminal et arrêter le processus, etc. .

agetty (peut être nommé getty)

Un exemple de ligne dans / etc / inittab:

S1: 23: respawn: / sbin / getty -L 19200 ttyS1 vt102

S1 vient de ttyS1. 23 signifie que getty est lancé en entrant aux niveaux d’exécution 2 ou 3. respawn signifie que si getty (ou un processus qui l’a remplacé, tel que bash) est tué, getty redémarrera automatiquement (respawn). / sbin / getty est la commande getty. Le -L signifie local (ignore les signaux de contrôle du modem). -h (non montré dans l'exemple) active le contrôle de flux matériel (identique à stty crtscts). 19200 est le débit en bauds. ttyS1 signifie / dev / ttyS1 (COM2 sous MS-DOS). vt102 est le type de terminal et ce getty définira la variable d'environnement TERM sur cette valeur. Il n'y a pas de fichiers de configuration. Tapez "init q" sur la ligne de commande après la modification de getty et vous devriez voir une invite de connexion.

La détection automatique des problèmes de parité par Agetty

le agetty programme tentera de détecter automatiquement la parité définie dans le terminal (y compris aucune parité). Il ne prend pas en charge les octets de données 8 bits plus la parité 1 bit. Voir Octets de données 8 bits (plus la parité). Si tu utilises stty pour définir la parité, agetty le désactive automatiquement car il souhaite initialement que le bit de parité soit transmis comme s'il s'agissait d'un bit de données. Cela est dû au fait qu'il doit obtenir le dernier bit (éventuellement un bit de parité) lorsque vous tapez votre nom de connexion afin qu'il puisse détecter automatiquement la parité. Ainsi, si vous utilisez la parité, activez-la uniquement à l'intérieur du terminal texte et laissez agetty détectez-le automatiquement et configurez-le sur l'ordinateur. Si votre terminal prend en charge la parité reçue, l’invite de connexion restera incompréhensible jusqu’à ce que vous tapiez quelque chose afin que getty puisse détecter la

parité. L'invite brouillée dissuadera les visiteurs, etc. d'essayer de se connecter. Cela pourrait être juste ce que vous voulez.

Il y a parfois un problème avec la détection automatique de la parité. Cela se produit car après avoir d'abord saisi votre nom de connexion, agetty commence le s'identifier programme pour finir de vous connecter. Malheureusement, le s'identifier programme ne peut pas détecter la parité si la getty programme n'a pas réussi à déterminer la parité alors s'identifier ne sera pas en mesure de le déterminer non plus. Si la première tentative de connexion échoue, s'identifier vous permettra d’essayer à nouveau, etc. (tous avec une parité mal réglée). Finalement, après un certain nombre de tentatives infructueuses de connexion (ou après un délai d'attente) agetty va redémarrer et recommencer les séquences de connexion. Une fois que getty est à nouveau exécuté, il sera peut-être en mesure de détecter la parité à la deuxième tentative afin que tout fonctionne correctement.

Avec une mauvaise parité, le s'identifier Le programme ne peut pas lire correctement ce que vous tapez et vous ne pouvez pas vous connecter. Si votre terminal prend en charge la parité reçue, vous continuerez à voir un écran tronqué. Si getty ne parvient pas à détecter la parité, un fichier / etc / issue est généralement affiché à l'écran juste avant l'avant de l'invite, de sorte qu'un plus grand nombre de mots incohérents peuvent apparaître à l'écran.

Pourquoi agetty ne peut-elle pas détecter la parité à partir de la première lettre tapée? Voici un exemple: supposons qu'il détecte un octet de 8 bits avec son bit de parité 0 (bit de poids fort) et un nombre impair de 1 bits. Quelle est la parité? Eh bien, le nombre impair de 1 bits implique qu'il s'agit d'une parité impaire. Mais il pourrait aussi s'agir simplement d'un caractère 8 bits sans parité. Jusqu'à présent, il n'y a aucun moyen de déterminer lequel. Mais jusqu'à présent, nous avons éliminé la possibilité d'une parité égale. La détection de la parité procède donc par un processus d'élimination.

Si l'octet suivant saisi est similaire au premier et n'élimine que la possibilité d'une parité égale, il est toujours impossible de déterminer la parité. Cette situation peut continuer indéfiniment et, dans de rares cas, la connexion échouera jusqu'à ce que vous changiez votre nom de connexion. Si agetty trouve un bit de parité égal à 1, il supposera qu'il s'agit d'un bit de parité et non d'un bit de poids fort d'un caractère de 8 bits. Cela suppose donc que vous n'utilisez pas de méta-caractères (jeu de bits forts) dans votre nom d'utilisateur (c'est-à-dire que votre nom est en ASCII).

On peut entrer dans une "boucle de connexion" de différentes manières. Supposons que vous ne saisissiez qu'une seule lettre ou deux pour votre nom de connexion, puis appuyez sur Entrée. Si ces lettres ne suffisent pas pour la détection de parité, la connexion est exécutée avant la détection de la parité. Parfois, ce problème se produit si le terminal n’est pas allumé et / ou connecté au premier démarrage d’agetty.

Si vous êtes bloqué dans cette "boucle de connexion", vous pouvez appuyer plusieurs fois sur la touche de retour jusqu'à ce que vous obteniez l'invite de connexion de getty. Une autre solution consiste à attendre environ une minute pour un délai d'attente. Ensuite, l'invite de connexion getty sera affichée à l'écran par le programme getty et vous pourrez essayer à nouveau de vous connecter.

8 octets de données (plus la parité)

Malheureusement, Agetty ne peut pas détecter cette parité.À la fin de 1999, il n’était plus possible de désactiver la détection automatique de la parité et détecterait donc une parité incorrecte. Le résultat est que le processus de connexion sera tronqué et que la parité sera mal définie. Il ne semble donc pas envisageable d'utiliser des octets de données 8 bits avec parité.

getty (partie de getty_ps)

(La plupart de cela provient de l'ancien Serial-HOWTO de Greg Hankins)Pour ce compte getty, il faut à la fois mettre les entrées dans un fichier de configuration et ajouter une entrée dans / etc / inittab. Voici quelques exemples d'entrées à utiliser pour votre terminal que vous avez mises dans le fichier de configuration. / etc / gettydefs.

Notez que le DT38400, le DT19200, etc. ne sont que des étiquettes et doivent être identiques à ceux que vous utilisez dans / etc / inittab.

Si vous voulez, vous pouvez faire getty imprimer des choses intéressantes dans la bannière de connexion. Dans mes exemples, le nom du système et la ligne série sont imprimés. Vous pouvez ajouter d'autres choses: [blockquote

ombre = oui]

Quand vous avez terminé l'édition / etc / gettydefs, vous pouvez vérifier que la syntaxe est correcte en faisant:

Assurez-vous qu'il n'y a pas d'autre getty ou uugetty fichier de configuration du port série auquel votre terminal est connecté, tel que (/etc/default/{uuBuchgetty.ttySN ou /etc/conf.{uuBuchgetty.ttySN), car cela gênera probablement l'exécution getty sur un terminal. Supprimez ces fichiers en conflit s'ils existent.

Modifier votre / etc / inittab fichier à exécuter getty sur le port série (en remplaçant les informations correctes pour votre environnement - port, vitesse et type de terminal par défaut):

À ce stade, vous devriez voir une invite de connexion sur votre terminal. Vous devrez peut-être appuyer sur Entrée pour attirer l'attention du terminal.

mgetty

Le "m" signifie modem. Ce programme est principalement destiné aux modems et, à partir de la mi-2000, il devra être recompilé pour pouvoir être utilisé avec des terminaux texte (sauf si vous utilisez le contrôle de flux matériel et nécessite généralement un câble fabriqué à la main). Pour la documentation sur les terminaux directement connectés, voir la section "Direct" du manuel: mgetty.texi.

Regardez les dernières lignes de /etc/mgetty/mgetty.config pour un exemple de configuration pour un terminal. À moins que vous ne disiez "toggle-dtr no", il pensera que vous avez un modem et lâche (annule) la broche DTR sur le PC dans une tentative vaine de réinitialiser le modem inexistant. Contrairement à d’autres gettys, mgetty ne s’attachera pas à un terminal tant que personne n’aura appuyé sur aucune touche de ce terminal, vous verrez donc un? pour le terminal en Haut ou ps jusqu'à ce que cela se produise. Les logs / var / log / mgetty / peut afficher quelques messages d’avertissement qui ne sont applicables qu’aux modems que vous pouvez ignorer.

Voici un exemple de la simple ligne que vous avez insérée / etc / inittab: