TERM वातावरण चर डिफ़ॉल्ट सेट कहां मिलता है?


26

जब मैं डेस्कटॉप GUI में गनोम टर्मिनल एमुलेटर के साथ एक टर्मिनल विंडो खोलता हूं, तो शेल TERM वातावरण चर मान पर निर्भर करता है xterm

यदि मैं कंसोल टीटीवाई विंडो पर स्विच करने के लिए CTL+ ALT+ F1का उपयोग करता हूं और echo $TERMमान सेट है linux

पूछने के लिए मेरी प्रेरणा यह है कि मेरी ~/.bashrcफ़ाइल के अंदर यह निर्धारित करने के लिए एक चर का उपयोग किया जाता है कि क्या रंग का खोल प्रदान किया गया है या सिर्फ अच्छे पुराने जमाने का मोनोक्रोम।

# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
    xterm-color) color_prompt=yes;;
esac

यदि मैं टाइप करता हूँ तो कंसोल शेल और गनोम टर्मिनल एमुलेटर शेल दोनों में

export TERM=xterm-color
source /.bashrc

दोनों गोले रंग मोड में बदल जाते हैं (कुछ ऐसा जो मैं हमेशा दोनों में करना चाहता हूं)।

डिफ़ॉल्ट TERMमान कृपया कहाँ सेट करें और अपनी चूक को बदलने के लिए सबसे अच्छी जगह कहाँ है, यदि संभव हो तो? डिफ़ॉल्ट TERM मान को चुनने या सेट करने के लिए टर्मिनल एमुलेटर GUI में कुछ भी नहीं प्रतीत होता है।

मैंने केवल export TERM=xterm-colorअपनी ~/.bashrcफ़ाइल के शीर्ष पर लाइन जोड़ने पर विचार किया था, लेकिन मेरी आंत वृत्ति यह बताती है कि यह सबसे अच्छा समाधान नहीं है और मेरी Google खोजों ने मुझे अभी तक एक अच्छे उत्तर के लिए प्रेरित नहीं किया है।

मैं Ubuntu 15.04 डेस्कटॉप संस्करण (डेबियन आधारित) चला रहा हूं।


जवाबों:


17

बहुत सारी जगहों पर, निर्भर करता है

आभासी टर्मिनलों और वास्तविक टर्मिनलों पर, TERMपर्यावरण चर को उस प्रोग्राम द्वारा सेट किया जाता है जिसे चेन करते हैं login, और एक बार लॉग ऑन करने के बाद इंटरैक्टिव शेल के साथ-साथ सभी तरह से विरासत में मिला है। जहां, ठीक है, यह सिस्टम से सिस्टम में भिन्न होता है, और टर्मिनल के प्रकार के अनुसार।

तार के दूसरे छोर पर क्या है, इसके अनुसार रियल, सीरियल, टर्मिनल प्रकार में भिन्न हो सकते हैं। इसलिए पारंपरिक रूप से gettyकार्यक्रम को एक तर्क के साथ लागू किया जाता है जो टर्मिनल प्रकार को निर्दिष्ट करता है, या TERMसेवा प्रबंधक के सेवा कॉन्फ़िगरेशन डेटा से प्रोग्राम को पारित किया जाता है ।

  • वैन स्मुरेनबर्ग initसिस्टम पर, कोई भी इसे /etc/inittabप्रविष्टियों में देख सकता है , जो की तर्ज पर कुछ पढ़ेगा

    S0: 3: respawn: / sbin / agetty ttyS0 9600 vt100-nav
    agettyउस लाइन में अंतिम तर्क , vt100-navटर्मिनल प्रकार के लिए निर्धारित है /dev/ttyS0। तो /etc/inittabऐसी प्रणाली में वास्तविक टर्मिनलों के लिए टर्मिनल प्रकार को बदलने के लिए कहां है।
  • सिस्टमड सिस्टम पर, कोई इसे /usr/lib/systemd/system/serial-getty@.serviceयूनिट फाइल ( /lib/systemd/system/serial-getty@.serviceअन-मर्ज किए गए सिस्टम पर) में देख सकता है, जो पढ़ता है

    पर्यावरण = अवधि = vt100
    वातावरण में TERMचर सेट करने के लिए पारित कर दिया agetty। यह सेवा इकाई फ़ाइल ऐसी प्रणालियों पर वास्तविक टर्मिनलों के लिए टर्मिनल प्रकार को बदलने के लिए है। ध्यान दें कि यह उन सभी वास्तविक टर्मिनलों पर लागू होता है जो इस सेवा इकाई टेम्पलेट को नियोजित करते हैं। (केवल व्यक्तिगत टर्मिनलों के लिए इसे बदलने के लिए, किसी को मैन्युअल रूप से टेम्पलेट को त्वरित करना होगा।)
  • बीएसडी पर, initटर्मिनल में प्रत्येक टर्मिनल के प्रवेश के तीसरे क्षेत्र से टर्मिनल प्रकार लेता है /etc/ttys, और TERMउस वातावरण में सेट करता है gettyजिसके साथ यह निष्पादित होता है। तो /etc/ttysजहां बीएसडी पर टर्मिनल वास्तविक टर्मिनल के लिए बदलता है।

कर्नेल वर्चुअल टर्मिनल, जैसा कि आपने नोट किया है, एक निश्चित प्रकार है। NetBSD के विपरीत, जो कि कर्नेल वर्चुअल टर्मिनल प्रकार को फ़्लाय, लिनक्स पर अलग-अलग कर सकता है और अन्य BSD में कर्नेल के अंतर्निहित टर्मिनल इम्यूलेशन प्रोग्राम में लागू एक एकल टर्मिनल टर्मिनल होता है। लिनक्स पर, वह प्रकार linuxटर्मोफ डेटाबेस से मेल खाता है। (FreeBSD के कर्नेल टर्मिनल इम्यूलेशन xtermसंस्करण 9 से एक सीमित उपसमूह है।)

  • सिस्टम पर mingettyया vc-get-tty(नोश पैकेज से) प्रोग्राम "जानता है" कि यह केवल एक वर्चुअल टर्मिनल से बात कर सकता है, और वे प्रोग्राम के लिए संकलित ऑपरेटिंग सिस्टम के लिए उपयुक्त "ज्ञात" वर्चुअल टर्मिनल प्रकारों को हार्डवेअर करते हैं।
  • सिस्टमड सिस्टम पर, कोई इसे /usr/lib/systemd/system/getty@.serviceयूनिट फाइल ( /lib/systemd/system/getty@.serviceअन-मर्ज किए गए सिस्टम पर) में देख सकता है, जो पढ़ता है

    पर्यावरण = अवधि = linux
    वातावरण में TERMचर सेट करने के लिए पारित कर दिया agetty

कर्नेल वर्चुअल टर्मिनलों के लिए, कोई टर्मिनल प्रकार नहीं बदलता है। कर्नेल में टर्मिनल एमुलेटर प्रोग्राम बिल्कुल नहीं बदलता है। यह है गलत प्रकार बदलने के लिए। विशेष रूप से, यह कर्सर / संपादन कुंजी CSI अनुक्रम मान्यता को पेंच करेगा। linuxलिनक्स कर्नेल टर्मिनल एमुलेटर द्वारा भेजे गए सीएसआई दृश्यों को अलग हैं xtermया vt100दिसम्बर वीटी मोड में जीयूआई टर्मिनल एमुलेटर प्रोग्राम द्वारा भेजा सीएसआई दृश्यों।

आपका GUI टर्मिनल एमुलेटर कई कार्यक्रमों में से एक है, SSH d tomon से screen, कि छद्म टर्मिनलों का उपयोग करता है। टर्मिनल प्रकार क्या निर्भर करता है, जो छद्म टर्मिनल के मास्टर साइड पर टर्मिनल एमुलेटर प्रोग्राम चल रहा है, और यह कैसे कॉन्फ़िगर किया गया है। अधिकांश GUI टर्मिनल एमुलेटर एक TERMचर के साथ दास पक्ष पर कार्यक्रम शुरू करेंगे, जिसका मूल्य मास्टर साइड पर उनके टर्मिनल इम्यूलेशन से मेल खाता है। एसएसएच सर्वर जैसे कार्यक्रम कनेक्शन के क्लाइंट छोर पर मौजूद टर्मिनल प्रकार को "पास" करने का प्रयास करेंगे। आमतौर पर टर्मिनल एमुलेशन के बीच चयन करने के लिए कुछ मेनू या कॉन्फ़िगरेशन विकल्प होता है।

पकडने वाला हाथ

रंग क्षमता का पता लगाने का सही तरीका आपकी स्क्रिप्ट में टर्मिनल प्रकारों की एक सूची को हार्डवेअर करना नहीं है। रंग का समर्थन करने वाले बहुत सारे टर्मिनल प्रकार हैं।

सही तरीका यह है कि आपके टर्मिनल प्रकार के बारे में क्या कहा जाता है।

रंग = 0
यदि tput सह> / dev / null 2> & 1 है
फिर
    परीक्षण "` tput Co` "-gt 2 && रंग = 1
elif tput रंग> / देव / अशक्त 2> & 1
फिर
    परीक्षण "` tput रंग '"-gt 2 और& रंग = 1
फाई

आगे की पढाई

  • जोनाथन डी बॉयने पोलार्ड (2018)। TERMnosh गाइड । सॉफ्टवेयर्स।

निम्नलिखित डेबियन जेसी में डिफ़ॉल्ट .bashrc में मौजूद है [ -x /usr/bin/tput ] && /usr/bin/tput setaf 1 >&/dev/null && color_prompt=yes:। (ncurses 5.9)
thom_nic

2
tput Coजेसी और ज़ेनियल में भी "अज्ञात टर्मोफ़ क्षमता" देता है। tput colorsऔर tput setaf 1दोनों काम करने लगते हैं, हालांकि मैं मानता हूं कि मुझे समझ नहीं आता कि क्यों
थोम_निक

2

कृपया मेरे विस्तृत उत्तर के लिए /ubuntu//a/614714/398785 देखें कि मुझे क्यों TERM=xterm-colorगलत दृष्टिकोण और उबंटू .bashrcअप्रचलित है। मैं सुझाव देता हूं कि आप साथ जाएं TERM=xterm-256color(जो कि गनोम-टर्मिनल 3.16 के बाद से डिफ़ॉल्ट है, लेकिन पुराने गनोम-टर्मिनलों के साथ उपयोग करने के लिए भी सुरक्षित है), और अपने .bashrcअनुसार समायोजित करें ।


1
आपके लिंक के लिए +1। मामूली सुझाव; निम्नलिखित वाक्य भ्रामक हो सकता है (मुझे पहली बार आभास हुआ कि आप कह रहे हैं कि प्रयोग .bashrcअप्रचलित है)। "उबंटू का .bashrc अप्रचलित है।"
आइजैक

@IsaacS क्या आपके पास कोई सुझाव है कि इसे कैसे सुधारें? उदाहरण के लिए "पुरानी" मदद से "अप्रचलित" की जगह लेंगे?
१०:१६ पर

1
ऐसा नहीं है कि प्रतीत होता है xterm-256colorका कारण बनता है htopअपने लेआउट ऊपर गड़बड़ करने के लिए इस तरह उबंटू 18.04 में।
मोनिका

@OrangeDog किस टर्मिनल एमुलेटर में? यह सवाल यहाँ है और इस प्रकार मेरी प्रतिक्रिया गनोम टर्मिनल पर केंद्रित है, जबकि आपके द्वारा जोड़ा गया पृष्ठ कोनोलास दिखाता है। बग ऐसा लगता है जैसे टर्मिनल एमुलेटर अभी तक आरईपी एस्केप अनुक्रम का समर्थन नहीं करता है जो उस समय के आसपास ncurses ने उपयोग करना शुरू कर दिया था। VTE (GNOME टर्मिनल) ने इसके लिए उबंटू 18.04 में पहले ही समर्थन जोड़ दिया था, संभावना है कि कोनसोल नहीं था। मुझे संदेह है कि htop टूटना के साथ आपकी टिप्पणी Konsole के लिए मान्य है, लेकिन GNOME टर्मिनल के लिए नहीं।
उदाहरणजाम

@egmont मूल समस्या के लिए नहीं बोल सकता है, लेकिन मुझे WSL के टर्मिनल (जो कुछ भी है) के साथ एक ही परिणाम मिलता है।
मोनिका
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.