วิธีเปลี่ยนพื้นหลังเทอร์มินัลโดยอัตโนมัติโดยยึดตามชื่อโฮสต์ ssh?


9

วิธีหนึ่งสามารถเปลี่ยนสีพื้นหลังของหน้าต่างเทอร์มินัลโดยขึ้นอยู่กับชื่อโฮสต์ที่คุณ ssh เป็นอย่างไร

เช่นเมื่อฉันเข้าสู่ระบบฝังตัวที่ใช้งานจริงบนฮาร์ดแวร์การผลิตฉันต้องการให้พื้นหลังเทอร์มินัลเปลี่ยนเป็นสีแดง - เพื่อ "รักษาการรับรู้" ของเซิร์ฟเวอร์ที่ฉันใช้อยู่ การมีเพียงชื่อโฮสต์ใน PS1 นั้นไม่เพียงพอเสมอไป

กำลังใช้ gnome-terminal แต่จะยอมรับวิธีแก้ปัญหาที่สามารถทำงานได้ใด ๆ ภายใต้ Linux

คำตอบ:


7

คุณสามารถใช้ ssh LocalCommand เพื่อปล่อยลำดับหนี ANSI เพื่อเปลี่ยนสีพื้นหลังและมีส่วนต่อโฮสต์ (หรือรูปแบบโฮสต์) เพื่อเลือกสีที่เหมาะสมที่คุณต้องการสอดคล้องกับโฮสต์ระยะไกล

หากเซิร์ฟเวอร์ที่ใช้งานจริงของคุณเป็นไปตามหลักการตั้งชื่อเช่น "เริ่มต้นด้วย prod" คุณสามารถลองตัวอย่างต่อไปนี้ในไฟล์ ~ / .ssh / config ของคุณ: Host prod* PermitLocalCommand yes LocalCommand printf "\x1b[41m\x1b[2JPRODUCTION SYSTEM [%n]\n\n"

หากไม่มีรูปแบบการตั้งชื่อที่สะดวกในการใช้รูปแบบไวด์การ์ดคุณสามารถแสดงชื่อโฮสต์ที่คั่นด้วยช่องว่างได้ คุณสามารถสร้างบล็อกโฮสต์เพิ่มเติมด้วยค่าสีและสตริงที่แตกต่างกันสำหรับเซิร์ฟเวอร์ที่ไม่ใช่ผลิตภัณฑ์อื่น ๆ เช่นกัน

หลังจากเชื่อมต่อกับโฮสต์ที่ตรงกับรูปแบบแล้ว printf ที่เกี่ยวข้องจะถูกดำเนินการแบบโลคัลเปลี่ยนสีพื้นหลังเป็นสีแดง ([41m เลือกสีแดงเป็นสีพื้นหลังส่วนที่ 2J จะวาดภาพทั้งหน้าจอด้วยสีพื้นหลังที่ปรับปรุงแล้วดูhttps://en.wikipedia.org/wiki/ANSI_escape_codeสำหรับตัวเลือกเพิ่มเติมมากมาย)

สิ่งที่น่ารำคาญที่สุดเกี่ยวกับวิธีนี้คือสีพื้นหลังยังคงอยู่เมื่อออกจากเซสชัน ssh ไม่มีคู่หูกับ LocalCommand ที่จะเรียกใช้เมื่อตัดการเชื่อมต่อ (ที่ฉันรู้) สคริปต์ alias หรือ shell wrapper สำหรับ ssh สามารถเรียกใช้printf "\x1b[0m"เป็นการรีเซ็ต ในทางกลับกันการมีชุดสีพื้นหลังผ่าน LocalCommand หมายความว่าคุณจะได้รับชุดสีแม้ว่าจะไม่ได้เรียกใช้ ssh ผ่านสคริปต์แรปเปอร์หรือนามแฝง


คำตอบที่ยอดเยี่ยม! ปัญหาเดียวที่ฉันเห็นซึ่งเป็นสิ่งที่สำคัญคือการเปลี่ยนสียังคงอยู่สำหรับ "หน้าจอแรก" เท่านั้น ทันทีที่ป้อนคำสั่งและหน้าจอจะเลื่อนขึ้นไปมันจะเปลี่ยนจากสีแดงเป็นสีดำ บางทีการควบคุมสี gnome-terminal กำลังแทนที่ลำดับการหลบหนีของ ANSI? คุณรู้วิธีแก้ปัญหาหรือไม่?
Mtl Dev

เป็นไปได้ไหมที่จะทำสิ่งที่คล้ายกันกับตัวแปรพรอมต์ PS1 บนโฮสต์ SSH หรือไม่?
Mtl Dev

การรีเซ็ตอาจเกิดจากลำดับในตัวแปรพรอมต์ PS1 ของคุณหรือหากคุณมีคำสั่งเช่นlsนามแฝงls --color=autoและจะมีลำดับการรีเซ็ต '<ESC> [0m' เพื่อยืนยันว่าคุณอาจต้องตั้งค่าโปรไฟล์ gnome-terminal ที่แตกต่างกันและไปที่เส้นทางสคริปต์ wrapper เลือกชื่อโปรไฟล์ตามชื่อโฮสต์และเรียกใช้gnome-terminal --profile=$PROFILE_NAME -e ssh $HOST &
PKapp

คุณพูดถูก: ถ้าฉันมีls --colourหรือลำดับการรีเซ็ตใน PS1 เพียงอันเดียวจะแทนที่การตั้งค่าสี ansi ก่อนหน้า ดังนั้นฉันจะดูที่การใช้งานโซลูชันสคริปต์แรปเปอร์ที่คุณเสนอซึ่งก็เป็นแนวคิดที่ยอดเยี่ยมเช่นกัน! Merci beaucoup!
Mtl Dev

เพื่อให้ผู้อื่นทราบ: การเพิ่ม printf ไปยัง ~ / .ssh / config ดูเหมือนจะทำให้ rsync แตก รายละเอียดที่เกี่ยวข้องได้ที่นี่: serverfault.com/questions/267154/…
Mtl Dev
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.