Um programa detecta que está sendo executado em uma tela desanexada?

10

Estou executando um programa interativo de curses em uma sessão de tela com hardware bastante fraco. Na maioria das vezes, a tela é desanexada. Existe uma maneira desse programa detectar essa situação e basicamente parar de pintar na tela?

    
por Joachim Breitner 05.10.2012 / 18:59

1 resposta

8

Há um script irssi chamado screen_away que define seu status como ausente, dependendo se o tela está anexada. Funciona assim:

Todo shell executado em uma tela terá a STY variável de ambiente definida como nome do soquete. Você pode executar screen -ls para obter o caminho onde todos os soquetes estão armazenados:

$ screen -ls

There are screens on:
        11824.pts-24.mmrozek    (Attached)
        2306.ssh        (Detached)
        6615.chat       (Attached)
3 Sockets in /var/run/screen/S-mmrozek.

Verifique o bit de execução em /var/run/screen/.../$STY . Se estiver definido, a tela está anexada; caso contrário, é separado. Você pode ver na saída acima que duas das minhas três telas estão conectadas, e aqui os bits de execução correspondentes estão definidos:

$ ls -l /var/run/screen/S-mmrozek/

total 0
prwx------ 1 mmrozek mmrozek 0 Oct  5 13:04 11824.pts-24.mmrozek
prw------- 1 mmrozek mmrozek 0 Sep 23 23:45 2306.ssh
prwx------ 1 mmrozek mmrozek 0 Oct  5 12:43 6615.chat

Você também pode continuar verificando a saída de screen -ls para uma linha que contém $STY e ver se ela termina em (Attached) ou (Detached) , mas isso exige a execução de screen repetidamente

    
por 05.10.2012 / 19:08

Tags