Cuando uso la consola serie de mi sistema siempre termino con $COLUMNS=80
y $LINES=24
.
Si bien puedo cambiar estas variables manualmente, es algo molesto hacerlo en cualquier momento cuando la ventana del terminal del lado del cliente ha cambiado de tamaño.
Por lo general, me estoy conectando a la consola usando screen /dev/mytty baudrate
.
Cambiar la $TERM
variable de entorno a "pantalla" o "xterm" no ayuda.
¿Tendré que llamar getty
con algunos de ellos en lugar de vt100?
No hace falta decir que todo esto funciona bien cuando me conecto a la misma máquina usando ssh.
fuente
[[ $(tty) == /dev/ttyS0 ]] && trap res2 DEBUG
a una de las configuraciones de perfil de shell (por ejemplo/etc/profile
,~/.bash_profile
). Esto hará que se ejecute después de cada comando (lo que sería bueno si cambia el tamaño de ventanas / paneles con screen / tmux / terminal-emulator).res
yres2
son demasiado lentos para nada más que su uso en el primer inicio de sesión. En mis máquinas, ambos tardan 0.5 segundos en terminar ... haciendo que todos mis comandos parezcan lentos (cuando se usan con DEBUG trap). Whoops! No puedo tener eso. Supongo que voy a instalarxterm
.resize
es muchísimo más rápido, generalmente 0.002seg.busybox
casos parecía ser tan lento para mí.resize
lo que no es una opción.Solo para que conste, aquí está la respuesta a este problema (Usenet ganó):
Las aplicaciones de consola que se ejecutan dentro de las aplicaciones de terminal virtual (
xterm
,rxvt
y amigos) recibiránSIGWINCH
después de una operación de cambio de tamaño ha tenido lugar. Por lo tanto, la aplicación podrá volver a dibujar la ventana, etc. en el controlador de señal correspondiente.Desafortunadamente cuando se usa una consola en serie, no existe tal mecanismo.
Sin embargo, es posible que la aplicación solicite activamente la información actual. tamaño ventana de la consola. Entonces, la segunda mejor opción es hacer esto cada vez que el shell imprime un símbolo del sistema.
Esto se puede lograr compilando primero un ejecutable de cambio de tamaño especial y luego usando lo siguiente en
bashrc
:Por supuesto, esto no cambiará la configuración del tamaño de la consola en una aplicación de consola durante el tiempo de ejecución.
fuente
resize
cual está instalada en su sistema.Los terminales "redimensionables" como tales son el resultado de NAWS (
Negotiate About Window Size
de la opción de tamaño de ventana Telnet RFC 1073 ).Si está conectado directamente a la computadora mediante un puerto serie, no hay negociación involucrada y la computadora no tiene conocimiento directo del tamaño de pantalla de su terminal.
Si una terminal puede negociar el tamaño, la computadora enviará
SIGWINCH
a las aplicaciones que se ejecutan en el terminal, diciéndoles que actualicen su noción del de la pantalla.Cuando la computadora no conoce el tamaño de la pantalla, generalmente establece el tamaño mostrado por
stty -a
(filas y columnas) en cero. Para uso interactivo, esto es un poco hostil, y algunos sistemas usan variables de entornoLINES
yCOLUMNS
para ayudar. Los valores asignados pueden derivarse de la descripción del terminal; más a menudo son simplemente codificados. La convención para estas variables requiere que surtan efecto a menos que se supriman explícitamente, por ejemplo, en lause_env
función de aplicaciones de maldiciones . En el lado positivo, esas variables pueden ser útiles cuando no hay información confiable disponible. En el lado negativo, no existe un método conveniente para alterar esas variables.El
resize
programa (una utilidad provista conxterm
) puede usar la secuencia de escape del informe de posición del cursor estilo VT100 para determinar el tamaño de la pantalla. Esto se puede ejecutar desde la línea de comandos; (de nuevo) no hay una forma conveniente de hacerlo automáticamente. Como efecto secundario,resize
actualiza la información sobre las filas / columnas vistas porstty
. Su uso para proporcionar variables de entorno actualizadas es principalmente útil para casos como este, dóndeLINES
yCOLUMNS
se establecen, y debe actualizarse.fuente
Aquí hay otra solución que funcionó muy bien para mí en mi sistema Linux incorporado (Overo ejecutando Angstrom). Acabo de ejecutarlo desde mi archivo .bashrc. No quería usar redimensionar porque eso requiere instalar algunos paquetes X, y no quería eso.
Decirle a su Raspberry Pi que su terminal tiene más de 24 líneas | Blog de pensamientos superficiales
fuente
En caso de que pueda usar FreeBSD, existe el comando resizewin (1) , que hace exactamente lo que desea.
fuente
Al ejecutar una sesión de shell en una línea en serie, es suficiente llamar al
resize
comando dentro de esa sesión, después de establecer la conexión y después de cada cambio de geometría de terminal.El
resize
comando es parte de xterm pero no depende de X11. Por ejemplo, en Fedora se empaqueta por separado comoxterm-resize
.Cómo funciona: el comando de cambio de tamaño mide la altura / anchura a través de algunos movimientos del cursor y luego envía esos valores al terminal a través de secuencias de escape.
Con un shell como zsh, esto también actualiza automáticamente las variables
LINES
yCOLUMNS
(alternativamente, uno puede evaluar las declaraciones de exportación que los comandos imprimen en stdout).Por qué esto es necesario: con una sesión local o ssh, el terminal puede señalar a la sesión los cambios de geometría (cf. SIGWINCH). Este mecanismo no funciona a través de una conexión en serie.
fuente
Aquí hay una función de cambio de tamaño simple y rápida que funciona solo para bash. Se modifica a partir de resk de phk, haciendo uso de bash
read -d delim
para evitar dejar que el tiempo de espera termine de leer.fuente