SSH रिमोट को दूसरी मशीन में लॉग करने के बाद टर्मिनल शीर्षक को ठीक करें


18

अभी मैं अपने टर्मिनल बार के शीर्षक बदलने के लिए एक-लाइन पर्ल कोड का उपयोग कर रहा हूं,

print("\e]0;@ARGV\7");

लेकिन हर बार जब मैं किसी अन्य दूरस्थ मशीन में जाता हूं, तो शीर्षक को होस्ट द्वारा संशोधित किया जाएगा (जिसके द्वारा मैं विशेष रूप से परेशान नहीं हूं)। लेकिन मैं कनेक्शन से बाहर निकलने के बाद, संशोधित शीर्षक बनी हुई है। क्या इसे ठीक करने का कोई तरीका है? अनिवार्य रूप से मैं अपने टर्मिनलों के लिए एक निश्चित शीर्षक चाहता हूं जब स्थानीय रूप से काम कर रहा हो।

मैं मुख्य रूप से या तो CentOS या डेबियन के तहत xfce टर्मिनल और टर्मिनेटर का उपयोग करता हूं। धन्यवाद।

संपादित करें

एक और सूक्ष्मता यह है कि सभी नामों को एक ही नाम दिए जाने के बजाय, मैं अपने शीर्षकों को संपादित करने की स्वतंत्रता को पसंद करना चाहूंगा, लेकिन मैंने जो कुछ भी संपादित किया है उससे SSH सत्र को रोकना।

जवाबों:


6

मुझे विंडो टाइटल के बारे में पता नहीं है, लेकिन मैं कोशिश कर रहा हूं कि मेरा सिस्टम एक ssh सत्र को समाप्त करने पर कुछ करे- दरअसल, ssh सत्र समाप्त करने के बाद। संक्षेप में: यह उस तरह काम नहीं करता है। मूल रूप से आपके पास तीन विकल्प हैं:

  1. Ssh के चारों ओर एक आवरण लिखें, अर्थात, एक निष्पादन योग्य शेल स्क्रिप्ट जिसका नाम आपके $ PATH में sshपूर्वता लेता है /usr/bin/sshजिसमें exec /usr/bin/ssh $@उसके मध्य में कहीं रेखा होती है। यह आपको अपने शेल को कुछ सामान करने से पहले और बाद में प्रभावी ssh बाइनरी चलाने में सक्षम बनाता है, जबकि th eoverhead को न्यूनतम रखने के लिए।

  2. कमांडअप या कुछ कॉन्फिग-सेटिंग के माध्यम से पास किए गए शेल कमांड को निष्पादित करने वाले क्लीनअप हुक प्रदान करने के लिए अपनी पसंद के SSH स्रोतों के विरुद्ध एक पैच लिखें। यही हम चाहते हैं।

  3. Have PROMPT_COMMANDके उत्पादन का मूल्यांकन history। मूल रूप से 1 के लिए एक अधिक सामान्य और अधिक बदसूरत दृष्टिकोण।


मूल रूप से मैंने वर्तमान शीर्षक को हथियाने और SSH सत्र से पहले इसे सहेजने के लिए एक साधारण स्क्रिप्ट लिखी, फिर बाद में शीर्षक को पुनर्प्राप्त करें।
nye17

4
@ nye17 क्या आप अपनी समाधान स्क्रिप्ट पोस्ट कर सकते हैं जिसका आपने उपयोग किया है?
रेग मेम

मैंने अपनी समाधान स्क्रिप्ट नीचे पोस्ट की है। एक करीबी मैच होना चाहिए जो @ nye17 ने किया। unix.stackexchange.com/a/341277/112190
phyatt

7

समाधान: ssh और su कमांड्स के बाद कुछ करने के लिए कुछ कार्य ~ / .bashrc जोड़ें

function title()
{
   # change the title of the current window or tab
   echo -ne "\033]0;$*\007"
}

function ssh()
{
   /usr/bin/ssh "$@"
   # revert the window title after the ssh command
   title $USER@$HOST
}

function su()
{
   /bin/su "$@"
   # revert the window title after the su command
   title $USER@$HOST
}

नोट: ~ / .bashrc में संपादन के बाद बैश पुनः आरंभ करें

उदाहरण:

# title is "user1@boxA"
ssh boxB  # auto changes title while on boxB to "user1@boxB"
exit
# title returns back to "user1@boxA" because of our title call in ssh()
su - user2 # auto changes title while switched user to user2: "user2@boxA"
exit
# title returns back to "user1@boxA" because of our title call in su()

उम्मीद है की वो मदद करदे।


थोड़ा कहना गलत revertआप को देखने के लिए क्या यह पहले था की जांच नहीं करते के रूप में ... यदि आप पूछे और पूर्व मूल्य बचाया यद्यपि ;-)
nhed

4

अपने स्थानीय खोल dotfile (जैसे कॉन्फ़िगर $PROMPT_COMMANDमें ~/.bashrcउचित रूप से टर्मिनल शीर्षक सेट करने के लिए, एक ही प्रणाली का उपयोग करके)।

उदाहरण के लिए:

export PROMPT_COMMAND="printf '\e]0;bash\7\n'"

1. prompt_command के पास आपकी टर्मिनल विंडो का शीर्षक करने के लिए कुछ नहीं है, है ना? मेरे पास प्रॉम्प्ट_कॉमंड सेट है, लेकिन केवल प्रॉम्प्ट के लिए। 2. मुझे अभी भी ssh लॉगिंग से बाहर निकलने के बाद अपनी स्थानीय सेटिंग को याद रखने और सक्रिय करने के लिए एक तंत्र की आवश्यकता है।
nye17

प्रॉम्प्ट कमांड केवल अपने टर्मिनल के लिए अपने टाइटल बार का नाम बदलने के लिए आवश्यक एस्केप सीक्वेंस का उत्सर्जन करता है। :)
मोनिका

लेकिन मैं यह भी चाहता हूं कि हर एक सत्र में एक ही नाम होने के बजाय मुझे जो भी टर्मिनल चाहिए, उसका नाम बदलने की आजादी हो। व्यवहार में, मैं मूल रूप से टर्मिनल शीर्षक मैनुअल को संपादित करता हूं और आशा करता हूं कि टर्मिनल SSH लॉगिन / लॉगआउट के बाद भी निश्चित शीर्षक रहने के लिए। क्या इस का कोई मतलब निकलता है?
nye17

1
तो फिर एक चर में वांछित शीर्षक रखो, और आउटपुट जो।
इग्नासियो वाज़क्वेज़-अब्राम्स

यदि आप शून्य शीर्षक (जैसे export PROMPT_COMMAND="printf '\e]0;\7\n'") सेट करने के लिए इस टर्मिनल एस्केप अनुक्रम का उपयोग करते हैं , तो आपका टर्मिनल एमुलेटर फिट होने के साथ ही विंडो शीर्षक सेट कर सकता है। जब आप टर्मिनल होस्ट सेट करने वाले किसी दूरस्थ होस्ट के पास जाते हैं, तो आपका टर्मिनल एमुलेटर उस शीर्षक को दिखाएगा, और जब आप लॉगआउट करते हैं, तो वह अपने शीर्षक का उपयोग करने के लिए वापस आ जाएगा। कम से कम, कि macOS टर्मिनल ऐप कैसे काम करता है।
क्लेमाशन

3

इन पंक्तियों को ~ / .bashrc में जोड़ें

# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
    PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"

    ;;
*)
    ;;
esac

डेबियन आधारित linuxes के साथ अच्छी तरह से काम करता है


1
आईटी हालांकि शीर्षक सेट नहीं करता है ...
Bananguin

यह आमतौर पर उपयोग PROMPT_COMMANDकरने के बजाय उपयोग करने के लिए बेहतर काम करता है PS1, क्योंकि आपको \[ \]ब्रैकेटिंग को शामिल करने की आवश्यकता नहीं है और यह कुछ उद्धरण को समाप्त कर सकता है।
क्रिस पेज

2

एक समाधान ssh'ing से पहले vt100 के लिए टर्मिनल चर को बदलने के लिए है, जैसे रन

export TERM=vt100

यह इसलिए काम करता है क्योंकि आमतौर पर इनिशियलाइज़ेशन स्क्रिप्ट टर्मिनल वैरिएबल को देखती है और केवल इसे xterm शीर्षक से बदल देती है। आप वैकल्पिक स्क्रीन, रंग और शायद कुछ अन्य फैंसी विशेषताओं को खो देते हैं जिनकी आप सराहना कर सकते हैं या नहीं।

यदि आप स्थानीय टर्मिनल को xterm के रूप में रखना चाहते हैं, तो उर्फ ​​ssh मक्खी पर टर्मिनल चर को बदलने के लिए, जैसे

alias ssh='TERM=vt100 /usr/bin/ssh'

यह चीजों को प्रदर्शित करने के तरीके को बदलता है। रंगों को नहीं दिखाया गया है
npk

0

मैंने अपने .bashrc फ़ाइल में अपने PS1 में इसे जोड़कर इस समस्या को ठीक किया।

\[\e]2;\u@\H:\w\a\]

इसलिए पूरी लाइन इस तरह दिखती है (मैंने अपने PS को कस्टमाइज़ कर लिया है!)

export PS1='\[\e]2;\u@\H:\w\a\]\n($LOGNAME@$HOSTNAME) \t\n[$PWD]: '

मुझे उम्मीद है कि दूसरों की मदद करता है।


यदि आप शून्य शीर्षक (जैसे export PS1='\[\033]0;\007\]\h:\W \u\$ ') सेट करने के लिए इस टर्मिनल एस्केप अनुक्रम का उपयोग करते हैं , तो आपका टर्मिनल एमुलेटर फिट होने के साथ ही विंडो शीर्षक सेट कर सकता है। जब आप टर्मिनल होस्ट सेट करने वाले किसी दूरस्थ होस्ट को भेजते हैं, तो आपका टर्मिनल एमुलेटर यह दिखाएगा, और जब आप लॉगआउट करते हैं, तो वह अपने शीर्षक का उपयोग करने के लिए वापस आ जाएगा। कम से कम, कि macOS टर्मिनल ऐप कैसे काम करता है।
क्लेमाशन

0

जब मैं SSH से बाहर निकलता हूं तो अन्य उत्तर मेरे लिए काम नहीं करेंगे, लेकिन मुझे पास मिल गया। जब मैं दूरस्थ ssh सत्र से बाहर निकलता हूं, तो सेट-ऑटोमैटिक-रीनेम काम करता है इसलिए यह ऑटो रीनेम हो जाता है और रीसेट करने के लिए विंडो से बाहर नहीं निकलना पड़ता। [जनवरी 2018 - डेबियन 9]

ssh() {
tmux rename-window "$*"
command ssh "$@"
tmux setw automatic-rename
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.