Ssh hostname पर आधारित टर्मिनल पृष्ठभूमि को स्वचालित रूप से कैसे बदलें?


9

होस्टनाम के आधार पर आप टर्मिनल विंडो की पृष्ठभूमि का रंग कैसे बदल सकते हैं?

जब मैं उत्पादन हार्डवेयर पर लाइव एम्बेडेड सिस्टम में ssh'd हूं, तो मैं चाहता हूं कि टर्मिनल बैकग्राउंड को लाल रंग में बदल दिया जाए - मैं किस सर्वर पर "जागरूकता बनाए रखता हूं"। PS1 में केवल होस्टनाम होना हमेशा पर्याप्त नहीं होता है।

सूक्ति-टर्मिनल का उपयोग कर रहा है, लेकिन लिनक्स के तहत किसी भी व्यावहारिक समाधान को स्वीकार करेगा।

जवाबों:


7

आप एएनएसआई से बचने के अनुक्रम को पृष्ठभूमि रंग बदलने के लिए ssh LocalCommand का उपयोग कर सकते हैं, और दूरस्थ होस्ट के अनुरूप करने के लिए उपयुक्त रंग का चयन करने के लिए प्रति होस्ट (या होस्ट पैटर्न) प्रति अनुभाग है।

यदि आपका उत्पादन सर्वर "नाम से शुरू होता है" जैसे नामकरण सम्मेलन का अनुसरण करता है, तो आप अपने ~ / .shsh / config फ़ाइल में निम्नलिखित स्निपेट आज़मा सकते हैं। Host prod* PermitLocalCommand yes LocalCommand printf "\x1b[41m\x1b[2JPRODUCTION SYSTEM [%n]\n\n"

यदि वाइल्डकार्ड पैटर्न का उपयोग करने के लिए एक आसान नामकरण सम्मेलन नहीं है, तो आप रिक्त स्थान द्वारा अलग किए गए होस्टनामों को सूचीबद्ध कर सकते हैं। आप विभिन्न गैर-उत्पादन सर्वरों के लिए अलग-अलग रंग मान और स्ट्रिंग्स के साथ अतिरिक्त होस्ट ब्लॉक भी बना सकते हैं।

पैटर्न से मेल खाने वाले होस्ट से कनेक्ट होने के बाद, संबंधित प्रिंटफ़ को स्थानीय रूप से निष्पादित किया जाएगा, पृष्ठभूमि का रंग लाल में बदल जाएगा ([41 मीटर पृष्ठभूमि के रंग के रूप में लाल चुनता है, [2 जे भाग अद्यतन पृष्ठभूमि रंग के साथ पूरी स्क्रीन को दोहराता है।) https://en.wikipedia.org/wiki/ANSI_escape_code बहुत अधिक विकल्पों के लिए)

इस दृष्टिकोण के बारे में सबसे बड़ा उपद्रव यह है कि पृष्ठभूमि रंग ssh सत्र से बाहर निकलने पर बनी रहती है; डिस्कनेक्ट पर चलाने के लिए LocalCommand का कोई प्रतिपक्ष नहीं है (जिसे मैं जानता हूं)। Ssh के लिए एक उपनाम या शेल आवरण स्क्रिप्ट को printf "\x1b[0m"रीसेट के रूप में आमंत्रित किया जा सकता है । दूसरी ओर, लोकल कलरमैंथ के माध्यम से बैकग्राउंड कलर सेट होने का मतलब है कि आपको कलर सेट मिल जाएगा भले ही ssh एक रैपर स्क्रिप्ट या अन्य नाम से न चला हो।


बहुत बढ़िया जवाब! केवल वह मुद्दा जिसे मैं देख रहा हूं, जो कि एक महत्वपूर्ण एक है, यह है कि रंग परिवर्तन केवल पहले "स्क्रीन" के लिए रहता है। जैसे ही कमांड दर्ज किए जाते हैं, और स्क्रीन ऊपर की ओर स्क्रॉल करता है, यह लाल रंग से वापस काले रंग में चला जाता है। शायद सूक्ति-टर्मिनल रंग नियंत्रण ANSI एस्केप अनुक्रम को ओवरराइड कर रहा है? क्या आप वर्कअराउंड जानते हैं?
मटल देव

क्या ऐसा ही कुछ संभव है, शायद SSH होस्ट पर PS1 प्रॉम्प्ट चर के लिए?
माउंट देव

रीसेट आपके PS1 प्रॉम्प्ट चर में अनुक्रमों के कारण हो सकता है, या यदि आपके पास lsaliased जैसी कमांड है ls --color=autoऔर इसमें रीसेट अनुक्रम '<ESC> [0m' शामिल है। हालांकि, इसे बनाए रखने के लिए, आपको संभवतः अलग-अलग गनोम-टर्मिनल प्रोफाइल सेटअप करने की आवश्यकता होगी, और आवरण स्क्रिप्ट मार्ग पर जाएं, होस्टनाम के आधार पर एक प्रोफ़ाइल नाम का चयन करें, और आह्वान करेंgnome-terminal --profile=$PROFILE_NAME -e ssh $HOST &
PKapp

आप बिल्कुल सही हैं: यदि मेरे पास ls --colourया PS1 में रीसेट अनुक्रम है, तो या तो एक अकेले पिछले एनी रंग सेटिंग्स को ओवरराइड करेगा। तो मैं आपके प्रस्तावित आवरण स्क्रिप्ट समाधान को लागू करने पर ध्यान दूंगा, जो कि एक उत्कृष्ट विचार है! बहुत बहुत धन्यवाद!
मटल देव

बस इतना पता है कि अन्य लोगों को पता है: प्रिंटफ को ~ /। Ssh / config में जोड़ना rsync को तोड़ता है। संबंधित विवरण यहां: serverfault.com/questions/267154/…
माउंट देव
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.