No UNIX, um tty (como muitas outras coisas) aparece como um arquivo. Os dados gravados no dispositivo tty vão para o terminal e os dados vindos do terminal estão disponíveis para leitura no tty.
Se o tty é uma porta serial de hardware, os dados gravados nele são enviados no fio e os dados vindos do fio aparecem no tty.
Se o tty for um console de vídeo de uma máquina, os dados gravados nele serão exibidos na tela e os dados vindos do teclado aparecerão no tty.
Se o tty é um pseudo-tty (terminal virtual) conectado a um emulador de terminal X, como gnome-terminal
, os dados gravados nele são entregues ao software emulador de terminal X e, por sua vez, são mostrados em uma janela, enquanto dados digitado nessa janela está disponível para leitura no terminal virtual. Diz-se que o software está conectado à extremidade "master" do pseudo-terminal. Os terminais reais não têm um final "mestre" porque há um dispositivo real por trás deles (como a porta serial), não um dispositivo virtual implementado por um software.
Então você já pode ver que não faria sentido pedir a um emulador de terminal X para operar em um dispositivo tty arbitrário como /dev/ttyS0
(uma porta serial real, no Linux). Deve ser uma pseudo-tty.
Mas o emulador de terminal pode escolher o ID numérico do dispositivo pseudo-terminal que ele usa? Em princípio, seria possível que um kernel permitisse isso, mas na verdade a interface do kernel para alocar um novo pseudo-terminal não o suporta: o kernel faz sua própria escolha. (Nos terminais pesudo do modelo SysV são criados abrindo-se um dispositivo especial chamado /dev/ptmx
e o dispositivo de pseudo-terminal disponível de menor numeração é automaticamente alocado.)
Mas: por que você precisa escolher o número do dispositivo pseudo-terminal que é alocado? O kernel escolhe um não utilizado que esteja garantido de estar disponível e utilizável. Você tem uma razão pela qual você preferiria se escolhesse um diferente?
Quanto a você, outra pergunta:
I saw a lot of tty files in /dev and a lot of pts files in /dev/pts/ I don't know why there are so many of them. Are they all being used?
Depende do sistema. Em alguns sistemas, todos os dispositivos pseudo-terminais possíveis são pré-criados em /dev/pts
ou /dev
, estejam eles em uso ou não. Em outros, os nós de dispositivo só existem se o pseudo-terminal estiver em uso. Você diz que está usando o Ununbu, que usa o Linux, que é o último tipo. Então, sim, todos os nós de dispositivos que você vê em /dev/pts
estão atualmente em uso.
But for temporary access, it is not very convenient. I want to use socat to forward a tty or pty to client. Then client can start a terminal with that pty or tty.
Se você quiser que socat
ou qualquer outro software se conecte à extremidade principal de um pseudo-terminal, então você precisa que o software suporte especificamente isso. Mas você está com sorte porque socat
faz. Por exemplo, se eu correr:
socat PTY,link=/tmp/socat.pty TCP-LISTEN:2222 &
sleep 1 && ( setsid bash ) </tmp/socat.pty >/tmp/socat.pty 2>&1
Eu posso obter um shell conectando-me à porta 2222 de algum outro lugar. Muito perigoso do ponto de vista da segurança !!!