Die Meldungen
Alle haben dieselbe Ursache. Jedes Programm meldet sie auf seine Weise:
| Programm | Ausgabe |
|---|---|
nano, htop | Error opening terminal: xterm-256color. |
clear | 'xterm-256color': unknown terminal type. |
tput | tput: unknown terminal "xterm-256color" |
tmux | missing or unsuitable terminal: xterm-256color |
less | WARNING: terminal is not fully functional |
Eine andere Meldung, TERM environment variable not set., bedeutet, dass die Sitzung gar kein Terminal hat, etwa bei einem Befehl mit ssh server clear. Fügen Sie in diesem Fall -t hinzu. Siehe -t und -T.
Die Ursache bestätigen
Auf dem Server, nach der Anmeldung:
echo "$TERM"
infocmp "$TERM" > /dev/null; echo $?
Ein Fehlschlag sieht so aus:
infocmp: error: no match in terminfo database for terminal type "xterm-256color"
Neuere Terminals bringen oft einen eigenen TERM-Namen mit, und viele Server kennen ihn nicht. Ein fehlendes xterm-256color ist seltener und deutet auf ein minimales Image oder einen Container hin, in dem die terminfo-Dateien weggelassen wurden.
Lösung 1: den Eintrag auf den Server kopieren
Führen Sie das auf Ihrem eigenen Rechner aus, in dem Terminal mit dem Problem. root wird nicht gebraucht:
infocmp -x | ssh user@server -- tic -x -
infocmp -x gibt den Eintrag für Ihr aktuelles TERM aus, und tic kompiliert ihn auf dem Server nach ~/.terminfo. Sie behalten alle Funktionen Ihres Terminals, und die Lösung hält auch bei künftigen Anmeldungen. Warnungen von tic sind meist harmlos, testen Sie es also nach einer neuen Anmeldung:
clear
tput cols
Es gilt nur für diesen einen Benutzer. Damit es für alle funktioniert, auch für root unter sudo, installieren Sie es als root aus einer Datei, was in einen Systemordner schreibt:
infocmp -x > term.ti
scp term.ti user@server:
ssh -t user@server 'sudo tic -x term.ti'
Antwortet tic auf dem Server mit Fehlern wie Illegal character, ist das infocmp Ihres Macs zu alt. Das betrifft macOS vor Sonoma: Nehmen Sie das aus dem Homebrew-Paket ncurses.
Lösung 2: einen gängigen Namen senden
Nutzen Sie das, wenn Sie auf dem Server nichts schreiben können, etwa bei einem gemeinsamen Konto oder einem Gerät. Für eine Verbindung:
ssh -o SetEnv=TERM=xterm-256color user@server
Oder dauerhaft für diesen Host in ~/.ssh/config:
Host legacy
HostName 203.0.113.10
SetEnv TERM=xterm-256color
Weitere Optionen pro Host finden Sie in diesen Beispielen für die SSH-Config-Datei.
Der Server braucht dafür keine AcceptEnv-Zeile, da TERM die Ausnahme von dieser Regel ist. Auf Ihrem Client wird OpenSSH 8.7 oder neuer gebraucht. Setzen Sie es bei älteren Clients für den Befehl:
TERM=xterm-256color ssh user@server
Ihre Sitzung läuft dann als einfaches xterm. Fast alles funktioniert, aber Funktionen, die Ihrem Terminal eigen sind, etwa formatierte Unterstreichungen, nicht.
Sind Sie bereits angemeldet, funktioniert dies für die aktuelle Shell:
export TERM=xterm-256color
Lösung 3: das Paket installieren
Distributionen liefern zusätzliche Einträge in einem eigenen Paket. Unter Debian und Ubuntu:
sudo apt install ncurses-term
Unter Debian 13 kamen damit viele Einträge hinzu, aber nicht die einiger neuerer Terminals, die in eigenen Paketen liegen. Unter Alpine suchen Sie nach ncurses-terminfo. Für ein Terminal, das das Paket nicht abdeckt, nehmen Sie Lösung 1.
Das Problem nicht in der Shell-Konfiguration verstecken
Setzen Sie TERM bedingungslos in ~/.bashrc, zerstört das richtige Werte bei jeder künftigen Anmeldung, auch in tmux. Müssen Sie es dort setzen, tun Sie es nur, wenn der aktuelle Wert unbekannt ist:
infocmp "$TERM" >/dev/null 2>&1 || export TERM=xterm-256color
Fragen
Welcher TERM-Wert funktioniert auf den meisten Servern?
xterm-256color ist auf fast jedem aktuellen Linux-Server vorhanden. Auf sehr alten oder minimalen Systemen sind xterm oder vt100 sicherer.
Brauche ich root, um unknown terminal type zu beheben?
Nein. infocmp -x | ssh user@server -- tic -x - installiert den Eintrag in ~/.terminfo für Ihren Benutzer. root brauchen Sie nur, um ihn für alle Benutzer zu installieren.
Warum meldet tmux missing or unsuitable terminal?
Der Server hat keinen terminfo-Eintrag für Ihren TERM. Es helfen dieselben Lösungen: den Eintrag kopieren oder mit einem gängigen Namen wie xterm-256color verbinden.