Jak sprawdzić, czy jestem w sesji ekranowej?


75

czy w jakiś sposób można sprawdzić, czy jestem teraz w sesji ekranowej? Potrzebuję go, aby ustalić, czy naciśnięcie klawiszy Ctrl + D oddzieli mnie od serwera lub po prostu zamknie bieżący ekran. Dzięki.

Odpowiedzi:


107

Możesz spojrzeć na $STYzmienną (zmienną ustawioną za pomocą polecenia screen ). Jeśli nie jest to „”, jesteś w sesji ekranowej.

Jestem na ekranie

$ echo $STY 
29624.pts-1.iain-10-04
$

Nie ma mnie na ekranie

$ echo $STY

$

12
Zakłada się, że nadal trwa sesja na komputerze lokalnym. Jeśli uruchomisz ekran, a następnie SSH gdzie indziej, to nie zadziała.
David Mackintosh,

2
if test -n "$STY"; then printf "This is a screen session named '$STY'.\n"; else printf "This is NOT a screen session.\n"; fi
aggregate1166877,

2
@DavidMackintosh, jeśli jesteś SSH w innym miejscu, naciśnięcie ctrl-D spowoduje „rozłączenie mnie z serwerem”, i właśnie o to pyta pytanie.
womble

1
@ aggregate1166877 Mam to, jeśli opublikowałeś jako alias na każdym komputerze, którego teraz używam.
Eduardo Bezerra,

44

Możesz spojrzeć na zmienną $ TERM.

echo $TERM

Jeśli jest to screensesja, termin zmienna powinien zwracać „screen”.

root@deore:/volumes# echo $TERM
screen

Ctrl-a -d (aby wyjść z ekranu)

root@deore:/volumes# echo $TERM
xterm

Sprawdź także: https://stackoverflow.com/questions/3472287/how-do-you-tell-if-the-current-terminal-session-is-in-gnu-screen


4
Zakłada się, że z jakiegoś powodu celowo nie zadzierasz z wartością TERM.
David Mackintosh,

1
Jeśli zmieniasz zmienną TERM, gdy jesteś w środku ekranu, zapraszasz do siebie różnego rodzaju kłopoty.
womble

Cóż, moje węzły Solaris 2.6 nie działają dobrze z wartościami TERM ustawionymi na wartości ekranowe.
David Mackintosh,

3
"$TERM" = "screen"wydaje się być zachowane podczas wchodzenia do sudośrodowiska, w przeciwieństwie do $STYopcji.
Melebius

29

O ile nie zmieniłeś domyślnych przypisań klawiszy, możesz zrobić Ctrl+ a-> Ctrl+ t, który pokaże czas, jeśli jesteś na ekranie. Działa to nawet jeśli masz ssh: d gdzieś indziej, w przeciwieństwie do innych sugestii.


4
Dlaczego tego nie popieramy?
AndreKR,

To zdecydowanie najlepsze rozwiązanie tutaj.
Felix Jen,

2
@womble Jeśli jesteś w nieznanym programie, który może losowo niszczyć rzeczy w odpowiedzi na sekwencje klawiszy i polecenia, nic nie jest bezpieczne.
Gurgeh,

2
@AndreKR: Nie działa w skrypcie
Frank Meulenaar

1
nie jestem upvoting, ponieważ na ekranie i screening na inny ekran, i dosłownie muszę sprawdzić, czy $ STY jest w ogóle ustawiony. który z jakiegoś powodu wraca pusty.
Brian Thomas

14

captionPolecenie w ~/.screenrcto dobry sposób, aby różnicować sesję ekranu.

Osobiście używam tego:

$ cat ~/.screenrc
caption always "%{= kc}Screen session on %H (system load: %l)%-28=%{= .m}%D %d.%m.%Y %0c"

Dodaje taką linię jak ta u dołu ekranu:

Screen session on gbook (system load: 1,75 1,74 1,68)                   Lun 05.01.2015 13:01

Z pierwszą częścią (nazwa systemu + ładunek) w kolorze zielonym i datą w kolorze różowym. Przydatne i trudne do przeoczenia!


To jest doskonałe! Nie przeszkadza (dolna pozycja), jest zawsze widoczny (i kolorowy) i dostarcza użytecznych informacji o systemie.
Umieściłem

6

Znalazłem inne rozwiązanie:
Zmodyfikuj swój .screenrc, aby moja sesja ekranu wyglądała zupełnie inaczej niż normalny terminal.


Myślę, że wiem, co sugerujesz, i może w niektórych sytuacjach całkowicie uniknąć tego problemu. Pomocne może być opisanie, co masz na myśli, pokazując (np.) Przykładowy .screenrcplik.
jvriesem

0
screen -ls

aby zobaczyć swoje sesje i

screen -r sessioninfo

aby ponownie połączyć się z odłączonym, jeśli został odłączony.

screen -D -r sessioninfo

aby ponownie połączyć się z odłączonym.


1
To nie odpowiada na pytanie.
womble

-1

Zrobić screen -ls. To będzie wyraźnie wskazują Attachedkontra Detachedstatusu.

Przykład w załączeniu:

$ screen -ls | grep tached
3132.pts-0.esavo00      (Attached)

Przykład odłączony:

$ screen -ls |grep tached
3132.pts-0.esavo00  (Detached)

6
jeśli gdzieś są przymocowane ekrany, może to być problem.
Dennis Nolte
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.