Может ли программа обнаружить, что она работает на отдельном экране?

10

Я запускаю интерактивную программу curses в сеансе экрана на довольно слабом оборудовании. В большинстве случаев экран отсоединен. Есть ли способ для этой программы обнаружить эту ситуацию и в основном остановить рисование на экране?

Иоахим Брейтнер
источник
мне просто любопытно: по каким причинам вы запускаете отдельный экран?
амфибия
3
@foampile Если вы никогда не отсоединяете экран, какой смысл вообще бегать по экрану?
Майкл Мрозек

Ответы:

8

Там есть скрипт irssi, screen_awayкоторый устанавливает ваш статус в зависимости от того, прикреплен экран или нет. Это работает так:

Каждая оболочка, запущенная на экране, будет иметь STYпеременную окружения с именем сокета. Вы можете запустить, screen -lsчтобы получить путь, где хранятся все сокеты:

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

Проверьте бит выполнения на /var/run/screen/.../$STY. Если он установлен, экран прикреплен; в противном случае он отделен. Вы можете видеть из вывода выше, что два из моих трех экранов прикреплены, и здесь установлены соответствующие биты выполнения:

$ 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

Вы также можете просто держать проверки вывода screen -lsдля строки , которая содержит $STY, и посмотреть , если он заканчивается (Attached)или (Detached), но это требует запуска screenснова и снова

Михаил Мрозек
источник
1
Ха, узнал что-то новое сегодня. Любая идея, если этот бит выполнения означает нечто большее, чем просто флаг «присоединен / отсоединен»?
jw013