Un programme peut-il détecter qu'il s'exécute sur un écran détaché?

10

J'exécute un programme de malédictions interactif dans une session d'écran sur un matériel assez faible. La plupart du temps, l'écran se détache. Existe-t-il un moyen pour ce programme de détecter cette situation et d'arrêter de peindre sur l'écran?

Joachim Breitner
la source
je suis juste curieux: quelles sont les raisons pour lesquelles vous utiliseriez un écran détaché?
amphibient
3
@foampile Si vous n'allez jamais détacher l'écran, à quoi bon courir dans l'écran du tout?
Michael Mrozek

Réponses:

8

Il existe un script irssi appelé screen_awayqui définit votre statut d'absence selon que l'écran est attaché ou non. Cela fonctionne comme ceci:

Chaque shell exécuté dans un écran aura la STYvariable d'environnement définie sur le nom du socket. Vous pouvez exécuter screen -lspour obtenir le chemin où toutes les sockets sont stockées:

$ 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.

Vérifiez le bit d'exécution /var/run/screen/.../$STY. S'il est défini, l'écran est attaché; sinon c'est détaché. Vous pouvez voir sur la sortie ci-dessus que deux de mes trois écrans sont attachés, et ici les bits d'exécution correspondants sont définis:

$ 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

Vous pouvez également continuer à vérifier la sortie de screen -lspour une ligne qui contient $STY, et voir si elle se termine par (Attached)ou (Detached), mais cela nécessite de courir screenencore et encore

Michael Mrozek
la source
1
Ha, j'ai appris quelque chose de nouveau aujourd'hui. Une idée si ce bit d'exécution signifie autre chose qu'un simple drapeau "attaché / détaché"?
jw013