Bagaimana cara memeriksa apakah saya sedang sesi layar?

75

apakah mungkin untuk memeriksa apakah saya sekarang di sesi layar? Saya membutuhkannya untuk menentukan apakah menekan ctrl + d akan memutuskan sambungan saya dari server atau hanya menutup layar saat ini. Terima kasih.

wlk
sumber

Jawaban:

107

Anda dapat melihat $STYvariabel (variabel yang diatur oleh perintah layar ). Jika bukan "" maka Anda berada di sesi layar.

Saya di layar

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

Saya tidak di layar

$ echo $STY

$
Iain
sumber
12
Ini menganggap bahwa Anda masih dalam sesi berjalan di komputer lokal. Jika Anda memulai layar dan kemudian SSH di tempat lain, ini tidak akan berhasil.
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
@ Davidvidintack jika Anda SSH akan ke tempat lain, menekan ctrl-D akan "memutuskan sambungan saya dari server", yang persis apa pertanyaannya bertanya tentang.
womble
1
@ aggregate1166877 Saya punya ini jika Anda memposting sebagai alias di setiap mesin yang saya gunakan sekarang.
Eduardo Bezerra
44

Anda dapat melihat variabel $ TERM.

echo $TERM

Jika suatu screensesi, variabel istilah harus mengembalikan "layar".

root@deore:/volumes# echo $TERM
screen

Ctrl-a -d (untuk keluar dari layar)

root@deore:/volumes# echo $TERM
xterm

Juga periksa: https://stackoverflow.com/questions/3472287/how-do-you-tell-if-the-current-terminal-session-is-in-gnu-screen

putih
sumber
4
Ini mengandaikan bahwa Anda tidak sengaja mengacaukan nilai TERM Anda karena suatu alasan.
David Mackintosh
1
Jika Anda mengubah variabel TERM saat berada di dalam layar, Anda mengundang semua jenis masalah pada diri Anda sendiri.
womble
Yah, Solaris 2.6 saya tidak cocok dengan nilai TERM yang disetel ke nilai layar.
David Mackintosh
3
"$TERM" = "screen"tampaknya dilestarikan ketika memasuki sudolingkungan, tidak seperti $STYopsi.
Melebius
29

Kecuali Anda telah mengubah binding kunci default, Anda dapat melakukan Ctrl+ a-> Ctrl+ t, yang akan menunjukkan waktu, jika Anda berada di layar. Ini akan bekerja bahkan jika Anda memiliki ssh: d pergi ke tempat lain, tidak seperti saran lainnya.

Gurgeh
sumber
4
Mengapa kita tidak membenarkan ini.
AndreKR
Ini jelas merupakan solusi terbaik di sini.
Felix Jen
2
@ womble Jika Anda berada dalam program yang tidak dikenal yang dapat melakukan hal-hal destruktif acak sebagai respons terhadap urutan dan perintah utama, maka tidak ada yang aman.
Gurgeh
2
@AndreKR: Tidak berfungsi dalam naskah
Frank Meulenaar
1
Saya tidak upvoting karena di dalam layar, dan menyaring ke layar lain, dan saya benar-benar perlu melihat apakah $ STY bahkan diatur. yang entah mengapa kembali kosong.
Brian Thomas
14

The captionperintah dalam ~/.screenrcmerupakan cara yang baik untuk membedakan sesi layar.

Saya pribadi menggunakan ini:

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

Itu menambahkan garis seperti ini di bagian bawah layar:

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

Dengan bagian pertama (nama sistem + memuat) berwarna hijau dan tanggal berwarna merah muda. Berguna dan sulit untuk dilewatkan!

Gaëtan Lehmann
sumber
Ini sempurna! Itu tidak menghalangi (posisi bawah), selalu terlihat (dan berwarna) dan memberikan info berguna tentang sistem. Saya memposting ini di sini juga stackoverflow.com/a/43571028/2450431
hrvoj3e
6

Saya telah menemukan solusi lain:
Ubah .screenrc, jadi sesi layar saya terlihat sangat berbeda dari terminal normal.

wlk
sumber
Saya rasa saya tahu apa yang Anda sarankan, dan itu bisa dalam beberapa situasi menghindari masalah ini sepenuhnya. Mungkin lebih bermanfaat jika Anda menggambarkan apa yang Anda maksud dengan menunjukkan (misalnya) .screenrcfile contoh .
jvriesem
0
screen -ls

untuk melihat sesi Anda dan

screen -r sessioninfo

untuk menyambung kembali ke yang terputus, jika terlepas.

screen -D -r sessioninfo

untuk menyambung kembali ke yang terputus.

Kevin
sumber
1
Ini tidak menjawab pertanyaan.
womble
-1

Lakukan a screen -ls. Ini akan secara eksplisit menunjukkan Attachedversus Detachedstatus.

Contoh terlampir:

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

Contoh terlepas:

$ screen -ls |grep tached
3132.pts-0.esavo00  (Detached)
Marcus Junius Brutus
sumber
6
jika ada layar yang terpasang di tempat lain ini mungkin menjadi masalah.
Dennis Nolte