É possível abrir um terminal com tty / pty especificado

9

(Estou usando o Ubuntu.) No meu entendimento, tty é apenas um tipo de porta. Você insere algo e deve produzir algo. E um terminal (emulador) é um software que lida com essas entradas e saídas. Literalmente, o terminal pode escolher a qual porta se conectar.

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?

Caso contrário, posso iniciar um terminal com o pty especificado?

por exemplo gnome-terminal /dev/pts/47

Atualizar

A razão pela qual faço isso é que quero ter um terminal remoto. Eu sei que a abordagem apropriada é usar ssh ou telnet.

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.

O código a seguir funciona bem. É executado no cliente e no lado do servidor, recebo "olá".

echo "hello" > /home/myhomefoler/pty_created_by_socat
worldterminator
fonte

Respostas:

9

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-terminaldados 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/ptmxe 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/ptsou /devestã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/ptsatualmente 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 socatqualquer outro software se conecte à extremidade principal de um pseudo-terminal, é necessário que esse software suporte especificamente isso. Mas você está com sorte, porque socatsim. 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 !!!

Celada
fonte