स्क्रीन का उपयोग करते समय xterm (PuTTY) विंडो शीर्षक सेट करें?


12

मैं screenअपना xtermटाइटल सेट करने की कोशिश कर रहा हूं । मेरे पास यह काम कर रहा है screen, लेकिन screenजब मैंने इसे शुरू किया था तो जो भी शीर्षक था, वह मेरे पास है। यहाँ मेरा है .bashrc:

फंक्शन bash_prompt_command () {
    # $ पीडब्ल्यूडी के कितने वर्ण रखे जाने चाहिए
    स्थानीय pwdmaxlen = 25
    # संकेत देते हैं कि घोर त्रासदी हुई है
    स्थानीय trunc_symbol = ".."
    स्थानीय dir = $ {PWD ## * /}
    pwdmaxlen = $ (((pwdmaxlen <$ {# dir})? $ {# dir}: pwdmaxlen)
    NEW_PWD = $ {पीडब्ल्यूडी / # $ घर / \ ~}
    स्थानीय pwdoffset = $ (($ {# NEW_PWD} - pwdmaxlen))
    अगर [$ {pwdoffset} -gt "0"]
    फिर
        NEW_PWD = $ {NEW_PWD: $ pwdoffset: $ pwdmaxlen}
        NEW_PWD = $ {trunc_symbol} / $ {NEW_PWD # * /}
    फाई

    NEW_PWD निर्यात करें
}

PROMPT_COMMAND = bash_prompt_command
# रंग चार्ट @ http://wiki.archlinux.org/index.php/Color_Bash_Prompt
मामला "$ {TERM}" में
    "टर्म")
        TITLEBAR = '\ [\ 033] 0; \ u @ \ h> $ {NEW_PWD} \ 007] ['
        PS1 = "$ {शीर्षक पट्टी} \ [\ ई [1; 32m \] [\ ई [0; 36m \] \ यू \ ई [1; 32m \] @ \ ई [1; 33m \] \ h \ ई [ 1; 32 मी \ _] \ ई [0; 37 मीटर \] \ $ {NEW_PWD} / \ e [1; 32m \] \ $ \ [\ e [0m "
        ;;
    "स्क्रीन")
        TITLEBAR = '\ [\ 033] 0; \ u @ \ h> $ {NEW_PWD} \ 007] ['
        ESC = '\ [\ ek \ ई \\\]'
        PS1 = "$ {TITLEBAR} \ [\ e [1; 32m \] [\ e [0; 36m \] \ u \ e [1; 32m \]] \ e [0; 37m \] \ $" NEW_PWD}; / \ e [१; ३२ मी \ _ \ _ $ $ {ESC} \ [\ e [०m]
        ;;
    *)
        PS1 = "\ [\ ई [1; 32m \] [\ ई [0; 36m \] \ यू \ ई [1; 32m \] @ \ ई [1; 33m \] \ h \ ई [1; 32m \ ]] \ e [0; 37m \] \ $ {NEW_PWD} / \ e [1; 32m \] \ $ \ [\ e [0m "
    ;;
esac

और यहाँ मेरा है .screenrc:

हार्डस्टैटस ऑलस्टेलाइन
हार्डस्टैट स्ट्रिंग '% {= kg} [% {Y}% H% {g}] [% =% {= kw}%?% - Lw%?% {= b kR} (% {W}% n-%? t%? (% u)%?% {= b kR})% {= kw}%?% + L%?%?% =% {g}] [% {Y}% l% {g}]%? {g} [% {B}% m।% d।% Y% {G}% c% {g}] '

termcapinfo xterm | xterms | xs | rxvt ti @: te @
termcapinfo xterm का hs: ts = \ E] 2 ;: fs = \ 007: ds = \ E] 2; स्क्रीन \ 007 '

ऑनस्क्रीन
शेल्टल '$ | बैश'

मैं गलत क्या कर रहा हूँ?

अद्यतन (19 अगस्त 2010): समस्या यह है कि जब आप सेट करते हैं तो आप स्क्रीन के भीतर से टर्मिनल के शीर्षक को अपडेट नहीं कर सकते alwayslastline। तो मेरा समाधान सिर्फ मेरे स्क्रीन सत्रों के लिए एक पूर्व निर्धारित, उपयोगी, शीर्षक के लिए छोड़ देना और व्यवस्थित करना था। मेरा अद्यतन .bashrcऔर http://bitbucket.org/jsumners/rcfiles/src.screenrc पर पाया जा सकता है ।

जवाबों:


4

भागने के कोड स्क्रीन के अंदर अलग हैं

स्क्रीन के बाहर:

PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD}\007"'

यह अंदर स्क्रीन के बराबर है:

PROMPT_COMMAND='echo -ne "\033_${USER}@${HOSTNAME}: ${PWD}\033\\"'

अपना मामला बदलना $ {TERM} = "स्क्रीन" शीर्षक पट्टी को

TITLEBAR='\[\033_\u@\h > ${NEW_PWD}\033\\\]'

आपकी समस्या का समाधान करेगा।


ये काम नहीं कर रहा है। मुझे समझ नहीं आता क्यों।
जेम्स सुमेर जूल

मैंने निर्धारित किया है कि hardstatus alwayslastlineजैसा मैं करता हूं, screenवैसी screenही सेटिंग xtermटाइटल सेट करने से रोकता है । अब अगर मैं यह पता लगा सकता हूं कि एक ही समय में दोनों कैसे करें।
जेम्स सुमेर जूल 6'09

क्या इसलिए कि आपके हार्डस्टैट में% t (शीर्षक के लिए) है?
crb

नहीं। बस इसे हटा दिया और एक ही परिणाम प्राप्त करें। मुझे विश्वास है कि मुझे screenउस विंडो शीर्षक को सेट करने के लिए एक उपनाम सेट करना होगा और फिर प्रोग्राम लॉन्च करना होगा। और फिर बस का उपयोग करते समय गतिशील टर्मिनल खिताब पर छोड़ दें screen। :(
जेम्स सुमेरस

1
Bugs.launchpad.net/byobu/+bug/338722/comments/10 का कहना है कि यह स्क्रीन में एक सीमा है
agnul

7

असल में, स्क्रीन से गुजरते हुए, सीधे एक्सटर्म में एस्केप सीक्वेंस भेजने का एक तरीका है। यह खोजना आसान नहीं था, लेकिन स्क्रीन कोड (src / asi.c) से मुझे लगता है कि यह 2005 के बाद से है। मेरे पास यह xterm, गनोम टर्मिनल और पोटीन में काम कर रहा है। मुझे मीनट्टी स्रोत में एक नोट मिला, जो दर्शाता है कि यह वहां काम नहीं करता है क्योंकि वे DCS को संभालते नहीं हैं (जब तक कि यह हाल ही में तय नहीं किया गया था)।

नीचे स्क्रीन के लिए प्रलेखन से ( http://www.gnu.org/software/screen/manual/html_node/Control-Sequences.html पर )

ESC P (A) Device Control String
          Outputs a string directly to the host terminal without interpretation.

ANSI DCS (डिवाइस कंट्रोल स्ट्रिंग) एक एस्केप कोड है जिसका उपयोग सीधे एक टर्मिनल पर भेजने के लिए किया जाता है (मुझे लगता है कि यह कई साल पहले से इसका मूल उद्देश्य था)। इस तरह की स्ट्रिंग को एसटी एस्केप कोड (स्ट्रिंग टर्मिनेटर) के साथ समाप्त किया जाता है।

टर्मिनल के विंडो शीर्षक को DCS..ST ब्लॉक के अंदर सेट करने के लिए स्ट्रिंग को लपेटें, और यह स्क्रीन और अपडेट के माध्यम से जाता है, यहां तक ​​कि हार्डस्टैटस ऑन्फ्लेस्टलाइन के साथ भी।

DCS = \ 033P, ST = \ 033 \

उदाहरण - वर्तमान कार्य निर्देशिका के साथ विंडो शीर्षक को अपडेट करने के लिए, उपयोग करें

NEW_TITLE="\033]0;${PWD/$HOME/~}\007"
echo -ne "\033P${NEW_TITLE}\033\\"

देर आए दुरुस्त आए! आशा है कि यह किसी की मदद करता है।

बस मामले में मैं स्क्रीन स्रोत परिवर्तनों के बारे में गलत हूं: मैं स्क्रीन-सत्र गिट से नवीनतम चला रहा हूं, जो स्क्रीन गिट से लगभग नवीनतम का उपयोग कर रहा है (स्क्रीन-सत्र के लिए विशिष्ट कुछ बदलावों के साथ)। लेकिन लॉग संदेश 2005 स्क्रीन से दिनांकित हैं (यदि आप स्क्रीन गिट रेपो को क्लोन करते हैं और नीचे दिए गए कमांड का उपयोग करते हैं तो आप DCS हैंडलिंग से संबंधित उस बदलाव को देख सकते हैं)।

git clone git://git.savannah.gnu.org/screen.git
git difftool e6618a14^! src/ansi.c

1

crb एक तरह का अधिकार है, लेकिन

a) वह जो भागने का कोड इस्तेमाल करता है वह मेरे लिए काम नहीं करता है। इसके \033kबजाय होना चाहिए \033_। देखें screen (1)के तहत "TITLES (naming windows)"। तो यह होना चाहिए:

PROMPT_COMMAND='echo -ne "\033k${USER}@${HOSTNAME}: ${PWD}\033\\"'

ख) इस तरह का पलायन केवल स्क्रीन-विंडो के शीर्षक को स्थापित करने के लिए किया जाता है। स्क्रीन के एक उदाहरण में कई विंडो हो सकती हैं, उनमें से प्रत्येक में एक नाम है, यही वह है जो भागने के अनुक्रम में hardstatusऔर उसके captionसाथ प्रदर्शित होता है t

ग) अगर आप xterm के लिए सही टर्मऑफ़ सेट करते हैं तो सामान्य बैश बचने का काम करता है .screenrc:

termcapinfo xterm 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'

(यह भी works on my machineपोटीन के लिए)

इसलिए स्क्रीन विंडो और पोटीनी / एक्सटर्म शीर्षक दोनों के लिए सही शीर्षक सेट करने के लिए, मैं कुछ इस तरह का उपयोग करता हूं:

XTERM_TITLE="${USER}@${HOSTNAME}: ${PWD}"
SCREEN_TITLE="${PWD}"
PROMPT_COMMAND='echo -ne "\033]0;$XTERM_TITLE\007\033k$SCREEN_TITLE\033\\"'

संदर्भ के लिए: http://tldp.org/HOWTO/Bash-Prompt-HOWTO/x395.html


1

मैं इस सवाल का पूरी तरह से जवाब नहीं दे रहा हूं, लेकिन मुझे इस मुद्दे को हल करने का तरीका सुझाएं। कई विंडो प्रबंधक EWMH विनिर्देशन का समर्थन करते हैं । एक कमांड लाइन टूल भी है wmctrlजो उनके साथ बातचीत करने में सक्षम है। इस टूल का उपयोग करके, कोई भी आसानी से निम्न कमांड के साथ सक्रिय विंडो का शीर्षक बदल सकता है:

  wmctrl -r :ACTIVE: -T "FooTitle"

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

इस पद्धति के साथ यह कोई फर्क नहीं पड़ता कि आप उपयोग करते हैं screenया नहीं।


0

पिछले 2 सप्ताह में मैंने कई फोरम खोजे हैं और मुझे इस सवाल का जवाब नहीं मिला है:

पोटीन शीर्षक के लिए सभी कमांड आउटपुट कैसे प्राप्त करें?

यह जानने के लिए अन्य कार्यक्रमों की आवश्यकता है कि किसी सर्वर पर कुछ नौकरियां कब की जाती हैं और क्या यह सही है या गलत। Plink stdout और stdin काम नहीं कर रहा था, मैंने कई देरी के साथ प्रतीक्षा में देरी का इस्तेमाल किया और कुछ आदेशों के लिए जिन्होंने दूसरों के लिए काम किया। उस सर्वर पर XSEL और XCLIP स्थापित नहीं किए जा सके।

तो यहाँ समाधान है:

  1. किसी फ़ाइल में कमांड आउटपुट प्राप्त करें।
  2. उस फ़ाइल को इको को शीर्षक दें।

पोटीन क्लाइंट और suse सर्वर पर यह इस तरह दिखता है:

ls /home | grep domagaja > logutoit.txt 
echo -e "\033]0\\;$(cat logutoit.txt)\\007\\c"

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.