web-dev-qa-db-fra.com

Comment résoudre le problème d'un écran de terminal foiré? (généralement après un redimensionnement)

Parfois, un écran de terminal est foiré et lorsque nous utilisons man ls pour lire les pages de manuel, ou appuyez sur la flèche HAUT pour revenir aux commandes précédentes de l'historique, l'écran n'affichera pas les caractères au bon endroit. (par exemple, traitez la fin de l'écran comme une partie au milieu de l'écran).

La commande reset est essayée et ne fonctionnera pas. Une façon qui fonctionne est de vous déconnecter ou de fermer la fenêtre, puis de redimensionner la fenêtre, puis de faire ssh (ou de fermer cet onglet, de redimensionner la fenêtre, puis d'ouvrir un nouvel onglet pour obtenir un nouveau shell ).

Mais de cette façon, nous perdrons tout ce que nous avons fait précédemment, comme le démarrage d'une console de machine virtuelle, etc. Donc, si nous ne fermons pas le shell, existe-t-il un moyen de résoudre ce problème?

(cela s'est déjà produit juste à l'intérieur de Fedora, et aussi pour un Macbook ssh dans une boîte RHEL 5.4).

pdate: Je me souviens maintenant de la façon dont cela s'est passé dans Fedora: j'ai ouvert un terminal et fait un FreeVM pour utiliser une console d'une machine virtuelle (un shell). Je pense qu'il était de taille 80 x 25, puis après un certain temps, j'ai redimensionné le terminal à 130 x 50 environ, puis le "shell interne" (de la VM) a commencé à se comporter bizarrement).

85
nonopolarity

Si vous utilisez bash, vérifiez si l'option "checkwinsize" est activée dans votre session en utilisant

shopt | grep checkwinsize

Si vous n'obtenez pas

checkwinsize    on

puis l'activer avec

shopt -s checkwinsize

La documentation de Bash indique pour l'attribut "checkwinsize":

"S'il est défini, Bash vérifie la taille de la fenêtre après chaque commande et, si nécessaire, met à jour les valeurs de LINES et COLUMNS."

Si vous aimez le paramètre, vous pouvez activer checkwinsize dans votre ~/.bashrc.

  • Activer: shopt -s checkwinsize
  • Pour désactiver: shopt -u checkwinsize
105
Arcadien

Tu peux essayer Ctrl+L. Il efface et/ou redessine l'écran du terminal, selon le programme.

19
BlueBomber

l'ajout de ces options à docker exec semblait résoudre mon problème

-e COLUMNS=$COLUMNS -e LINES=$LINES -e TERM=$TERM
13
Oran Agra

J'ai eu le même problème et aucune des recettes ci-dessus n'a fonctionné pour moi car je crois que mon bash ne reçoit jamais les signaux SIGWINCH, qui sont piégés par son processus parent.

J'ai finalement trouvé une solution. J'ai ajouté à mon .bashrc:

export Prompt_COMMAND="resize &>/dev/null ; $Prompt_COMMAND"

Maintenant, chaque fois que je reçois une nouvelle invite, ma fenêtre est réajustée.

Merci à Kmonkey pour l'amélioration de Prompt_COMMAND.

10
Anthony Scemama

Je rencontre de temps en temps le même problème en utilisant zsh sur macOS. Une simple invocation de la commande reset configure à nouveau le terminal à mon goût.

6
nonocut

Je voulais juste ajouter à ce qu'Arcadien avait déjà mentionné. L'activation de checkwinsize fait l'affaire, mais pour moi, ce qui était nécessaire était de réinitialiser la taille de la fenêtre pour qu'elle fonctionne correctement. Je suppose que le checkwinsize était censé éliminer cela, mais ça valait quand même le coup. Essayez simplement de changer la taille de la fenêtre ou de ne pas l'agrandir et de l'agrandir après cette option.

6
saketrp

J'ai eu le même problème que vous et c'est ce que j'ai fait:
J'ai un .profile configuration dans mon utilisateur, c'est donc là que je fais toutes mes modifications.

Il existe un package appelé xterm qui est disponible via apt-get Je ne connais pas yum. Mais j'ai fait une installation locale à partir des sources car je n'ai pas de privilèges d'installation. LIEN: http://invisible-island.net/xterm/#download

./configure --prefix=/the/path/you/want/to/install/to
make
make install

J'ai exporté le chemin dans mon profil et l'ai invoqué au même endroit

export PATH=$PATH:/the/path/you/want/to/install/to
resize

Alors maintenant, chaque fois que je me connecte, la taille du terminal est définie en conséquence par redimensionnement.

2
FoldedChromatin

Essayez stty sane. il devrait faire ce dont vous avez besoin.

2
phil294

Eh bien, c'est un problème courant et il devrait y avoir une solution simple.

Si d'autres mesures comme Ctrl + A Ctrl + L ne fonctionnent pas, essayez d'utiliser stty:

  1. Ctrl + T: ouvrez un nouvel onglet avec un shell local.
    Ou: Quittez l'écran (Ctrl + A D pour vous détacher) et déconnectez-vous de votre session SSH.
  2. stty -a | grep rows: Récupère le nombre de lignes et de colonnes.
    Exemple: speed 38400 baud; rows 33; columns 133; line = 0;
  3. Revenez à votre onglet distant ou connectez-vous et rattachez l'écran. La sortie stty doit être différente.
    Exemple: speed 38400 baud; rows 47; columns 177; line = 0;
  4. Tapez stty rows N et stty columns N où N est le "vrai" nombre (en dehors de l'écran). Exemple: $ stty rows 33; stty columns 133

Si vous utilisez Terminator, vous pouvez ignorer les trois premières étapes car il affiche le nombre de colonnes et de lignes en haut.

Vous n'avez pas besoin de redimensionner vos fenêtres de terminal pour exécuter cela. Les administrateurs se connectent généralement à partir d'ordinateurs différents et lorsque les moniteurs connectés diffèrent en taille (résolution), une fenêtre maximisée aura une taille différente sur chaque ordinateur. Il est en fait assez difficile de ne pas se rencontrer fréquemment.

Et le résultat n'est pas seulement que certaines pages de manuel ne s'affichent pas correctement. C'est à peu près tout ce qui utilise un pager - les premières lignes sont souvent manquantes (par exemple). Et ne pensez même pas à utiliser VIM dans un terminal aussi mal aligné. Vous voulez mettre en surbrillance la ligne 3 (V) afin de la remplacer, mais quand vous le faites, le texte en surbrillance est celui de une autre ligne.

1
basic6