En UNIX, un tty (como muchas otras cosas) aparece como un archivo. Los datos escritos en el dispositivo tty van al terminal y los datos que provienen del terminal están disponibles para leer en el tty.
Si el tty es un puerto serie de hardware, los datos escritos en él se envían por cable y los datos que provienen del cable aparecen en el tty.
Si el tty es la consola de video de una máquina, los datos escritos en él se muestran en la pantalla y los datos que provienen del teclado aparecen en el tty.
Si el tty es un pseudo-tty (terminal virtual) conectado a un emulador de terminal X, por ejemplo gnome-terminal
, los datos escritos en él se entregan al software del emulador de terminal X y, a su vez, se muestran en una ventana, mientras que los datos escritos en esa ventana están disponibles para leer en la terminal virtual. Se dice que el software está conectado al extremo "maestro" del pseudo-terminal. Los terminales reales no tienen un extremo "maestro" porque hay un dispositivo real detrás de ellos (como el puerto serie), no un dispositivo virtual implementado por una pieza de software.
Entonces ya puede ver que no tendría sentido pedirle a un emulador de terminal X que opere en un dispositivo tty arbitrario como /dev/ttyS0
(un puerto serie real, en Linux). Debe ser un pseudo-tty.
Pero, ¿puede el emulador de terminal elegir la ID numérica del dispositivo pseudo-terminal que utiliza? En principio, sería posible que un kernel lo permitiera, pero de hecho la interfaz del kernel para asignar un nuevo pseudo-terminal no lo admite: el kernel toma su propia decisión. (En el modelo SysV, los pesudo terminales se crean abriendo un dispositivo especial llamado /dev/ptmx
y el dispositivo pseudo terminal disponible con el número más bajo se asigna automáticamente).
Pero: ¿por qué necesitaría elegir el número del dispositivo pseudo-terminal que se asigna? El núcleo elige uno no utilizado que está garantizado para estar disponible y ser utilizable. ¿Tiene alguna razón por la que preferiría si eligiera una diferente?
En cuanto a usted otra pregunta:
Vi muchos archivos tty en / dev y muchos archivos pts en / dev / pts / No sé por qué hay tantos. ¿Se están utilizando todos?
Depende del sistema. En algunos sistemas, todos los dispositivos pseudo-terminales posibles están pre-creados en /dev/pts
o /dev
, estén o no en uso. En otros, los nodos del dispositivo solo existen si el pseudo-terminal está en uso. Dices que estás usando Ununbu, que usa Linux, que es el último tipo. Entonces, sí, todos los nodos de dispositivos que ve /dev/pts
están actualmente en uso.
Pero para el acceso temporal, no es muy conveniente. Quiero usar socat para reenviar un tty o pty al cliente. Entonces el cliente puede iniciar un terminal con ese pty o tty.
Si desea que socat
cualquier otra pieza de software se conecte al extremo maestro de un pseudo-terminal, entonces necesita que ese software lo respalde específicamente. Pero tienes suerte porque socat
sí. Por ejemplo, si ejecuto:
socat PTY,link=/tmp/socat.pty TCP-LISTEN:2222 &
sleep 1 && ( setsid bash ) </tmp/socat.pty >/tmp/socat.pty 2>&1
Puedo obtener un shell conectándome al puerto 2222 desde otro lugar. ¡Muy peligroso desde el punto de vista de la seguridad!