在使用屏幕时设置xterm(PuTTY)窗口标题?

我试图让screen设置我的xterm标题。 我在screen外工作,但screen保持任何标题,当我开始它。 这是我的.bashrc

函数bash_prompt_command(){
     #$ PWD应该保留多less个字符
    本地pwdmaxlen = 25
     #表示已经有dir截断
    本地trunc_symbol =“..”
    本地dir = $ {PWD ## * /}
     pwdmaxlen = $(((pwdmaxlen <$ {#dir})?$ {#dir}:pwdmaxlen))
     NEW_PWD = $ {PWD /#$ HOME / \〜}
    本地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}”的情况下
     “的xterm”)
         TITLEBAR ='\ [\ 033] 0; \ u @ \ h> $ {NEW_PWD} \ 007 \]'
         PS1 =“$ {TITLEBAR} \ [\ E [1;32米\] [\ E [0;36米\] \ U \ E [1;32米\] @ \ E [1;33米\] \ħ\ E [ 1; 32m \]] \ e [0; 37m \] \ $ {NEW_PWD} / \ e [1; 32m \] \ $ \ [\ e [0m“
         ;;
     “屏幕”)
         TITLEBAR ='\ [\ 033] 0; \ u @ \ h> $ {NEW_PWD} \ 007 \]'
         ESC = '\ [\ EK。\ E \\\]'
         PS1 =“$ {TITLEBAR} \ [\ e [1; 32m \] [\ e [0; 36m \] \ u \ e [1; 32m \]] \ e [0; 37m \] \ $ {NEW_PWD} / \ e [1; 32m \] \ $ $ {ESC} \ [\ e [0m“
         ;;
     *)
         PS1 =“\ [\ E [1;32米\] [\ E [0;36米\] \ U \ E [1;32米\] @ \ E [1;33米\] \ħ\ E [1;32米\ ]] \ e [0; 37m \] \ $ {NEW_PWD} / \ e [1; 32m \] \ $ \ [\ e [0m“
     ;;
 ESAC

这里是我的.screenrc

 hardstatus alwayslastline
 hardstatus string%{= kg} [%{Y}%H%{g}] [%=%{= kw}%?% -  Lw%?%{= b kR} (%)%(%)%(%)%(%)%(%)% {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; screen \ 007'

在屏幕上
 shelltitle'$ | bash'

我做错了什么?

更新(2010年8月19日):问题在于,当您设置alwayslastline时,您无法从屏幕内更新terminal的标题。 所以我的解决办法就是放弃,为我的屏幕会议预定一个有用的标题。 我更新的.bashrc.screenrc可以在http://bitbucket.org/jsumners/rcfiles/srcfind。

屏幕内的转义码是不同的 。

屏幕外部:

 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\\\]' 

将解决你的问题。

实际上,有一种方法可以将转义序列直接发送到xterm,通过屏幕。 这并不容易find,但从屏幕代码(src / ansi.c)我认为它自2005年以来一直在那里。我有它在xterm,Gnometerminal和腻子工作。 我发现了一个注释,说明它不能在那里工作,因为它们不处理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(设备控制string)是一个转义代码,用于直接发送到terminal(我认为这是它多年前的原始目的)。 这样的string以ST转义码(String Terminator)结束。

包装string以将terminal的窗口标题设置在DCS..ST块内,并且即使在hardstatus alwayslastline的情况下也能正确地更新屏幕和更新。

DCS = \ 033P,ST = \ 033 \

示例 – 使用当前工作目录更新窗口标题

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

迟到总比不到好! 希望这有助于某人。

以防万一我的屏幕来源更改错误:我正在运行最新的屏幕会话混帐,而这又是使用几乎最新的屏幕混帐(一些特定于屏幕会话的变化)。 但日志消息的date是从2005年的屏幕(如果你克隆屏幕git回购并使用下面的命令,你可以看到对DCS处理提交的更改)。

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

crb是对的,但是

a)他使用的转义码不适用于我。 它应该是\033k而不是\033_ 。 请参阅"TITLES (naming windows)"下的screen (1) 。 所以它应该是:

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

b)这种转义只用于设置屏幕窗口的标题。 屏幕的一个实例可以有多个窗口,每个窗口都有一个名字,这就是在hardstatus显示的hardstatus和带有t转义序列的caption

c)如果在.screenrc为xterm设置正确的terminfo,则正常的bash转义工作:

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

(这也works on my machine腻子)

所以为了为屏幕窗口和putty / xterm标题设置正确的标题,我使用了如下的东西:

 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

我不打算完全回答这个问题,但让我提出解决问题的方法。 许多窗口pipe理器支持EWMH规范。 还有一个命令行工具wmctrl能够与他们交互。 使用这个工具,用下面的命令可以很容易地改变活动窗口的标题:

  wmctrl -r :ACTIVE: -T "FooTitle" 

也可以更改窗口图标,布局和其他属性。由于Windows不支持EWMH,所以该工具可能不适用于PuTTY,但大多数Linux系统都应该接受它。

使用这种方法,无论您是否使用screen无关紧要。

最近2周,我search了很多论坛,我还没有find这个问题的答案:

如何获得所有命令输出到腻子标题?

它需要它为其他程序知道什么时候在服务器上的一些工作完成,是对的还是错的。 Plink的标准输出和标准input不工作,我用了很多等待延迟和一些命令,而不是为别人工作的调整。 XSEL和XCLIP无法安装在该服务器上。

所以这里是解决scheme:

  1. 获取文件中的命令输出。
  2. 将该文件回传给标题。

在腻子客户端和suse服务器上看起来像这样:

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

希望有人能够使用这个。 它不适用于所有的服务器types和腻子客户端设置,当然,但这个想法应该运作良好。