¿Cómo resolver el problema de que una pantalla de Terminal está en mal estado? (generalmente después de un cambio de tamaño)

76

A veces, una pantalla de terminal está desordenada, y cuando usamos man lspara leer las páginas de manual, o presionamos la flecha ARRIBA para ir a los comandos anteriores en el historial, la pantalla mostrará los caracteres no como el lugar correcto. (por ejemplo, trate el final de la pantalla como si estuviera en el medio de la pantalla).

El comando resetse prueba y no funcionaría. Una forma que funciona es cerrar sesión o cerrar la ventana, y cambiar el tamaño de la ventana primero, y luego hacerlo ssh(o cerrar esa pestaña, y cambiar el tamaño de la ventana, y luego abrir una nueva pestaña para obtener un nuevo shell).

Pero de esta manera, perderemos todo lo que hicimos anteriormente, como iniciar una consola de máquina virtual, etc. Entonces, si no cerramos el shell, ¿hay alguna forma de solucionar este problema?

(Esto sucedió antes dentro de Fedora, y también para un Macbook sshen una caja RHEL 5.4).

Actualización: ahora recuerdo cómo sucedió en Fedora: abrí un terminal e hice un FreeVM para usar una consola de una máquina virtual (un shell). Creo que tenía un tamaño de 80 x 25 y luego, después de un tiempo, cambié el tamaño del Terminal a 130 x 50 aproximadamente, y luego el "caparazón interno" (de la VM) comenzó a comportarse de manera extraña).

nopole
fuente
¿Qué emulador de terminal estás usando? Suena roto si resetno resuelve el problema.
jordanm
cualquier programa de Terminal dentro de Fedora ... y el programa de Terminal predeterminado en Mac OS X Lion.
nopole
Consulte la actualización anterior para ver cómo sucedió en Fedora
nopole
3
El encantamiento mágico es ^Jreset^J, donde ^Jsignifica presionar ctrl-J. O (en terminales gráficos) puede probar el Resetbotón. Además, algunos programas simplemente no están preparados para que los tamaños de terminal cambien debajo de ellos (sí, el software antiguo está vivo y funcionando) o simplemente se portan mal cuando el terminal se vuelve demasiado pequeño.
vonbrand
1
Mis problemas se derivaron de bash que calculó mal la longitud del mensaje porque tenía códigos de color; Me faltaban los caracteres de escape \ [y \] - vea unix.stackexchange.com/questions/105958/…
qneill

Respuestas:

93

Si está usando bash, verifique si la opción "checkwinsize" está activada en su sesión usando

shopt | grep checkwinsize

Si no consigues

checkwinsize    on

luego actívelo con

shopt -s checkwinsize

La documentación de Bash dice para el atributo "checkwinsize":

"Si está configurado, Bash verifica el tamaño de la ventana después de cada comando y, si es necesario, actualiza los valores de LÍNEAS y COLUMNAS".

Si te gusta la configuración, puedes activarla checkwinsizeen tu ~/.bashrc.

  • Activar: shopt -s checkwinsize
  • Para desactivar: shopt -u checkwinsize
Arcadien
fuente
66
Esto no sucede para resolver mi problema, pero esta es una buena respuesta general, así que +1 de todos modos. Creo que mi problema se relaciona con la emulación de Windows (?) Cuando sshing en un servidor Linux.
geneorama
Al principio parecía que no funcionaba cuando usaba las flechas hacia arriba para ver el historial, pero justo después del primer comando ejecutado, solucionó todo. Usando terminador en mi caso. Gracias +1
kstenger
esto funcionó para mí, pero solo desactivando checkwinsize. por alguna razón, LINES = 24 se configuraba después de cada comando a pesar de que mi ventana (que contenía una sesión picocom) era mucho más alta.
Michael
19

Puedes probar Ctrl+ L. Borra y / o vuelve a dibujar la pantalla del terminal, según el programa.

BlueBomber
fuente
3
pero no resuelve el problema permanentemente ...
nopole
Creo que quería decir que si presiona CTRL L, entonces la línea está bien por el momento, pero si edita la línea nuevamente (o en la siguiente línea de comando que escribe), entonces el problema sigue ahí
nopole
11

Agregar estas opciones a Docker Exec parecía resolver mi problema

-e COLUMNS=$COLUMNS -e LINES=$LINES -e TERM=$TERM
Orán Agra
fuente
1
¿Fuiste tú quien hizo la pregunta hace 5 años?
Archemar
3
Puedo decirte que no lo es: "docker" realmente no encaja con "hace 5 años". Docker aún no se lanzó en enero de 2013 ;-)
jplandrain
8

Tuve el mismo problema y ninguna de las recetas anteriores funcionó para mí porque creo que mi bash nunca recibe las SIGWINCHseñales, que están atrapadas por su proceso principal.

Finalmente encontré una solución. Agregué a mi .bashrc:

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

Ahora, cada vez que recibo un nuevo aviso, mi ventana se reajusta.

Gracias a UKmonkey por la mejora de PROMPT_COMMAND.

Anthony Scemama
fuente
2
Yo personalmente iría con export PROMPT_COMMAND="resize &>/dev/null; $PROMPT_COMMAND"por lo que el viejo símbolo del sistema, lo que mi ser será preservado
UKMonkey
Simplemente ejecutaría redimensionar manualmente cuando sea necesario. Interrogar la consola por tamaño puede ser lento. Hacerlo cada comando parece excesivo, y generalmente sabes cuándo se ha cambiado el tamaño.
Conrad Meyer
6

Solo quería agregar a lo que Arcadien ya había mencionado. La habilitación de checkwinsize hace el truco, pero para mí, lo que se necesitaba era restablecer el tamaño de la ventana para que funcione correctamente. Supongo que el checkwinsize estaba destinado a eliminar esto, pero aún así, vale la pena intentarlo. Simplemente intente cambiar el tamaño de la ventana o desmarcarla y maximizarla, publique esta opción.

saketrp
fuente
1
Lo creas o no, esto fue todo lo que se necesitó para arreglar el mío. Es gracioso porque probé todo lo demás primero.
taranaki
4

Me enfrento al mismo problema de vez en cuando usando zsh en macOS. Una simple invocación de resetcomando configura el terminal a mi gusto nuevamente.

no cortado
fuente
Entonces, el OP mencionó que resetno estaba funcionando para ellos, y este fue de hecho el punto de la pregunta ...
Stephen Rauch
OP ha mencionado que no funciona en sabores de Linux. Enfrenté el problema en MacOS Sierra y resettrabajé en este caso. Agregué esta respuesta para ayudar a cualquiera que se enfrente al mismo problema en una MacOS y no esté al tanto del resetcomando.
nonocut
reset¡funciona en Windows Putty con Ubuntu 16.04!
musbach 05 de
reset funcionó en ubuntu 16.04 zsh
A.Wan
2

Tuve el mismo problema que tú y esto es lo que hice:
tengo una .profileconfiguración en mi usuario, así que ahí es donde hago todos mis cambios.

Hay un paquete llamado xtermque está disponible a través de apt-getNo lo sé yum. Pero hice una instalación local desde la fuente ya que no tengo privilegios de instalación. ENLACE: http://invisible-island.net/xterm/#download

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

Exporté la ruta en mi perfil y la invoqué en el mismo lugar

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

Así que ahora cada vez que inicio sesión, el tamaño del terminal se establece en consecuencia al cambiar el tamaño.

Plegado Cromatina
fuente
1

Bueno, ese es un problema común y debería haber una solución simple.

Si otras medidas como Ctrl + A Ctrl + L no funcionan, intente usar stty:

  1. Ctrl + T: abre una nueva pestaña con un shell local.
    O: Salga de la pantalla (Ctrl + AD para separar) y cierre sesión en su sesión SSH.
  2. stty -a | grep rows: Obtiene el número de filas y columnas.
    Ejemplo:speed 38400 baud; rows 33; columns 133; line = 0;
  3. Regrese a su pestaña remota o inicie sesión y vuelva a conectar la pantalla. La sttysalida debería ser diferente.
    Ejemplo:speed 38400 baud; rows 47; columns 177; line = 0;
  4. Escriba stty rows Ny stty columns Ndonde N es el número "real" (fuera de la pantalla). Ejemplo:$ stty rows 33; stty columns 133

Si usa Terminator , puede omitir los primeros tres pasos porque muestra el número de columnas y filas en la parte superior.

No tiene que cambiar el tamaño de las ventanas de su terminal para encontrarse con esto. Los administradores generalmente inician sesión desde diferentes computadoras y cuando los monitores conectados difieren en tamaño (resolución), una ventana maximizada tendrá un tamaño diferente en cada computadora. En realidad, es bastante difícil no toparse con esto con frecuencia.

Y el resultado no es solo que algunas páginas de manual no se muestran correctamente. Es prácticamente cualquier cosa que use un buscapersonas: a menudo faltan las primeras líneas (por ejemplo). Y ni siquiera piense en usar VIM en un terminal tan desalineado. Desea resaltar la línea 3 (V) para reemplazarla, pero cuando lo hace, el texto resaltado es el de otra línea.

básico6
fuente
CentOS no parece tener un cambio de tamaño: use "stty filas 66" para hacer el truco.
Russ
0

Tratar stty sane. Debería hacer lo que necesita.

phil294
fuente