Les messages
Tous ont la même cause. Chaque programme la signale à sa façon :
| Programme | Sortie |
|---|---|
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 |
Un autre message, TERM environment variable not set., signifie que la session n'a aucun terminal, par exemple pour une commande lancée avec ssh server clear. Ajoutez alors -t. Voir -t et -T.
Confirmer la cause
Sur le serveur, après connexion :
echo "$TERM"
infocmp "$TERM" > /dev/null; echo $?
Un échec ressemble à ceci :
infocmp: error: no match in terminfo database for terminal type "xterm-256color"
Les terminaux récents apportent souvent leur propre nom TERM, et beaucoup de serveurs ne l'ont pas. L'absence de xterm-256color est plus rare, et indique une image minimale ou un conteneur dont les fichiers terminfo ont été exclus.
Solution 1 : copier l'entrée sur le serveur
Lancez ceci sur votre propre machine, dans le terminal qui pose problème. Pas besoin de root :
infocmp -x | ssh user@server -- tic -x -
infocmp -x affiche l'entrée de votre TERM actuel, et tic la compile sur le serveur dans ~/.terminfo. Vous gardez toutes les fonctions de votre terminal, et la solution survit aux connexions suivantes. Les avertissements de tic sont en général sans gravité : testez après une nouvelle connexion :
clear
tput cols
Cela ne s'applique qu'à cet utilisateur. Pour que cela marche pour tout le monde, y compris root sous sudo, installez-la depuis un fichier en root, ce qui écrit dans un dossier système :
infocmp -x > term.ti
scp term.ti user@server:
ssh -t user@server 'sudo tic -x term.ti'
Si tic répond sur le serveur par des erreurs Illegal character, l'infocmp de votre Mac est trop ancien. C'est le cas avant macOS Sonoma : utilisez celui du paquet ncurses de Homebrew.
Solution 2 : envoyer un nom courant
Utilisez ceci quand vous ne pouvez rien écrire sur le serveur, comme un compte partagé ou un équipement. Pour une connexion :
ssh -o SetEnv=TERM=xterm-256color user@server
Ou de façon permanente pour cet hôte, dans ~/.ssh/config :
Host legacy
HostName 203.0.113.10
SetEnv TERM=xterm-256color
D'autres options par hôte se trouvent dans ces exemples de fichier ssh config.
Le serveur n'a besoin d'aucune ligne AcceptEnv pour cela, car TERM est l'exception à cette règle. Il faut OpenSSH 8.7 ou plus récent sur votre client. Sur les clients plus anciens, définissez-le pour la commande :
TERM=xterm-256color ssh user@server
Votre session tourne alors comme un xterm ordinaire. Presque tout marche, mais pas les fonctions propres à votre terminal, comme les soulignements stylés.
Si vous êtes déjà connecté, ceci fonctionne pour le shell en cours :
export TERM=xterm-256color
Solution 3 : installer le paquet
Les distributions fournissent des entrées supplémentaires dans un paquet séparé. Sur Debian et Ubuntu :
sudo apt install ncurses-term
Dans Debian 13, cela a ajouté beaucoup d'entrées, mais pas celles de certains terminaux récents, qui ont leur propre paquet. Sur Alpine, cherchez ncurses-terminfo. Pour un terminal que le paquet ne couvre pas, utilisez la solution 1.
Évitez de cacher le problème dans la configuration du shell
Définir TERM sans condition dans ~/.bashrc écrase des valeurs correctes à chaque future connexion, y compris dans tmux. Si vous devez le définir là, faites-le seulement quand la valeur actuelle est inconnue :
infocmp "$TERM" >/dev/null 2>&1 || export TERM=xterm-256color
Questions
Quelle valeur de TERM marche sur la plupart des serveurs ?
xterm-256color existe sur presque tous les serveurs Linux actuels. Sur des systèmes très anciens ou minimaux, xterm ou vt100 sont plus sûrs.
Faut-il être root pour corriger unknown terminal type ?
Non. infocmp -x | ssh user@server -- tic -x - installe l'entrée dans ~/.terminfo pour votre utilisateur. Root n'est nécessaire que pour l'installer pour tous.
Pourquoi tmux affiche missing or unsuitable terminal ?
Le serveur n'a pas d'entrée terminfo pour votre TERM. Les mêmes solutions s'appliquent : copier l'entrée, ou se connecter avec un nom courant comme xterm-256color.