Es una situación que me ha sucedido con bastante frecuencia: después de presionar (con una intención diferente) Ctrl-Sen un terminal, la interacción (entrada o salida) se congela. Probablemente sea una especie de "bloqueo de desplazamiento" o lo que sea.
¿Cómo descongelo el terminal después de esto?
(Esta vez, he estado trabajando apt-shell
dentro de un bash
interior, no urxvt
estoy seguro de cuál de ellos es responsable del manejo especial de Ctrl-S: estaba buscando el historial de comandos al revés C-r, como de costumbre para readline, pero luego quería volver "atrás" "avanza a través de la historia con lo habitual, al menos en Emacs-- C-s( 1 , 2 , 3 ), pero eso provocó que el terminal se congele. Bueno, el desplazamiento / paginación para ver cosas pasadas todavía funciona en el terminal, pero no hay interacción con los procesos que se ejecutan allí)
vim
y presioné Ctrl-S para guardar mis ediciones. Uh-ohXD
Respuestas:
Ctrl-Q
Para deshabilitar esto por completo, pegue
stty -ixon
un script de inicio. Para permitir que cualquier tecla haga que las cosas vuelvan a fluir, usestty ixany
.ps: No es ni el terminal ni el shell lo que hace esto, sino el controlador de terminal del sistema operativo.
fuente
Ctrl-C
; ¿Funciona también? (Y en otro lugar , sugirieronCtrl-Q
, igual que tú.)stty
)Ctrl-S
y luego seCtrl-Q
reanudó.Ctrl- De Qhecho es la respuesta. Pensé en incluir un poco de historia de esto que es demasiado larga para caber en los márgenes de la respuesta correcta de ak2 .
En la Edad Media, un terminal era un gran equipo que se conectaba a un dispositivo remoto (originalmente otro terminal porque los teletipos eran mucho más fáciles de aprender a operar que una tecla telegráfica) a través de un cable largo o mediante líneas telefónicas con módems. Cuando Unix se estaba desarrollando, el código ASCII ya estaba bien establecido (aunque el código EBCDIC de la competencia de IBM todavía era una fuerza a tener en cuenta).
Los primeros terminales mantuvieron un registro impreso de cada personaje recibido. Siempre que los caracteres lleguen no más rápido de lo que el cabezal de impresión podría escribirlos, al menos. Pero tan pronto como los terminales basados en CRT fueron posibles, surgió el problema de que solo unas 25 líneas cabían en el CRT, y 25 líneas de 80 caracteres representaban suficiente RAM que nadie pensó seriamente en proporcionar más RAM para los caracteres que se habían desplazado desde la parte superior de la pantalla.
Por lo tanto, se necesitaba cierta convención para indicar que el final del envío debería detenerse para permitir que el lector se pusiera al día.
El código ASCII de 7 bits tiene 33 puntos de código dedicados a caracteres de control (0 a 31 y 127). Algunos de los que tenían propósitos muy bien establecidos, tales como
NUL
(guía de la cinta de papel en blanco para roscar, lagunas, y empalmes),DEL
( "tachado" personajes en la cinta de papel indicadas por la perforación de los siete agujeros),BEL
(ding!),CR
,LF
, YTAB
. Sin embargo, cuatro fueron definidos explícitamente para controlar el dispositivo terminal de sí mismo (DC1
aDC4
aka Ctrl + Q, Ctrl + R, Ctrl + S y Ctrl + T).Mi mejor conjetura es que algún ingeniero pensó que (a medida que avanza la mnemotecnia), "S" para "Detener" y "Q" para "Continuar" no estaban tan mal, y se les asignó el
DC3
significado de "por favor, dejen de enviar" yDC1
de "ok , continuar enviando ahora ".Incluso esa convención ya estaba bien establecida cuando Unix estaba dejando el nido en los Laboratorios Bell para salir al mundo.
La convención se conoce como control de flujo de software y es extremadamente común en dispositivos seriales reales. No es fácil de implementar correctamente, ya que evita el uso de cualquiera de esos caracteres para cualquier otro propósito en el canal de comunicaciones, y la señal de Stop debe manejarse antes de los caracteres recibidos pendientes para evitar enviar más de lo que el extremo receptor puede encargarse de.
Si es práctico, se prefiere ampliamente utilizar señales adicionales fuera de banda del flujo de datos en serie para el control de flujo. En las conexiones cableadas directamente que pueden permitirse los cables de señal adicionales, encontrará un apretón de manos de hardware en uso, que libera esos caracteres para otros usos.
Por supuesto, la ventana de terminal de hoy no está utilizando un puerto serie físico real, tiene barras de desplazamiento y realmente no necesita el protocolo de comunicación. Pero la convención persiste.
Recuerdo la afirmación de que Richard Stallman recibió quejas sobre su asignación Ctrl + S a la búsqueda incremental en las primeras versiones de emacs, y que no simpatizaba con ningún usuario que tuviera que depender de una conexión controlada por flujo de software de 7 bits.
fuente