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

8

(estou usando o Ubuntu.) No meu entender, tty é apenas uma espécie de porto. Você insere algo e deve produzir algo. E um terminal (emulador) é um software que manipula essas entradas e saídas. Literalmente terminal pode escolher qual porta se conectar.

Eu vi muitos arquivos tty em / dev e muitos arquivos pts em / dev / pts / Eu não sei porque existem tantos deles. Todos eles estão sendo usados?

Se não, posso iniciar um terminal com pty especificado?

por exemplo. gnome-terminal /dev/pts/47

Atualizar

A razão pela qual eu faço isso é que eu 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 socat para encaminhar um tty ou pty para o cliente. Então, o cliente pode iniciar um terminal com esse tipo de arquivo.

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

echo "hello" > /home/myhomefoler/pty_created_by_socat
    
por worldterminator 19.01.2015 / 07:36

1 resposta

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 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 !!!

    
por 19.01.2015 / 08:00

Tags