ฉันจะรู้ได้อย่างไรว่าฉันกำลังใช้งานภายใน "หน้าจอลินุกซ์" หรือไม่?


60

หน้าจอ "" หมายถึงโปรแกรมที่กล่าวถึงในวิธีการเชื่อมต่อกับครั้ง ssh ตัดการเชื่อมต่อ นั่นคือสิ่งอำนวยความสะดวกที่ดี

แต่มีคำถามที่ฉันอยากรู้ ฉันจะรู้ได้อย่างไรว่าฉันกำลังทำงานอยู่ภายใน "หน้าจอ"? ความแตกต่างคือ:

  • ถ้าใช่ฉันรู้ว่าฉันสามารถปิดหน้าต่างเทอร์มินัลปัจจุบันได้อย่างปลอดภัยเช่นปิดหน้าต่าง PuTTY โดยไม่สูญเสียเซสชันเชลล์ (Bash ฯลฯ )
  • ถ้าไม่ฉันรู้ว่าฉันต้องดูแลงานที่ค้างอยู่ก่อนที่ฉันจะปิดหน้าต่างเทอร์มินัล

ดีกว่าฉันต้องการแสดงสถานะนี้ในพรอมต์ PS1 เพื่อให้ฉันสามารถดูได้ตลอดเวลาโดยอัตโนมัติ


3
หากคุณใช้ tmux แทนหน้าจอคุณจะได้รับแถบสถานะเล็กน้อยตามค่าเริ่มต้น มันเหมือนกันมากสำหรับการใช้งานพื้นฐาน
Samuel Edwin Ward

9
วางสัญลักษณ์บนโต๊ะแล้วปล่อยให้มันหมุน ถ้ามันหมุนไปเรื่อย ๆ คุณก็โอเค ถ้าคุณอยู่ในหน้าจอ:]
Konerak

คุณยังสามารถใช้byobuกับหน้าจอและ tmux สามารถตั้งค่าให้โหลดโดยอัตโนมัติเมื่อเข้าสู่ระบบจากนั้นกดปุ่ม F6 ยกเลิกการเชื่อมต่อและออกจากระบบ
mp3foley

คำตอบ:


88

(ถูกขโมยมาจาก " ฉันจะบอกได้อย่างไรว่าฉันอยู่ในหน้าจอ " บน Over StackOverflow และเขียนโดยผู้ใช้jho . PS คุณไม่สามารถลงคะแนนซ้ำกันในเว็บไซต์ StackExchange)

$STYตรวจสอบ หากเป็นโมฆะคุณจะอยู่ในเทอร์มินัล "ของจริง" ถ้ามันมีอะไรก็เป็นชื่อของหน้าจอที่คุณเข้า

หากคุณไม่ได้อยู่ในหน้าจอ:

eric@dev ~ $ echo $STY
eric@dev ~ $ 

หากคุณอยู่ในหน้าจอ:

eric@dev ~ $ echo $STY
2026.pts-0.ip-10-0-1-71

หากคุณใช้ tmux แทนหน้าจอให้ตรวจสอบ$TMUXด้วย หากต้องการเพิ่มสิ่งนี้ในพรอมต์ของคุณเพิ่มสิ่งต่อไปนี้ใน~/.bashrc:

if [ -n "$STY" ]; then export PS1="(screen) $PS1"; fi
if [ -n "$TMUX" ]; then export PS1="(tmux) $PS1"; fi

2
ถ้าคุณทำงานบางอย่างผ่านได้โดยเริ่มต้นจะได้รับมรดกตัวแปรสภาพแวดล้อมรวมทั้งsudo $STYแต่เป็นที่มักจะแพร่กระจายไปยังสภาพแวดล้อม sudo ดังนั้นอาจจะตรวจสอบอย่างใดอย่างหนึ่งหรือ$TERM $STY $TERM=="screen"
rcoup

14

มองหา$STYที่ให้รายละเอียดที่screenใช้ในการสื่อสารกับตัวเอง $WINDOWจะเป็นscreenหมายเลขหน้าต่างปัจจุบัน


13

การตรวจสอบง่าย ๆ ที่ฉันมักใช้คือกดCtrl- a:

  • หากเคอร์เซอร์ข้ามไปที่จุดเริ่มต้นของบรรทัดฉันไม่ได้อยู่ในเซสชันของหน้าจอ

  • หากไม่มีอะไรเกิดขึ้นฉันรู้ว่าฉันอยู่ในเซสชั่นหน้าจอและฉันเพิ่งใช้ปุ่มควบคุมหน้าจอ จากนั้นฉันกดa(ข้ามไปยังจุดเริ่มต้นของบรรทัด), w(แสดงหน้าต่างหน้าจอปัจจุบัน) หรือดำเนินการคำสั่งหน้าจอ "ไม่เป็นอันตราย" อื่น ๆ เพื่อกลับไปที่พรอมต์คำสั่ง

(แน่นอนว่าจะใช้งานได้เฉพาะในกรณีที่คุณกำลังรัน bash หรือซอฟต์แวร์อื่น ๆ ที่ "กระโดดไปที่จุดเริ่มต้นของบรรทัด" หรือทำสิ่งที่ไม่เป็นอันตรายเมื่อกดปุ่ม Ctrl-a)


3
ใช้งานได้เฉพาะถ้าปุ่มควบคุมหน้าจอของคุณถูกปล่อยไว้ที่ค่าเริ่มต้น Ctrl-a
ShreevatsaR

1
การกดปุ่ม control + DD จะเป็นการปลดและยุติ ssh คุณสามารถใช้ชุดค่าผสมนั้นเพื่อความสะดวกยิ่งขึ้น
akostadinov

ในขณะที่คำตอบนั้นใช้ได้สำหรับคำถามจริง แต่วิธีนี้ไม่สามารถใช้สคริปต์ได้
Nikodemus RIP

7

ดีที่สุดของเวลา (ความพยายามของใครบางคนขาดสกรูกับสิ่งที่คุณ) TERMจะถูกตั้งค่าscreen(หรืออย่างน้อยพูดถึงscreenที่ไหนสักแห่ง)

วิธีแก้ไขปัญหาที่ง่ายเพียงแค่เรียกใช้หน้าจอทุกที่ ฉันจะไม่ออกจากบ้านหากไม่มีมัน


$TERMโดยทั่วไปจะแพร่กระจายผ่านsudoซึ่งเป็นข้อดี!
rcoup

7

ฉันเก็บมันไว้ใน.bashrc:

 PS1='[\u@\h \W'
 if [ "$WINDOW" ]; then PS1="$PS1 ($WINDOW)"; fi
 PS1="$PS1]$"

มันไม่สามารถป้องกันได้ แต่เมื่อใดก็ตามที่ฉันสร้างหน้าจอใหม่มันจะทำให้หมายเลขหน้าต่างปรากฏขึ้นในทันที ถ้าฉันไม่ทำงานscreenไม่มีเลข


3

ฉันมีวิธีที่เย็นกว่า

เพิ่มสิ่งต่อไปนี้ใน ~ / .screenrc ของคุณและคุณจะเห็นบรรทัดสถานะลงด้านล่าง (แสดงข้อความย้อนกลับวันที่เวลาและการโหลดระบบคว่ำรหัสเพิ่มเติมที่พบในลิงค์ man page ด้านล่าง

    hardstatus alwayslastline
    hardstatus string '%Y-%m-%d %c | %l'

ctrl-a:source ~/.screenrcแหล่งที่มานี้เมื่ออยู่ในเซสชั่นหน้าจอที่มี

ฉันต้องขอบคุณ Kyle Rankin ของ Linux Journal สำหรับเรื่องนี้ ดูบทความที่ยอดเยี่ยมของเขาที่http://www.linuxjournal.com/article/10950 ส่วนหน้าคนเขาหมายถึงสามารถพบได้ที่http://www.gnu.org/software/screen/manual/screen.html#String-Escapes


2

คุณสามารถเรียกคืนแผนผังกระบวนการจาก$$เพื่อดูว่าคุณพบอินสแตนซ์ของหน้าจอหรือไม่ ห่วงโซ่ที่แน่นอนอาจจะขึ้นอยู่กับการตั้งค่าของคุณ - บนกล่อง OS X ของฉันzshหน้าจอด้านในมีloginเป็นพาเรนต์ของมัน, SCREENเป็น grandparent และscreenเป็น grandparent ที่ใหญ่

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