Un emulador de terminal , o aplicación de terminal , es un programa informático que emula un terminal de vídeo dentro de otra arquitectura de pantalla. Aunque normalmente es sinónimo de terminal de texto o shell , el término terminal cubre todos los terminales remotos, incluidas las interfaces gráficas. Un emulador de terminal dentro de una interfaz gráfica de usuario suele denominarse ventana de terminal .
Una ventana de terminal permite al usuario acceder a una terminal de texto y a todas sus aplicaciones, como interfaces de línea de comandos (CLI) y aplicaciones de interfaz de usuario de texto (TUI). Estas pueden estar ejecutándose en la misma máquina o en una diferente a través de telnet , ssh , acceso telefónico o mediante una conexión serial directa . En los sistemas operativos tipo Unix , es común tener una o más ventanas de terminal conectadas a la máquina local.
Los terminales generalmente admiten un conjunto de secuencias de escape para controlar el color, la posición del cursor , etc. Los ejemplos incluyen la familia de estándares de secuencia de control de terminal que incluye ECMA-48 , ANSI X3.64 e ISO/IEC 6429 .
En los primeros tiempos de la informática, con la llegada de la informática interactiva, el modelo predominante consistía en una computadora central conectada a múltiples terminales. [1] Esta configuración, conocida como modelo centralizado o mainframe, incluía una potente computadora central que realizaba todas las tareas de procesamiento, mientras que las terminales servían como dispositivos de entrada/salida para que los usuarios interactuaran con el sistema. Estos sistemas se basaban inicialmente en caracteres.
Un terminal orientado a caracteres es un tipo de terminal de computadora que se comunica con su host carácter por carácter, a diferencia de un terminal orientado a bloques que se comunica en bloques de datos. Es el tipo de terminal de datos más común, porque es fácil de implementar y programar. La conexión con la computadora central o el servidor de terminales se logra a través de enlaces seriales RS-232, Ethernet u otros protocolos propietarios .
Los terminales orientados a caracteres pueden ser "tontos" o "inteligentes". Los terminales tontos [2] son aquellos que pueden interpretar un número limitado de códigos de control (CR, LF, etc.) pero no tienen la capacidad de procesar secuencias de escape especiales que realizan funciones como limpiar una línea, limpiar la pantalla o controlar la posición del cursor. En este contexto, los terminales tontos a veces se denominan teletipos de vidrio , ya que esencialmente tienen la misma funcionalidad limitada que un teletipo mecánico. Este tipo de terminal tonto aún se admite en los sistemas modernos tipo Unix estableciendo la variable de entornoTERM
en dumb
. Los terminales inteligentes son aquellos que también tienen la capacidad de procesar secuencias de escape, en particular las secuencias de escape VT52, VT100 o ANSI.Cuando los ordenadores personales se hicieron omnipresentes en la década de 1980, ofrecieron la opción de ejecutar software en el ordenador personal del usuario, lo que proporcionó la oportunidad de reemplazar los costosos y espaciosos terminales de hardware por algo que tuviera funciones adicionales. [3] Inmediatamente estuvo disponible un software que podía emular las funciones de los terminales de hardware en un PC. Ejemplos de este tipo de software para DOS fueron Telix o Telemate, que se publicó en 1988 y podía emular un terminal DEC VT102. [4]
Las estaciones de trabajo , que normalmente ejecutaban versiones de Unix , también se hicieron comunes en la década de 1980. Los sistemas Unix generalmente proporcionaban acceso a la línea de comandos con terminales conectados localmente o por acceso telefónico. Las estaciones de trabajo Unix fueron diseñadas para usarse principalmente a través de una interfaz gráfica de usuario (GUI); para proporcionar acceso a la línea de comandos, la GUI incluía aplicaciones de emulación de terminal que se comportaban como terminales conectados localmente.
Durante la década de 1990, llegaron nuevos sistemas operativos como Windows y OS/2 , que proporcionaron la base técnica para más emuladores de terminal como Telix para Windows, ZOC para OS/2 o PuTTY , que se lanzó inicialmente para Windows en 1998 y que (junto con sus derivados) sigue siendo una opción muy popular hasta el día de hoy. [5]
A pesar del éxito de Linux , especialmente en los centros de datos y servidores en la nube, [6] sigue siendo necesario acceder a ordenadores remotos a través de terminales basados en caracteres. Esto es evidente en el hecho de que hoy en día existen listas de emuladores de terminal que podrían servir como alternativa al mencionado PuTTY que ofrecen más de 100 alternativas. [7] [ dudoso – discutir ]
Se han desarrollado muchos emuladores de terminal para terminales de hardware físico como VT52 , VT100 , VT220 , VT320 , IBM 3270/8/9/E , IBM 5250 , IBM 3179G , Data General D211, Hewlett-Packard HP700/92, Sperry/Unisys 2000-series UTS60 , Burroughs/Unisys A-series T27/TD830/ET1100, ADDS ViewPoint, AT386, Siemens Nixdorf (SNI) 97801, Televideo 925 y Wyse 50/60.
Algunos emuladores de terminal, como xterm , implementan características adicionales que no están presentes en el terminal emulado. [8]
Además, se han desarrollado programas para emular diversos "terminales" de consola del sistema, como la consola de la estación de trabajo Sun y la consola Linux .
Finalmente, algunos emuladores simplemente hacen referencia a un conjunto de estándares, como los estándares para códigos de escape ANSI .
Estos programas están disponibles en muchas plataformas, incluidos DOS , sistemas similares a Unix como Linux y macOS , Windows y sistemas operativos integrados que se encuentran en teléfonos celulares y hardware industrial.
En el pasado, los sistemas Unix y similares utilizaban dispositivos de puerto serie, como los puertos RS-232 , y proporcionaban /dev/*
archivos de dispositivo para ellos. [9]
Con los emuladores de terminal, esos archivos de dispositivo se emulan mediante un par de dispositivos pseudoterminales . Este par se utiliza para emular un puerto físico/conexión al punto final informático del host: el hardware de la computadora proporcionado por las API del sistema operativo, algún otro software como rlogin , telnet o SSH , etc. [10] Por ejemplo, en los sistemas Linux, estos serían /dev/ptyp0
(para el lado maestro) y /dev/ttyp0
(para el lado esclavo) dispositivos pseudoterminales respectivamente.
También hay archivos de consola virtual especiales como /dev/console
. En modo texto, escribir en el archivo muestra texto en la consola virtual y leer desde el archivo devuelve el texto que el usuario escribe en la consola virtual. Al igual que con otras terminales de texto , también hay secuencias de escape especiales , caracteres de control y funciones que un programa puede usar, más fácilmente a través de una biblioteca como ncurses . Para operaciones más complejas, los programas pueden usar llamadas especiales al sistema ioctl de consola y terminal . Se pueden comparar dispositivos usando los patrones vcs ("pantalla de consola virtual") y vcsa ("pantalla de consola virtual con atributos") como /dev/vcs1
y /dev/vcsa1
. [11]
Algunos emuladores de terminal también incluyen secuencias de escape para configurar el comportamiento de la terminal para facilitar una buena interoperación entre la terminal y los programas que se ejecutan dentro de ella, por ejemplo para configurar el pegado con corchetes .
Las consolas virtuales se pueden configurar en el archivo /etc/inittab
leído por init (normalmente inicia el proceso de inicio de sesión en modo texto getty para varias consolas virtuales). X Window System se puede configurar en /etc/inittab
o mediante un administrador de pantalla X. Varias distribuciones de Linux utilizan systemd en lugar de init , lo que también permite la configuración de la consola virtual.
Los programas típicos del sistema Linux utilizados para acceder a las consolas virtuales incluyen:
chvt
para cambiar la consola virtual actualopenvt
para ejecutar un programa en una nueva consola virtualdeallocvt
para cerrar una consola virtual actualmente no utilizadaLos emuladores de terminal pueden implementar una función de eco local , que puede denominarse erróneamente " half-duplex " o, de forma ligeramente incorrecta, "echoplex" (que es formalmente un mecanismo de detección de errores en lugar de una opción de visualización de entrada). [12] [13] [14] [15]
Los emuladores de terminal pueden implementar la edición local, también conocida como "modo línea a la vez". Esto también se conoce erróneamente como " semidúplex ". [ cita requerida ] En este modo, el emulador de terminal solo envía líneas completas de entrada al sistema host. El usuario ingresa y edita una línea, pero se mantiene localmente dentro del emulador de terminal mientras se edita. No se transmite hasta que el usuario indica su finalización, generalmente con la ↵ Entertecla en el teclado o un botón de "enviar" de algún tipo en la interfaz de usuario. En ese punto, se transmite la línea completa. El modo línea a la vez implica eco local, ya que de lo contrario el usuario no podrá ver la línea mientras se edita y construye. [12] [16] Sin embargo, el modo línea a la vez es independiente del modo eco y no requiere eco local. Al ingresar una contraseña, por ejemplo, es posible ingresar línea a la vez con edición local, pero el eco local está desactivado (de lo contrario, se mostraría la contraseña). [17]
Las complejidades del modo línea por línea se ejemplifican con la opción de modo línea por línea del protocolo Telnet. Para implementarlo correctamente, la implementación de la Terminal Virtual de Red provista por el programa emulador de terminal debe ser capaz de reconocer y manejar adecuadamente los eventos de "interrupción" y "aborto" que llegan en medio de la edición local de una línea. [18]
En los terminales asincrónicos, los datos pueden fluir en cualquier dirección y en cualquier momento. En los terminales sincrónicos, un protocolo controla quién puede enviar datos y cuándo. Los terminales basados en IBM 3270 que se utilizan con los ordenadores mainframe de IBM son un ejemplo de terminales sincrónicos . Funcionan básicamente en un modo de "pantalla a pantalla" (también conocido como modo de bloque ). Los usuarios pueden realizar numerosos cambios en una página, antes de enviar la pantalla actualizada a la máquina remota como una única acción.
Los emuladores de terminal que simulan el protocolo 3270 están disponibles para la mayoría de los sistemas operativos, para su uso tanto por parte de quienes administran sistemas como el z9 , como por parte de quienes utilizan las aplicaciones correspondientes como CICS .
Otros ejemplos de terminales síncronos incluyen el IBM 5250 , el ICL 7561, el Honeywell Bull VIP7800 y el Hewlett-Packard 700/92.
Las consolas virtuales , también llamadas terminales virtuales, son terminales de texto emuladas , que utilizan el teclado y el monitor de una computadora personal o estación de trabajo. La palabra "texto" es clave, ya que las consolas virtuales no son terminales GUI y no se ejecutan dentro de una interfaz gráfica. Las consolas virtuales se encuentran en la mayoría de los sistemas tipo Unix . Se utilizan principalmente para acceder e interactuar con servidores, sin utilizar un entorno de escritorio gráfico.
Se puede acceder al contenido actual de la pantalla de /dev/ttyN usando el dispositivo /dev/vcsN (donde "vcs" significa "pantalla de consola virtual"). [...] Desde un programa, normalmente es mejor usar /dev/vcsaN (`pantalla de consola virtual con atributos') en su lugar - comienza con un encabezado que indica el número de filas y columnas y la ubicación del cursor. Véase vcs(4).