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 provenientes do terminal estão disponíveis para leitura no tty.
Se o tty for uma porta serial de hardware, os dados gravados nele serão enviados no fio e os dados provenientes do fio aparecerão no tty.
Se o tty for o console de vídeo de uma máquina, os dados gravados nele serão exibidos na tela e os dados provenientes do teclado aparecerão no tty.
Se o tty for um pseudo-tty (terminal virtual) conectado a um emulador de terminal X, como os gnome-terminal
dados gravados nele, serão entregues ao software emulador de terminal X e, por sua vez, serão mostrados em uma janela, enquanto os dados digitados nessa janela estarão disponíveis. para leitura no terminal virtual. Diz-se que o software está conectado à extremidade "principal" do pseudo-terminal. Os terminais reais não têm um fim "mestre" porque há um dispositivo real por trás deles (como a porta serial), não um dispositivo virtual implementado por um software.
Portanto, 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 um 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 para um kernel permitir isso, mas de fato a interface do kernel para alocar um novo pseudo-terminal não o suporta: o kernel faz sua própria escolha. (No modelo SysV, os pesudo-terminais são criados abrindo um dispositivo especial chamado /dev/ptmx
e o pseudo-terminal disponível com o menor número disponível é automaticamente alocado.)
Mas: por que você precisaria escolher o número do dispositivo pseudo-terminal que é alocado? O kernel escolhe um não utilizado que é garantido como disponível e utilizável. Você tem um motivo pelo qual prefere escolher outro?
Quanto a você outra pergunta:
Eu vi muitos arquivos tty em / dev e muitos arquivos pts em / dev / pts /. Não sei por que existem tantos. Todos eles estão sendo usados?
Depende do sistema. Em alguns sistemas, todos os dispositivos pseudo-terminais possíveis são pré-criados /dev/pts
ou /dev
estão em uso ou não. Em outros, os nós do dispositivo existem apenas se o pseudo-terminal estiver em uso. Você diz que está usando o Ununbu, que usa Linux, que é o último tipo. Portanto, sim, /dev/pts
atualmente todos os nós de dispositivos que você vê estão em uso.
Mas para acesso temporário, não é muito conveniente. Eu quero usar o socat para encaminhar um tty ou pty para o cliente. Em seguida, o cliente pode iniciar um terminal com esse pty ou tty.
Se você deseja que socat
qualquer outro software se conecte à extremidade principal de um pseudo-terminal, é necessário que esse software suporte especificamente isso. Mas você está com sorte, porque socat
sim. Por exemplo, se eu executar:
socat PTY,link=/tmp/socat.pty TCP-LISTEN:2222 &
sleep 1 && ( setsid bash ) </tmp/socat.pty >/tmp/socat.pty 2>&1
Posso obter um shell conectando à porta 2222 de outro lugar. Muito perigoso do ponto de vista da segurança !!!