A tela não libera o pty

2

Na minha caixa linux, ao usar screen , posso abrir, ler e gravar em um pseudo terminal com screen . Depois de fechá-lo (C-a k y) não consigo me conectar a ele novamente, sem reiniciar o socat , que fornece o pseudo-terminal.

Logo após o início de socat , as coisas ficam assim:

 /home/kidmose $ fuser /dev/pts/9
/dev/pts/9:          20960
 /home/kidmose $ lsof /dev/pts/9
COMMAND   PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
socat   20960 kidmose    5u   CHR  136,9      0t0   12 /dev/pts/9

e posso escrever e ler conforme o esperado:

 /home/kidmose $ echo "uname -a" > /dev/pts/9 && cat /dev/pts/9 
uname -a
Linux egki-laptop-linuxmint 3.13.0-24-generic #47-Ubuntu SMP Fri May 2 23:30:00 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

A partir de screen também funciona uma vez (posso escrever e ler a saída esperada):

 /home/kidmose $ screen /dev/pts/9
uname -a # My input
Linux egki-laptop-linuxmint 3.13.0-24-generic #47-Ubuntu SMP Fri May 2 23:30:00 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux # Response
(C-a k y) # I kill the window and screen terminates ([screen is terminating])

Agora não consigo mais me conectar com screen , nem simplesmente escrever. A tela sai imediatamente com [screen is terminating] e eu recebo o seguinte erro ao tentar escrever:

 /home/kidmose $ echo "uname -a" > /dev/pts/9 && cat /dev/pts/9 
bash: /dev/pts/9: Device or resource busy

Algumas informações:

 /home/kidmose $ fuser /dev/pts/9
/dev/pts/9:          20960
 /home/kidmose $ lsof /dev/pts/9
COMMAND   PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
socat   20960 kidmose    5u   CHR  136,9te      0t0   12 /dev/pts/9
 /home/kidmose $ 

Alguma idéia de por que ela está "ocupada" / indisponível?

Eu notei que o ' te ' aparece na saída lsof . Alguma explicação para isso?

Meu objetivo final é ter um terminal virtual em um dispositivo remoto. Devido ao NAT, eu preciso do dispositivo remoto para ligar para o servidor, onde o terminal virtual será.

Edit: Como limonsqueeze colocá-lo em seu comentar :

[A: sh -> socat] --> [B: socat -> pty -> screen]
   Machine A     TCP        Machine B
    
por kidmose 29.09.2014 / 12:43

1 resposta

2

Sugestão: nessa situação, eu usaria uma conexão SSH reversa :

Instead of your machine doing an ssh, the server machine does an ssh and through port forwarding makes sure that you can ssh back to server machine.

Mas certamente não é tão divertido quanto construir você mesmo com o socat. Eu ainda recomendo chegar ao fundo desta questão pty, é uma boa maneira de aprender.

    
por 12.10.2014 / 14:03