¿Qué son los pseudo terminales (pty / tty)?

92

Esta podría ser una pregunta realmente básica, pero quiero entenderla a fondo.

  1. ¿Qué es un pseudo terminal? (tty / pty)
  2. ¿Por qué los necesitamos? ¿Cómo se presentaron y cuál era la necesidad?
  3. ¿Están desactualizados? ¿Ya no los necesitamos? ¿Hay algo que los haya reemplazado?
  4. ¿Algún caso de uso útil?

Lo que hice:

  1. Leer páginas de manual: obtuve información pero no la imagen exacta.
  2. Intenté leer sobre ellos desde la programación de la red Unix por Richard Stevens. Tengo algo de información pero no la why?parte.
hari
fuente
Creo que también, especialmente si aquí no surgen problemas especializados como openpty / forkpty.
Intenté marcarlo para la migración, pero Linux / Unix no es un objetivo de migración válido. Al intentar el descenso de gradiente, Super User ya es un objetivo ligeramente mejor que este sitio, y tal vez puedan enrutarlo a un sitio aún mejor.
77
Este es un resumen bastante bueno: linusakesson.net/programming/tty/index.php
nos
@nos: ¡guau! Ese es un enlace increíble. Lo que estaba buscando. Muchas gracias :)
hari
El Capítulo 62 y el Capítulo 64 de la Interfaz de Programación de Linux pueden ser útiles
zjk

Respuestas:

42
  1. Un dispositivo que tiene las funciones de un terminal físico sin ser realmente uno. Creado por emuladores de terminal como xterm. Más detalles en la página de manual pty (7).
  2. Tradicionalmente, UNIX tiene un concepto de terminal de control para un grupo de procesos, y muchas funciones de E / S se crean teniendo en cuenta los terminales. Los pseudoterminales manejan, por ejemplo, algunos caracteres de control como ^ C.
  3. No están desactualizados y se usan en muchos programas, incluido ssh.
  4. ssh
thiton
fuente
1
Gracias @thiton. ¿Puedes por favor elaborar tu ejemplo de ssh? ¿Cómo se usa pty / tty? ¿Cómo juega el papel de maestro / esclavo ssh?
hari
3
ssh asigna una pty para el shell que crea. El shell está conectado al extremo esclavo y, por lo tanto, puede confiar en todas las capacidades de un terminal normal (por ejemplo, termcap si no recuerdo mal), y el demonio ssh se conecta al extremo maestro y envía y recibe su entrada allí.
27

La respuesta está en el nombre: "Pseudo" que significa "no genuino pero que tiene la apariencia de".

Con los primeros terminales, siempre había una pieza de hardware conectada con el dispositivo asociado, ya sea hardware de pantalla o un puerto serie.

Con xwindows, telnet y ssh, surgió la necesidad de software "Pseudodispositivos" para hacer el trabajo de reemplazar el hardware de la pantalla. Son "Pseudo Terminales" ... software que emula el hardware del Terminal, manejando la entrada y la salida de la misma manera que lo haría un dispositivo físico para que el software conectado no sepa que no hay un dispositivo real conectado.

gview
fuente
Debido a que ahora tenemos muchas aplicaciones que necesitan acceder a la misma pieza de hardware, ¿cada aplicación está usando el hardware a través del terminal "pseudo"?
hari
Extendí un poco la respuesta, espero que se aclare.
No, simplemente ya no tenemos ese tipo de hardware. xterm emula un terminal clásico, eso es todo.
@thiton: Cuando dices emulates, esa es la parte del software, ¿no?
hari
1
¿Entonces usar la palabra "terminal" en el contexto de UNIX hoy es realmente incorrecto? ¿Porque todo es un "pseudo-terminal"?
A. Sallai
11

Los pseudo terminales son emuladores para líneas seriales. Proporcionan puntos finales para telnet, ssh y shells xterm.

Joshua
fuente
2
Y son reliquias antiguas (en realidad, las aplicaciones shells / text todavía están interactuando a través de un dispositivo que emula un escritor de tipo tele a través de una línea en serie como funcionaban hace 40 años ...) Todavía los necesitamos porque no hay reemplazo: - (
nos
Bueno, si consideras la terminal, no creo que necesites mucho más que un flujo de cartas entrando y saliendo ...
Diego Sevilla
44
@Diego Sevilla El inventor original de Unix eliminó tty / ptys en el Plan 9, y allí una terminal prácticamente solo usa una secuencia de datos de entrada / salida. Pero en * nix, las consolas y los emuladores de terminal siguen utilizando los ttys para, por ejemplo, controlar el tamaño de la terminal, el control de flujo, el almacenamiento en línea, los eventos de teclas especiales y otras cosas.
nos
44
@nos: Resulta que no son las antiguas reliquias que nos hacen creer. Intentar prescindir de ellos en Windows es bastante doloroso al final. El uso de la comunicación remota de PowerShell se ve obstaculizado por una cosa: los programas de consola interactivos no funcionan y no se pueden arreglar para que funcionen correctamente. No hay posibilidad de un editor de texto razonable como DOS EDIT o vi.
Joshua
2
@Joshua Otra evidencia de lo contrario es que los diseñadores originales de Unix crearon el sistema operativo Plan 9, donde eliminaron por completo los ttys, pero lograron el control remoto de esa manera (y mucho más) muy bien.
nos