ฉันจะตรวจสอบว่าฉันอยู่ในเซสชันของหน้าจอได้อย่างไร


75

เป็นไปได้ไหมที่จะตรวจสอบว่าตอนนี้ฉันอยู่ในเซสชั่นหน้าจอหรือไม่ ฉันต้องการมันเพื่อตรวจสอบว่ากดปุ่ม ctrl + d จะตัดการเชื่อมต่อฉันจากเซิร์ฟเวอร์หรือเพียงแค่ปิดหน้าจอปัจจุบัน ขอบคุณ

คำตอบ:


107

คุณสามารถดู$STYตัวแปร (ตัวแปรที่กำหนดโดยคำสั่งหน้าจอ ) ถ้าไม่ใช่ "" แสดงว่าคุณอยู่ในเซสชันหน้าจอ

ฉันอยู่ในหน้าจอ

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

ฉันไม่ได้อยู่ในหน้าจอ

$ echo $STY

$

12
สิ่งนี้อนุมานว่าคุณยังคงอยู่ในเซสชั่นที่ใช้งานอยู่บนเครื่องคอมพิวเตอร์ หากคุณเปิดหน้าจอแล้ว SSH ที่อื่นจะไม่ทำงาน
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
รวม

2
@DavidMackintosh ถ้าคุณเป็น SSH ที่อื่นการกด ctrl-D จะ "ตัดการเชื่อมต่อฉันจากเซิร์ฟเวอร์" ซึ่งเป็นสิ่งที่คำถามถาม
womble

1
@ aggregate1166877 ฉันมีสิ่งนี้ถ้าคุณโพสต์เป็นนามแฝงในทุก ๆ เครื่องที่ฉันใช้ตอนนี้
Eduardo Bezerra

44

คุณสามารถดูตัวแปร $ TERM

echo $TERM

หากเป็นscreenเซสชั่นตัวแปรคำควรกลับ "หน้าจอ"

root@deore:/volumes# echo $TERM
screen

Ctrl-a -d (เพื่อออกจากหน้าจอ)

root@deore:/volumes# echo $TERM
xterm

ตรวจสอบด้วย: https://stackoverflow.com/questions/3472287/how-do-you-tell-if-the-current-terminal-session-is-in-gnu-screen


4
สิ่งนี้สันนิษฐานว่าคุณไม่ได้ล้อเล่นกับค่า TERM ของคุณด้วยเหตุผลบางอย่าง
David Mackintosh

1
หากคุณกำลังเปลี่ยนตัวแปร TERM ของคุณขณะอยู่ในหน้าจอภายในคุณกำลังเชิญให้คุณแก้ไขปัญหาทุกอย่าง
womble

ทีนี้โซลาริส 2.6 ของฉันเล่นได้ไม่ดีนักเมื่อตั้งค่า TERM เป็นค่าหน้าจอ
David Mackintosh

3
"$TERM" = "screen"ดูเหมือนว่าจะถูกรักษาไว้เมื่อเข้าสู่sudoสภาพแวดล้อมซึ่งแตกต่างจาก$STYตัวเลือก
Melebius

29

หากคุณไม่ได้เปลี่ยนการเชื่อมโยงคีย์เริ่มต้นคุณสามารถทำCtrl+ a-> Ctrl+ tซึ่งจะแสดงเวลาหากคุณอยู่ในหน้าจอ สิ่งนี้จะใช้ได้แม้ว่าคุณจะมี ssh: d อยู่ที่อื่นไม่เหมือนกับคำแนะนำอื่น ๆ


4
ทำไมเราถึงไม่ยอมแพ้เรื่องนี้
AndreKR

นี่เป็นทางออกที่ดีที่สุดอย่างแน่นอน
เฟลิกซ์เจน

2
@ womble หากคุณอยู่ในโปรแกรมที่ไม่รู้จักที่อาจทำสิ่งทำลายแบบสุ่มเป็นการตอบสนองต่อลำดับคีย์และคำสั่งดังนั้นไม่มีอะไรปลอดภัย
Gurgeh

2
@AndreKR: มันไม่ทำงานในสคริปต์
Frank Meulenaar

1
ฉันไม่ได้ upvoting เพราะในหน้าจอและคัดกรองไปยังหน้าจออื่นและแท้จริงฉันต้องดูว่า $ STY ตั้งแม้ ด้วยเหตุผลบางอย่างมันกลับมาว่างเปล่า
Brian Thomas

14

captionคำสั่งใน~/.screenrcเป็นวิธีที่ดีที่จะแยกความแตกต่างเซสชั่นหน้าจอ

ฉันใช้สิ่งนี้เป็นการส่วนตัว:

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

มันเพิ่มบรรทัดเช่นนี้ที่ด้านล่างของหน้าจอ:

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

ด้วยส่วนแรก (ชื่อระบบ + โหลด) เป็นสีเขียวและวันที่เป็นสีชมพู มีประโยชน์และยากที่จะพลาด!


มันสมบูรณ์แบบ! มันไม่ได้อยู่ในตำแหน่ง (ตำแหน่งด้านล่าง) มันสามารถมองเห็นได้เสมอ (และสี) และให้ข้อมูลที่เป็นประโยชน์เกี่ยวกับระบบ ผมโพสต์นี้ที่นี่ยังstackoverflow.com/a/43571028/2450431
hrvoj3e

6

ฉันพบวิธีแก้ไขปัญหาอื่นแล้ว:
แก้ไขของคุณ.screenrcดังนั้นเซสชันหน้าจอของฉันจึงดูแตกต่างจากเทอร์มินัลปกติอย่างสิ้นเชิง


ฉันคิดว่าฉันรู้ว่าคุณกำลังแนะนำอะไรและในบางสถานการณ์อาจหลีกเลี่ยงปัญหานี้ได้ทั้งหมด อาจเป็นประโยชน์มากกว่านี้หากคุณอธิบายสิ่งที่คุณหมายถึงด้วยการแสดง (ตัวอย่าง) .screenrcไฟล์ตัวอย่าง
jvriesem

0
screen -ls

เพื่อดูเซสชันของคุณและ

screen -r sessioninfo

เพื่อเชื่อมต่อกับอีกครั้งหากไม่ได้เชื่อมต่อ

screen -D -r sessioninfo

เพื่อเชื่อมต่อกับอีกครั้งที่ไม่ได้เชื่อมต่อ


1
สิ่งนี้ไม่ตอบคำถาม
womble

-1

screen -lsทำ มันจะระบุอย่างชัดเจนAttachedเมื่อเทียบกับDetachedสถานะ

ตัวอย่างที่แนบมา:

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

ตัวอย่างที่แยกออก:

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

6
หากมีหน้าจอติดอยู่ที่อื่นอาจเป็นปัญหา
Dennis Nolte
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.