¿Qué protocolo / estándar utilizan los terminales?

25

Me preguntaba cómo se comunica la "GUI" de una aplicación de línea de comandos a través de una red. La mayoría de las veces, es bastante simple (texto sin formato / entrada) pero a veces es más complejo (aptitud).

¿Está definido por algún tipo de estándar para que cualquiera pueda escribir su propio terminal y que todas las implementaciones de terminal se comporten de la misma manera (colores, posicionamiento, etc.)?

Olivier Lalonde
fuente

Respuestas:

46

Los programas de consola generalmente usan maldiciones o uno de sus sucesores¹ para construir el tipo de interfaces de usuario de texto de las que estás hablando.

Estas bibliotecas usan una de dos bases de datos, llamadas termcapy terminfo.² Estas bases de datos contienen mapas que le indican a la biblioteca qué códigos enviar para obtener las acciones deseadas con una gran cantidad de tipos de terminales diversos. La gran mayoría de los tipos de terminales que encontrará definidos en estas bases de datos no sobrevivieron a los días de los terminales reales , por lo que ahora solo son de interés histórico.

Terminales ANSI

Los modernos emuladores de terminal Unix³ utilizan el protocolo ANSI X3.64 o una de sus variantes posteriores:

  • ANSI X3.64 : un estándar para el control de "terminales de vidrio", a diferencia de los teletipos , se basa en secuencias especiales de caracteres que el terminal remoto interpreta. Por ejemplo, si el cuadro Unix quiere decirle a un terminal compatible con ANSI X3.64 que mueva su cursor a la esquina superior izquierda de la pantalla, envía los caracteresESC [ 1 ; 1 H. Los primeros dos caracteres le dicen al terminal que espere una secuencia de control, los 1 son la fila y la columna, yHes el comando que significa "mover el cursor".

    Curiosidades: muchos BBS de PC también usaban códigos ANSI. ( Todavía lo hago , en realidad).

  • DEC VT100 : El primer terminal de vidrio realmente compatible con ANSI fue el VT100 de Digital Equipment Corporation. Al probar el estándar de jure de ANSI en el mercado, estableció un estándar de facto que todavía es importante hoy en día.

    A veces se ve esto llamado el protocolo VT102, que es una versión posterior de VT100 de menor costo y, por lo tanto, más popular, más todas las opciones de expansión disponibles integradas.

    Los protocolos de terminal DEC son una serie compatible con versiones anteriores, que se extiende desde el primer modelo compatible con ANSI introducido en 1978 (el VT100) hasta los modelos de la serie VT500 producidos por Boundless Technologies después de comprar el negocio de terminales de DEC en 1995. (Boundless es ahora fuera del negocio, pero sus terminales todavía aparecen en el mercado usado de vez en cuando).

  • xterm : una especie de amalgama de ANSI y los estándares VT-lo que sea. Cada vez que usa un emulador de terminal GUI comoxtermo uno de sus derivados, generalmente también usa elxtermprotocolo de terminal, generalmente el más modernoxterm-coloro lasxterm-color256variantes.

  • Linux : la consola Linux también utiliza una variante extendida del protocolo de terminal ANSI, en el mismo espíritu que losxtermprotocolos. La mayoría de sus extensiones tienen que ver con las diferencias entre una PC y un terminal de vidrio. Por ejemplo, el teclado de IBM tiene algunas teclas que no están en un DEC VT, lo que sea. (Y viceversa.)

    Algunos sistemas Unix también tienen su propio protocolo de terminal de consola. Existe la scoansivariante ANSI X3.64 para SCO Unixes, por ejemplo.

Un programa típico de emulador de terminal es una especie de chucho y no emula exactamente ningún modelo de terminal. Puede admitir el 96% de todas las secuencias de escape DEC VT a través del VT320, pero también admite extensiones como el color ANSI (una función VT525) y un número arbitrario de filas y columnas. Es posible que no se pierda el 4% de los códigos que no comprende si sus programas no necesitan esas funciones, aunque haya dicho curses(o lo que sea) que desea que los programas que lo usan usen el protocolo VT320. Tal programa podría anunciarse como compatible con VT320, aunque, estrictamente hablando, no lo es.

Terminales no ANSI

Hay algunos otros estándares notables que a veces te encuentras:

  • Wyse : uno de los primeros productores independientes de terminales de vidrio, Wyse comenzó a fabricar terminales a principios de la década de 1980 antes de que la informática de la estación de trabajo comenzara a desplazar a las minicomputadoras. Aunque los terminales Wyse pudieron emular el VT100 y otros protocolos de terminales populares, también tenían sus propios códigos nativos.

  • IBM 3270 : aunque este no es estrictamente un tipo de terminal "Unix", la necesidad de conectar los sistemas Unix a los mainframes de IBM condujo a la creación de programas emuladores de terminales de la serie IBM 3270, que aún puede encontrar en uso. Los emuladores para losterminalesposteriores de la serie IBM 5250 también son bastante comunes, y se usan con mayor frecuencia en estos días para conectarse aminicomputadoras AS / 400 y System i .

  • Tektronix 4014 : antes de que las PC y las estaciones de trabajo desplazaran en gran medida los terminales de vidrio y, por lo tanto, convirtieran los gráficos de mapa de bits en una característica estándar, había terminales gráficos costosos que dibujaban gráficos en la pantalla en respuesta a comandos de texto similares a las secuencias de escape descritas anteriormente. Probablemente el más popular de estos fue la serie Tektronix 4010.

    Eran bastante divertidos de usar. Puede escribir un programa que dibuje un gráfico, pero luego, en lugar de simplemente ejecutarlo para dibujar en su terminal local, puede redirigir su salida a un archivo:

    $ ./my4014program > my-neat-graphic
    

    Luego puede enviar ese archivo a otra persona, y ellos pueden cathacerlo en su terminal Tek para ver el gráfico sin tener su programa. Parte del encanto era la lentitud de estos terminales en el dibujo, por lo que podía ver la acumulación de gráficos durante varios segundos.

Trabajando con la emulación de terminal Unix hoy

Puede averiguar qué estándar de terminal le está pidiendo a las bibliotecas cursesusar utilizando la TERMvariable de entorno:

$ echo $TERM
xterm-color

Cuando va ssha otro sistema, la TERMvariable se transporta para que la caja remota de Unix sepa cómo comunicarse con su terminal local.

Debido a que muchos de estos protocolos son variantes ANSI X3.64, y porque los estándares de codificación de caracteres ASCII y UTF-8 se ocupan de mucho más, una TERMvariable incorrecta no suele ser catastrófica. Las cosas que tienden a romperse son teclas extendidas como Inicio y Re Pág, Alt-cualquier combinación de teclas y características de visualización tipográficas como color, negrita, etc.


Notas al pie:

  1. Más comúnmente, ncurses .

    También hay competidores directos a la cursesAPI, como S-Lang .

  2. AT&T se promulgó terminfocomo un reemplazo para la termcapbase de datos de BSD , y tuvo mucho éxito en reemplazarla, pero todavía hay programas que todavía usan la termcapbase de datos anterior. Es una de las muchas diferencias entre BSD y AT&T que aún puede encontrar en los sistemas modernos.

    Mi caja macOS no tiene /etc/termcap, pero sí /usr/share/terminfo, mientras que una instalación estándar de FreeBSD es al revés, a pesar de que estos dos sistemas operativos a menudo son bastante similares en el nivel de línea de comandos.

  3. minicom, xterm, mintty, Terminal de GNOME , Terminal.app , etc.

  4. Los programas de Unix escritos correctamente no emiten estas secuencias de escape directamente. En su lugar, usan una de las bibliotecas mencionadas anteriormente, diciéndole que "mueva el cursor a la posición (1,1)" o lo que sea, y la biblioteca emite los códigos de control de terminal necesarios en función de la TERMconfiguración de la variable de entorno. Esto permite que el programa funcione correctamente sin importar en qué tipo de terminal lo ejecute.

  5. Los terminales de texto antiguos tenían muchas características extrañas que los programas no usaban mucho, por lo que muchos programas populares de emuladores de terminales simplemente no implementan estas características. Las omisiones comunes son compatibles con los gráficos de sixel y los modos de texto de doble ancho / doble altura.

    El responsable de mantenimiento de xtermescribió un programa llamado vttestpara probar emuladores de terminal VT como xterm. Puede ejecutarlo contra otros emuladores de terminal para averiguar qué características no son compatibles.

Warren Young
fuente