Welchen Terminaltyp verwende ich?

Welchen Terminaltyp verwende ich?

Ich habe dies sowohl mit Ubuntu 12.04 als auch mit Debian 7 getestet.

echo $TERM

Ich bekomme

xterm

Wenn ich aber das Dropdown-Menü „Hilfe“ > „Info“ verwende, heißt es gnome terminal 3.4.1.1.

Bedeutet das, dass ich nur Gnome-Terminal verwende? Oder nur Xterm? Oder ist Gnome-Terminal eine Erweiterung von Xterm? Ich bin verwirrt.

Antwort1

Wofür ist das $TERM?

Die $TERMVariable ist für die Verwendung durch Anwendungen vorgesehen, um die Funktionen dieses Terminals zu nutzen.

Wenn ein Programm beispielsweise farbigen Text anzeigen möchte, muss es zunächst herausfinden, ob das verwendete Terminal farbigen Text unterstützt. Und wenn ja, wie dies funktioniert.

Dies funktioniert so, dass das System eine Bibliothek bekannter Terminals und ihrer Fähigkeiten verwaltet. Auf den meisten Systemen ist dies vorhanden /usr/share/terminfo(es gibt auch Termcap, aber dieses veraltete Programm wird nicht mehr viel verwendet).

Nehmen wir also an, Sie haben ein Programm, das roten Text anzeigen möchte. Es ruft im Wesentlichen die Terminfo-Bibliothek auf, die sagt:gib mir die Bytefolge, die ich für roten Text für das xterm-Terminal senden muss". Dann nimmt es einfach diese Bytes und druckt sie aus.
Sie können dies selbst ausprobieren, indem Sie Folgendes tun tput setf 4; echo hi. Dadurch wird die Terminfo-Fähigkeit abgerufen setfund als Parameter übergeben 4, also die gewünschte Farbe.


Warum das Gnome-Terminal über sich selbst lügt:

Nehmen wir nun an, Sie haben einen brandneuen Terminalemulator, der gerade veröffentlicht wurde, und die Terminfo-Bibliothek des Systems hat noch keine Definition dafür. Wenn Ihre Anwendung nachschlagen möchte, wie etwas zu tun ist, schlägt dies fehl, weil das Terminal nicht bekannt ist.

Ihr Terminal umgeht dies, indem es seine Identität lügt. Ihr Gnome-Terminal sagt also:Ich bin xterm".

Xterm ist ein sehr einfaches Terminal, das es seit den Anfängen von X11 gibt, und daher unterstützen die meisten Terminalemulatoren das, was es unterstützt. Wenn also das Gnome-Terminal sagt, es sei ein Xterm, ist es wahrscheinlicher, dass es eine Definition in der Terminfo-Bibliothek hat.

Der Nachteil, wenn Sie über Ihren Terminaltyp lügen, ist, dass das Terminal möglicherweise viel mehr unterstützt als xterm (viele neue Terminals unterstützen beispielsweise 256 Farben, während ältere Terminals nur 16 unterstützten). Sie müssen also Kompromisse eingehen, erhalten mehr Funktionen oder mehr Kompatibilität. Die meisten Terminals entscheiden sich für mehr Kompatibilität und geben sich daher als aus xterm.

Wenn Sie dies überschreiben möchten, bieten viele Terminals eine Möglichkeit, das Verhalten zu konfigurieren. Sie können aber auch einfach Folgendes tun export TERM=gnome-terminal.

Antwort2

Die TERMUmgebungsvariable gibt das Terminal anTyp, nicht das TerminalAnwendung. TERMhat einen bestimmten Zweck: Es teilt den auf diesem Terminal laufenden Anwendungen mit, wie sie mit dem Terminal interagieren sollen.

Anwendungen interagieren mit Terminals, indem sie Escape-Sequenzen schreiben – Zeichenfolgen, die nicht druckbare Zeichen enthalten und Effekte wie das Bewegen des Cursors, das Löschen eines Teils des Bildschirms, das Ändern der aktuellen Farbe usw. haben. Früher hatten verschiedene Marken physischer Terminals unterschiedliche Sätze von Escape-Sequenzen. Daher verwaltet das Betriebssystem eine Datenbank mit Terminaltypen und ihren Eigenschaften. Die traditionelle Datenbank istBegriffserklärung(„TERMinal CAPabilities“); viele moderne Systeme und Anwendungen sind aufTermininfo. Beide Datenbanken werden nach dem Namen des Terminaltyps indiziert und Anwendungen fragen sie mithilfe des Terminaltypnamens aus den TERMUmgebungsvariablen ab.

Heutzutage verwenden die meisten Terminals eineStandardsatz von Escape-Sequenzenmit einigen gemeinsamen Erweiterungssätzen, sodass Sie nicht viele verschiedene Werte von sehen werden TERM. Die meisten GUI-Terminalemulatoren sind kompatibel mitxterm, das traditionelle X-Terminal (das immer noch verwendet und gepflegt wird).

Terminalemulatoren, die sich von xterm unterscheiden, können der Terminaldatenbank unter ihrem eigenen Namen einen eigenen Eintrag hinzufügen. Dies funktioniert jedoch nicht gut mit Remote-Shells. Ein Programm, das auf Maschine A läuft, aber auf Maschine B angezeigt wird, beispielsweise weil es über ssh von B nach A gestartet wurde, muss die Terminaldatenbank auf Maschine A abfragen. Remote-Anmeldemethoden wie ssh übertragen die TERMUmgebungsvariable, dies ist jedoch nur dann hilfreich, wenn die Terminaldatenbank von B auch einen Eintrag für den Wert „user“ auf A hat. Daher halten sich viele Terminalemulatoren an TERM=xtermdie allgemein bekannte Methode.

Die Differenzierung zwischen Terminals ergibt sich im Großen und Ganzen nicht aus der Art und Weise, wie Anwendungen mit ihnen interagieren, sondern aus der Art und Weise, wie die Terminals mit dem Benutzer interagieren und sich in ihre Umgebung einfügen. Beispielsweise sieht Gnome Terminal auf Gnome gut aus und bietet Tabs und andere Annehmlichkeiten; Konsole sieht auf KDE gut aus und bietet Tabs und andere Annehmlichkeiten; urxvt hat einen geringen Speicherbedarf; Console2 läuft unter Windows; screen und tmux bieten Sitzungen, die an verschiedene übergeordnete Terminals angehängt werden können; und so weiter. Da keine dieser Funktionen einen Unterschied für im Terminal ausgeführte Anwendungen macht, verwenden die meisten Terminalemulatoren TERM=xterm.

Um herauszufinden, in welchem ​​Terminal eine Shell ausgeführt wird (vorausgesetzt, die Shell wird direkt in einem Terminal ausgeführt), sehen Sie sich das übergeordnete Element der Shell an:

ps -p$PPID

Antwort3

Die Umgebungsvariable TERM bezieht sich nicht auf das von Ihnen verwendete Terminal.

Zitieren von gnu.org:

Die Umgebungsvariable TERM enthält eine Kennung für die Fähigkeiten des Textfensters. Sie können eine detaillierte Liste dieser Fähigkeiten erhalten, indem Sie den Befehl > „infocmp“ verwenden und dabei „man 5 terminfo“ als Referenz verwenden.

Beim Erstellen von Text mit eingebetteten Farbanweisungen betrachtet msgcat die Variable TERM. Heutzutage unterstützen Textfenster normalerweise mindestens 8 Farben. Oft unterstützt das Textfenster jedoch 16 oder mehr Farben, obwohl die Variable TERM auf einen Bezeichner gesetzt ist, der nur 8 unterstützte Farben angibt. In diesen Fällen kann es sinnvoll sein, die Variable TERM auf einen anderen Wert zu setzen:

xtermwird in den meisten Fällen mit Unterstützung für 16 Farben erstellt. Es kann auch mit Unterstützung für 88 oder 256 Farben erstellt werden (aber nicht beides). Sie können versuchen, TERM entweder auf xterm-16color, xterm-88color oder xterm-256color einzustellen. rxvt

rxvtwird oft mit Unterstützung für 16 Farben erstellt. Sie können versuchen, TERM auf rxvt-16color einzustellen. konsole

konsolewird auch oft mit Unterstützung für 16 Farben erstellt. Sie können versuchen, TERM auf konsole-16color oder xterm-16color einzustellen.

Nachdem Sie TERM festgelegt haben, können Sie es überprüfen, indem Sie „msgcat --color=test“ aufrufen und prüfen, ob die Ausgabe wie eine sinnvolle Farbtabelle aussieht. Die Umgebungsvariable TERM enthält eine Kennung für die Funktionen des Textfensters. Sie können eine detaillierte Liste dieser Funktionen erhalten, indem Sie den Befehl „infocmp“ verwenden und „man 5 terminfo“ als Referenz verwenden.

Antwort4

Ich denke, es ist erwähnenswert, dass Sie die Antwort auf Ihre ursprüngliche Frage herausfinden können, indem Sie ausführen ps -p $$, d. h. herausfinden, welcher Prozess mit der aktuellen PID ausgeführt wird. Beispielausgabe ist:

    PID TTY          TIME CMD
3045221 pts/17   00:00:00 bash

was ziemlich deutlich macht, um welches Terminal es sich handelt.

verwandte Informationen