Skip to main content

Text-Terminals unter Linux - 14.1 Getty (wird in / etc / inittab verwendet)

Übersetzung von ganzen Sätzen/Texten in andere Sprachen unter Linux im Terminal (Text translation) (Juni 2025)

Übersetzung von ganzen Sätzen/Texten in andere Sprachen unter Linux im Terminal (Text translation) (Juni 2025)
Anonim

14.1 Getty (wird in / etc / inittab verwendet)

Einführung in Getty

Damit ein Anmeldeprozess an einem seriellen Port (und dem damit verbundenen Terminal) ausgeführt werden kann, wenn der Computer startet (oder die Laufebenen wechselt), muss ein getty-Befehl in die Datei / etc / inittab eingefügt werden. Die Ausführung von getty über die Befehlszeile kann zu Problemen führen (siehe Wenn getty von der Befehlszeile aus ausgeführt wird: Programme werden angehalten, um zu sehen, warum). Getty holt einen TTY (ein Terminal) auf den Weg. Jedes Terminal benötigt einen eigenen getty-Befehl. Es gibt auch mindestens einen getty-Befehl für die Konsole in jeder Datei / etc / inittab. Finden Sie dies und stellen Sie die getty-Befehle für die echten Terminals daneben. Diese Datei kann Beispiel-getty-Zeilen für Textterminals enthalten, die auskommentiert sind, sodass Sie sie nur auskommentieren (das führende # entfernen) und einige Argumente ändern müssen.

Welche Argumente zulässig sind, hängt davon ab, welchen getty Sie verwenden:Die zwei am besten für direkt angeschlossene Terminals sind:

  • agetty (manchmal nur getty genannt): Sehr einfach einzurichten. Keine Konfigurationsdateien Siehe Agetty
  • getty (Teil von getty_ps)

Zwei Gettys, die sich am besten für Einwahlmodems eignen (vermeiden Sie direkt angeschlossene Terminals):

  • mgetty: das beste für modems; funktioniert auch für Terminals, aber minderwertig
  • uugetty: nur für modems; Teil des getty_ps-Pakets

Einfache Verwendung, wenn Sie kein echtes Text-Terminal verwenden. Die meisten Linux-Benutzer verwenden eine davon auf ihrem Monitor:

  • Mingetty
  • fbgetty
  • fgetty
  • Rungetty

Ihre Linux-Distribution kann für Text-Terminals entweder ps_getty oder agetty enthalten. Einige Distributionen liefern keine. Leider nennen sie es oft nur "getty", so dass Sie möglicherweise feststellen müssen, welche Sie haben, da sich die Argumente, die Sie in / etc / inittab hinterlegen, unterscheiden. Debian verwendet agetty (im Paket util-linux). RedHat und Fedora haben ps_getty verwendet, das sich auf ps_getty befindet

Als letzte Möglichkeit, um herauszufinden, welchen getty Sie haben, können Sie den ausführbaren Code (normalerweise in / sbin) auschecken. ps_getty hat / etc / gettydefs in diesen Code eingebettet. Um danach zu suchen, gehen Sie zu / sbin und geben Sie Folgendes ein:Zeichenfolgen getty | grep getty Wenn getty tatsächlich aggressiv ist, wird das obige Ergebnis nichts ergeben. Allerdings, wenn Sie eine Agetty-Eingabe haben:getty -hsollte die Optionen -hiLmw zeigen.

Wenn Sie den getty nicht haben, überprüfen Sie die anderen Distributionen und die Ausländer Programm zum Konvertieren zwischen RPM- und Debian-Paketen. Der Quellcode kann von Getty Software heruntergeladen werden.

Wenn Sie keine Modem-Steuerleitungen verwenden (wenn Sie beispielsweise nur die Mindestanzahl von 3 Leitern verwenden: Senden, Empfangen und gemeinsame Signalmasse), sollten Sie getty dies mit einem "local" -Flag mitteilen. Das Format davon hängt davon ab, welchen getty Sie verwenden.

Getty beendet sich nach dem Login (und kann respawnen)

Nachdem Sie sich angemeldet haben, werden Sie feststellen (mit "top", "ps -ax" oder "ptree"), dass der getty-Prozess nicht mehr läuft. Was ist damit passiert? Warum startet getty erneut, wenn Ihre Shell beendet wird? Hier ist der Grund.

Nachdem Sie Ihren Benutzernamen eingegeben haben, nimmt getty diesen auf und ruft das Anmeldeprogramm mit dem Benutzernamen auf. Der getty-Prozess wird durch den Anmeldeprozess ersetzt. Beim Anmeldevorgang werden Sie nach Ihrem Kennwort gefragt, überprüft es und startet den in Ihrer Kennwortdatei angegebenen Vorgang. Dieser Prozess ist oft die Bash-Shell. Wenn dies der Fall ist, startet bash und ersetzt den Anmeldeprozess. Beachten Sie, dass ein Prozess einen anderen ersetzt und der Bash-Shell-Prozess ursprünglich als getty-Prozess gestartet wurde. Die Implikationen davon werden unten erklärt.

Nun soll getty in der Datei / etc / inittab respawn (restart), wenn er getötet wird. Es steht so in der Zeile, die getty aufruft. Wenn jedoch die Bash-Shell (oder der Anmeldeprozess) beendet wird, erscheint getty neu (Neustarts). Warum? Nun, sowohl der Anmeldeprozess als auch die Bash sind Ersatz für getty und erben

* Text-Terminal-Anleitung

Die Signalverbindungen werden von ihren Vorgängern hergestellt. Wenn Sie die Details beachten, werden Sie feststellen, dass der Ersetzungsprozess dieselbe Prozess-ID hat wie der ursprüngliche Prozess. Somit ist bash eine Art verkleidet getty mit der gleichen Prozess-ID-Nummer. Wenn bash getötet wird, ist dies genau so, als ob getty getötet wurde (obwohl getty nicht mehr läuft). Dies führt zu einem Respawning von getty.

Wenn einer sich abmeldet, werden alle Prozesse an diesem seriellen Port einschließlich der Bash-Shell beendet. Dies kann auch passieren (wenn aktiviert), wenn ein Aufhängesignal durch einen Abfall der DCD-Spannung vom Modem an die serielle Schnittstelle gesendet wird. Entweder das Abmelden oder das Ablegen von DCD führt zu einem erneuten Start von getty. Sie können getty zum Respawn zwingen, indem Sie bash (oder login) manuell töten, indem Sie entweder die k-Taste drücken, während Sie sich in "top" befinden, oder mit dem Befehl "kill". Sie müssen es wahrscheinlich mit Signal 9 beenden (was nicht ignoriert werden kann).

Wenn getty von der Befehlszeile aus ausgeführt wird: Programme werden angehalten

Sie sollten getty normalerweise von innen ausführen / etc / inittab und nicht von der Befehlszeile oder anderen Programmen, die auf dem Terminal ausgeführt werden, kann unerwartet ausgesetzt (gestoppt) werden. Hier ist der Grund (überspringen Sie den nächsten Abschnitt, wenn der Grund für Sie nicht wichtig ist). Wenn Sie getty für beispielsweise ttyS1 von der Befehlszeile eines anderen Terminals aus starten, beispielsweise tty1, wird tty1 als "steuerndes Terminal" angezeigt, obwohl das eigentliche Terminal ttyS1 ist. Somit hat es das falsche Steuergerät. Wenn es jedoch in der inittab-Datei gestartet wird, wird ttyS1 als steuerndes Terminal verwendet (richtig).

Obwohl das steuernde Terminal falsch ist, funktioniert das Login bei ttyS1 einwandfrei (da Sie ttyS1 als Argument an getty angegeben haben). Die Standardeingabe und -ausgabe sind auf ttyS1 gesetzt, obwohl das Steuerendgerät tty11 bleibt. Andere Programme, die mit ttyS1 ausgeführt werden, können diese Standardeingabe / -ausgabe (die mit ttyS1 verbunden ist) erben, und alles ist in Ordnung. Einige Programme machen jedoch den Fehler, zu versuchen, von ihrem steuernden Terminal (tty1) zu lesen, was falsch ist. Nun kann tty1 denken, dass diese Programme von tty1 im Hintergrund ausgeführt werden. Ein Versuch, aus tty1 zu lesen (sollte ttyS1 sein), führt dazu, dass der Prozess angehalten wird, der versucht, zu lesen. (Ein Hintergrundprozess darf nicht von seinem steuernden Terminal aus lesen.). Möglicherweise sehen Sie eine Nachricht wie: "1 + gestoppt"auf dem Bildschirm. An diesem Punkt sind Sie festgefahren, da Sie nicht mit einem Prozess interagieren können, der versucht, über das falsche Terminal mit Ihnen zu kommunizieren. Natürlich können Sie zu einem anderen Terminal gehen, um den Prozess zu beenden .

agetty (mag vielleicht getty heißen)

Eine Beispielzeile in / etc / inittab:

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

S1 ist von ttyS1. 23 bedeutet, dass getty beim Einstieg in die Run-Level 2 oder 3 ausgeführt wird. Respawn bedeutet, dass getty (oder ein Prozess, der ihn ersetzt hat, wie zum Beispiel bash) beendet wird, getty automatisch wieder startet (respawn). / sbin / getty ist der getty-Befehl. Das -L bedeutet Lokal (ignoriert die Steuersignale des Modems). -h (im Beispiel nicht dargestellt) aktiviert die Hardwareflusssteuerung (wie bei stty crtscts). 19200 ist die Baudrate. ttyS1 bedeutet / dev / ttyS1 (COM2 in MS-DOS). vt102 ist der Typ des Terminals, und dieser getty setzt die Umgebungsvariable TERM auf diesen Wert. Es sind keine Konfigurationsdateien vorhanden. Geben Sie "init q" in die Befehlszeile ein, nachdem Sie getty bearbeitet haben. Es sollte eine Anmeldeaufforderung angezeigt werden.

Agettys automatische Erkennung von Paritätsproblemen

Das Agetty Das Programm versucht, die im Terminal eingestellte Parität automatisch zu erkennen (einschließlich keiner Parität). Es werden keine 8-Bit-Datenbytes plus 1-Bit-Parität unterstützt. Siehe 8-Bit-Datenbytes (plus Parität). Wenn du benutzt stty Parität einstellen, Agetty setzt es automatisch zurück, da es anfangs möchte, dass das Paritätsbit durchgeht, als ob es ein Datenbit wäre. Dies liegt daran, dass das letzte Bit (möglicherweise ein Paritätsbit) abgerufen werden muss, wenn Sie Ihren Anmeldenamen eingeben, damit die Parität automatisch erkannt werden kann. Wenn Sie also Parität verwenden, aktivieren Sie sie nur innerhalb des Text-Terminals und lassen Sie Agetty automatisch erkennen und am Computer einstellen. Wenn Ihr Terminal die empfangene Parität unterstützt, sieht die Anmeldeaufforderung so lange verstümmelt aus, bis Sie etwas eingeben, damit getty das erkennen kann

Parität. Die verstümmelte Aufforderung hält Besucher usw. davon ab, sich anzumelden. Das könnte genau das sein, was du willst.

Manchmal besteht ein Problem mit der automatischen Erkennung der Parität. Dies geschieht, weil Sie nach dem ersten Eingeben Ihres Anmeldenamens Agetty beginnt das Anmeldung Programm, um die Anmeldung abzuschließen Anmeldung Programm kann Parität also nicht erkennen, wenn die getty Das Programm konnte die Parität dann nicht ermitteln Anmeldung wird es auch nicht feststellen können. Wenn der erste Anmeldeversuch fehlschlägt, Anmeldung lässt Sie es erneut versuchen, usw. (alle mit falscher Parität). Nach einigen fehlgeschlagenen Anmeldeversuchen (oder nach einem Timeout) Agetty startet erneut und startet die Anmeldesequenzen erneut. Sobald getty wieder läuft, kann es möglicherweise beim zweiten Versuch die Parität erkennen, so dass alles OK funktioniert.

Mit falscher Parität die Anmeldung Das Programm kann die Eingabe nicht richtig lesen und Sie können sich nicht anmelden. Wenn Ihr Terminal die empfangene Parität unterstützt, wird weiterhin ein unleserlicher Bildschirm angezeigt. Wenn getty die Parität nicht erkennt, wird eine / etc / issue -Datei normalerweise kurz vor der Eingabeaufforderung auf dem Bildschirm ausgegeben, sodass auf dem Bildschirm möglicherweise mehr verstümmelte Wörter angezeigt werden.

Warum erkennt Agetty keine Parität anhand des ersten eingegebenen Buchstabens? Hier ein Beispiel: Angenommen, es erkennt ein 8-Bit-Byte mit seinem Paritätsbit 0 (Bit höherer Ordnung) und mit einer ungeraden Anzahl von 1 Bits. Welche Parität ist das? Nun, die ungerade Anzahl von 1 Bits impliziert, dass es sich um eine ungerade Parität handelt. Es könnte aber auch nur ein 8-Bit-Zeichen ohne Parität sein. Es gibt noch keinen Weg, um festzustellen, welche. Bisher haben wir jedoch die Möglichkeit der Parität beseitigt. Die Erfassung der Parität erfolgt somit durch einen Eliminierungsprozess.

Wenn das nächste Byte, das eingegeben wird, dem ersten ähnlich ist und auch nur die Möglichkeit einer Parität beseitigt, kann die Parität immer noch nicht bestimmt werden. Diese Situation kann unbegrenzt fortbestehen und in seltenen Fällen schlägt die Anmeldung fehl, bis Sie Ihren Anmeldenamen ändern. Wenn agetty ein Paritätsbit von 1 findet, wird davon ausgegangen, dass dies ein Paritätsbit und kein höherwertiges Bit eines 8-Bit-Zeichens ist. Es wird daher davon ausgegangen, dass Sie in Ihrem Benutzernamen keine Metazeichen (High-Bit-Set) verwenden (d. H., Dass Ihr Name in ASCII ist).

Man kann auf verschiedene Arten in eine "Login-Schleife" gelangen. Angenommen, Sie geben nur einen oder zwei Buchstaben für Ihren Anmeldenamen ein und drücken dann die Eingabetaste. Wenn diese Buchstaben für die Paritätserkennung nicht ausreichen, wird die Anmeldung ausgeführt, bevor die Parität erkannt wurde. Manchmal tritt dieses Problem auf, wenn das Terminal nicht eingeschaltet ist und / oder eine Verbindung besteht, wenn agetty zum ersten Mal gestartet wird.

Wenn Sie in dieser "Anmeldeschleife" stecken bleiben, besteht ein Ausweg darin, die Eingabetaste so oft zu drücken, bis Sie die getty-Eingabeaufforderung erhalten. Eine andere Möglichkeit besteht darin, nur eine Minute auf einen Timeout zu warten. Dann wird die getty-Anmeldeaufforderung vom getty-Programm auf dem Bildschirm angezeigt, und Sie können erneut versuchen, sich anzumelden.

8-Bit-Datenbytes (plus Parität)

Leider kann Agetty diese Parität nicht erkennen.Ab Ende 1999 gibt es keine Option zum Deaktivieren der automatischen Erkennung der Parität und somit eine falsche Parität. Dies führt dazu, dass der Anmeldeprozess gestört wird und die Parität falsch eingestellt wird. Daher scheint es nicht praktikabel zu sein, 8-Bit-Datenbytes mit Parität zu verwenden.

getty (Teil von getty_ps)

(Das meiste davon stammt aus dem alten Serial-HOWTO von Greg Hankins)Für dieses getty muss man sowohl Einträge in eine Konfigurationsdatei einfügen als auch einen Eintrag hinzufügen / etc / inittab. Hier einige Beispieleinträge für Ihr Terminal, die Sie in die Konfigurationsdatei einfügen / etc / gettydefs.

Beachten Sie, dass der DT38400, DT19200 usw. nur Beschriftungen sind und mit denen identisch sein müssen, die Sie verwenden / etc / inittab.

Wenn du willst, kannst du machen getty interessante Dinge im Login-Banner drucken. In meinen Beispielen habe ich den Systemnamen und die serielle Zeile gedruckt. Sie können andere Dinge hinzufügen: blockquote

Schatten = Ja

Wenn Sie mit der Bearbeitung fertig sind / etc / gettydefskönnen Sie überprüfen, ob die Syntax korrekt ist:

Stellen Sie sicher, dass es keine andere gibt getty oder Uugetty Konfigurationsdatei für die serielle Schnittstelle, an die Ihr Terminal angeschlossen ist, z./etc/default/{uu}getty.ttySN oder /etc/conf.{uu}getty.ttySN), da dies wahrscheinlich beim Laufen stört getty auf einem Terminal. Entfernen Sie solche in Konflikt stehenden Dateien, wenn sie vorhanden sind.

Bearbeiten Sie Ihre / etc / inittab Datei zum Ausführen getty am seriellen Port (ersetzen Sie die richtigen Informationen für Ihre Umgebung - Port, Geschwindigkeit und Standard-Terminaltyp):

An diesem Punkt sollte auf Ihrem Terminal eine Anmeldeaufforderung angezeigt werden. Sie müssen möglicherweise die Eingabetaste drücken, um die Aufmerksamkeit des Terminals zu erlangen.

mgetty

Das "m" steht für Modem. Dieses Programm ist hauptsächlich für Modems und ab Mitte 2000 wird es für Textterminals neu kompiliert (sofern Sie keine Hardware-Flusskontrolle verwenden - und dies erfordert normalerweise ein handgefertigtes Kabel). Die Dokumentation für direkt angeschlossene Terminals finden Sie im Abschnitt "Direkt" des Handbuchs: mgetty.texi.

Schau dir die letzten Zeilen an /etc/mgetty/mgetty.config Ein Beispiel für die Konfiguration eines Terminals. Wenn Sie nicht "toggle-dtr no" sagen, wird es denken, dass Sie ein Modem haben und den DTR-Pin am PC ablegen (negieren), um den nicht vorhandenen Modem zurückzusetzen. Im Gegensatz zu anderen Gettys wird sich mgetty nicht an ein Terminal anschließen, bis jemand eine Taste dieses Terminals drückt. für das Terminal in oben oder ps bis das passiert. Die loggt sich ein / var / log / mgetty / zeigt möglicherweise einige Warnmeldungen an, die nur für Modems gelten, die Sie möglicherweise ignorieren.

Hier ist ein Beispiel für die einfache Zeile, die Sie eingeben / etc / inittab: