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

10

Estou executando um programa de maldições interativo em uma sessão de tela em um 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?

Joachim Breitner
fonte
Estou apenas curioso: quais são algumas das razões pelas quais você executaria uma tela desanexada?
amphibient
3
@foampile Se você nunca vai desconectar a tela, qual é o sentido de executar dentro da tela?
Michael Mrozek

Respostas:

8

Existe um script irssi chamado screen_awayque define seu status ausente com base no fato de a tela estar ou não conectada. Funciona assim:

Todo shell em execução em uma tela terá a STYvariável de ambiente definida como o nome do soquete. Você pode executar screen -lspara obter o caminho em que 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 /var/run/screen/.../$STY. Se estiver definido, a tela está anexada; caso contrário, é desanexado. Você pode ver na saída acima que duas das minhas três telas estão anexadas 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 -lsuma linha que contém $STYe ver se ela termina em (Attached)ou (Detached), mas que exige screenrepetidas vezes

Michael Mrozek
fonte
1
Ha, aprendi algo novo hoje. Alguma idéia se esse bit de execução significa algo além de apenas um sinalizador "anexado / desanexado"?
Jw013 5/10