Por que não consigo anexar uma sessão de tela?

4

Tenho uma sessão de tela em execução que gostaria de: sair, mas não consigo, porque quando tento anexar novamente, recebo um erro dizendo que não é possível abrir meu terminal. Tenho certeza que eu poderia matar o daemon ou algo assim, mas eu preciso aprender o caminho "certo", assim como o que realmente está acontecendo.

 daniel@DELIRIUM:~/server1/bin/plugins$ screen -list
 There is a screen on:
        1424.pts-0.DELIRIUM     (06/23/2011 01:18:14 PM)        (Detached)
 1 Socket in /var/run/screen/S-daniel.

 daniel@DELIRIUM:~/server1/bin/plugins$ screen -r 1424
 Cannot open your terminal '/dev/pts/0' - please check.

Além disso, o que é um soquete? Quanto mais você conseguir emburrá-lo melhor.

    
por Daniel B. 24.06.2011 / 05:29

2 respostas

6

Você não possui seu TTY por algum motivo. Você usou su para mudar para esse usuário de outro usuário? Normalmente, o TTY é de propriedade da pessoa que faz login originalmente nesse terminal.

Existe um truque para consertar isso (além de alterar as permissões no arquivo / dev / pts / 0 pelo usuário que efetuou login originalmente), o pacote bsdutils tem um programa chamado script que, quando executado , age como um keylogger, salvando o que você digita e o que os programas imprimem. Ele inicia outro shell e aloca outro pseudotty para esse shell para registrar tudo isso, portanto, se você executar script /dev/null , ele criará um novo pseudotty com permissões apropriadas e iniciará a gravação de tudo nele em / dev / null. Então você poderá usar a tela para reconectar sua sessão.

Quanto a "sockets", este é o termo da tela para os arquivos de pipe nomeados (também conhecidos como FIFOs) em /var/run/screen/S-username , por exemplo

prw------- 1 derf derf 0 Jun 23 22:42 30029.pts-0.server

Quando você inicia a tela, esse arquivo de canal é criado para conectar o processo screen que você está usando para exibir as exibições com o processo screen de fundo (geralmente renomeado SCREEN ) na qual os programas estão sendo executados Quando você executa screen -r , o processo de tela que você está executando abre esse canal para falar com o processo da tela de fundo.

    
por 24.06.2011 / 05:56
1

Algo estranho está acontecendo aqui. Você pode por favor colar a saída de:

   ls -l /dev/pts/0
   id

Um soquete, neste caso, é uma forma de comunicação entre processos, é um arquivo no sistema de arquivos que forma um canal entre o processo e ... outros processos. Portanto, o seu "cliente" de tela está falando com a outra instância da tela de execução, e é assim que funciona a magia da tela. Soquetes são conceitos confusos no Linux, porque tradicionalmente as pessoas pensam no soquete de palavras como Sockets de Rede. É um conceito difícil de entender, ele se encaixa em uma série de outros canais de comunicação entre processos melhor explicados pelo livro "Advanced Programming in the UNIX Environment".

    
por 24.06.2011 / 06:08