Ubuntu 15.04新安装:无法重命名gnome-terminal标签

在Ubuntu 14.10中,如果我同时打开了多个终端标签页,我可以右键点击终端标签页并重命名。但是在Ubuntu 15.04中,我找不到这个功能。
有没有简单的方法可以把它恢复回来?
这是当前的版本:
$ gnome-terminal --version
GNOME Terminal 3.14.2
6个回答

这个由Kirby提出的.bashrc解决方案对我起作用了:
set-title(){
  ORIG=$PS1
  TITLE="\e]2;$@\a"
  PS1=${ORIG}${TITLE}
}

然后从我的提示符中输入:$ set-title test-title

3在15.10上对我来说运行得很好,唯一的注意事项是每次运行时都会追加到PS1,所以不要从脚本中运行。在我多次调用它并使用set-title "longer and "之后:echo $PS1 \[\e]0; \u@\h: \w \a\]\u@\h:\w\[\033[m\]$(__git_ps1)$ \e]2;longer and \a\e]2;longer and \a\e]2;longer and \a\e]2;longer and \a\e]2;longer and \a\e]2;longer and \a\e]2;longer and \a\e]2;longer and \a\e]2;longer and \a\e]2;longer and \a\e]2;longer and \a\e]2;longer and \a\e]2;longer and \a\e]2;longer and \a\e]2;longer and \a\e]2;longer and \a\e]2;longer and \a\e]2;longer and \a\e]2;longer and \a\e]2;longer and \a\e]2;longer and \a - ahcox
1在Ubuntu 16.04上对我来说没问题! - Programster
1运作得像魔法一样好!! - sharadendu sinha
在前台进程运行时,我如何更改标题而不中断它呢? - Jānis Elmeris
1我认为你可以通过使用Control + Z暂停进程,然后使用set-title X来设置标题,最后使用fg恢复进程。 - ronan_mac

在这里回答了这里

我引用:

The user title code was removed1 from gnome-terminal 3.14. There's only one way to set the title, using an escape sequence - e.g. with bash:

PROMPT_COMMAND='echo -ne "\033]0;YOUR TITLE GOES HERE\007"'

1: see gnome bug 724110 and gnome bug 740188.


10谢谢你的回答。很遗憾它已经消失了,希望他们在下一个版本中能够重新添加进去。与此同时,我会使用转义序列而不是右键点击的方法。 - Tom
2@Tom 写一个错误报告 =) - A.B.
如果你往下滚动,你会发现一个基于命令行的好的答案:http://askubuntu.com/a/702773/130331 - ahcox
13这不仅仅是可惜,而且是毫无意义。我有个主意,从Debian Wheezy升级到Jessie,只是为了拥有一切(确实还不确定),但结果变得更糟:糟糕的决定和愚蠢的缺陷(例如,在gdm3中,我安装的可能窗口管理器/会话列表无法适应或滚动,所以被简单地裁剪,因此我无法选择所有的窗口管理器)。对我来说,自从出现gnome-shell起,GNOME就注定要失败。也消失了在新窗口或选项卡中打开新终端的菜单(但你仍然可以通过快捷键来完成。为什么呢?!将一切都替换成一个巨大的智能按钮:点击它就能做任何事情!) - ShinTakezou
2通常新版本的发布是增加功能而不是删除功能。 - angelcervera
哦,又是那个小矮人对功能的战争...至少我们有一个变通方法。 - Calmarius
2我创建了一个命令(一个Shell脚本),称为"tab",内容只有简单的echo -ne "\033]0;$1\007"。现在,我可以在任何标签页中运行tab TABNAME来设置标签标题。虽然不如右键点击标签进行重命名方便,但现在这样也可以。谢谢A.B.! - Brian Pipa
@ShinTakezou 我不知道在gnome这边是谁在做决策,但自从转向gnome 3以来,一连串愚蠢的决定接踵而至。我从未见过一个开发者如此摧残自己的心血和努力,就像gnome那样。他们最初拥有一个如此出色的桌面环境,但每次发布都只能看到功能被削减。我认为gnome的某个人正在对这个非常精心设计的恶作剧感到高兴。在gnome 3的7年生命周期中,我们所能展示的只是比gnome-shell 3.01和nautilus等版本少了75%的功能。 - thebunnyrules

我简直不敢相信他们居然移除了这样一个用户友好的功能。
我要转用ROXTerm(http://roxterm.sourceforge.net),它能很好地完成工作。它在Ubuntu中有打包版本。
sudo apt-get install roxterm

然后,让恐龙继续走自己的路吧 ;- )

1如何在roxterm中更改选项卡标题?我找不到它。 - Halil
也适用于16.04版本 - prusswan
哇,无法使用gnome-terminal将终端设置为后台,我从来没有弄明白为什么...这是终端本身的问题。devilspie与roxterm一起使用时,终端背景效果很棒。 - m3nda
1RoxTerm太棒了,而且仍然可用,但可悲的是它不会再继续发展了:sadface::https://sourceforge.net/p/roxterm/discussion/422638/thread/60da6975/ - Williams
自从那时候,我已经转用Terminator了,再也不需要使用RoxTerm了... - Michael Opdenacker

我已经尝试了上面提到的RoxTerm,并且效果不错。但是我最终选择了MATE终端,它是MATE项目的一部分,这是Gnome 2的延续,在15.04版本上:

sudo apt-get install mate-terminal

那个终端是基于Gnome终端代码的。
评论:很难理解Gnome终端开发人员的心态。他们在那里讨论如何命名终端标签,以及这有多么困难。如果是这样的话,为什么要让用户更难命名它们呢?真的不太聪明。

现在我已经花了大部分时间进行调查,最终找到了设置这个标题的方法。它是通过以\e]0;开头并以BEL字符(= \007 = \a)结尾的转义序列完成的。与我上面所说的不同,通过这种转义序列(还有一些其他的转义序列),从Shell到终端应用程序的通信是可能的,但非常有限。

关于上面提到的内容:

PROMPT_COMMAND='echo -ne "\e]0;YOUR TITLE GOES HERE\a"'

它可以工作,但并不总是如此。 PROMPT_COMMAND 是一个变量,每次发送命令时都会执行其内容,因此它也会发送这个转义序列。然而,这可以被 PS1 变量中的转义序列覆盖,该变量设置了命令行提示符。这就是为什么上面在这里没有效果。

从一个较旧的 Ubuntu 安装中,我获取了以下内容,它设置了命令提示符(右侧部分,在 ] 之后),并且还发送了所需的转义序列(左侧部分,直到并包括 ]):

PS1="\[\e]0;\u@\h: \w\a\]\u@\h:\w\$ "

这样做可能效果更好,因为每次都不需要解释`$PROMPT_COMMAND`。它还有更多的选项,因为Bash在这里有更多的转义序列,例如当前用户名的`\u`,当前目录名的`\W`或当前工作目录的整个路径的`\w`,可选择通过`$PROMPT_DIRTRIM`中的数字进行修剪到最后几个。请参阅Bash手册中的章节`PROMPTING`。还要注意,在这里转义序列还必须用`\[`和`\]`括起来。
要设置一个固定的标题,可以使用以下方法:
PS1="\[\e]0;YOUR TITLE GOES HERE\a\]\u@\h:\w\$ "

享受!


在我的调查过程中,我还尝试了解gnome-terminal的源代码,这导致了vte源代码,其中对于标题设置和读取转义序列的支持被认为是一种安全风险:请参见这里(案例20,案例21)和这里("窗口标题报告")。

这将设置标题,但也会清除其他用途中PS1的先前定义,例如设置自定义命令提示符。我刚刚尝试将您的转义序列添加到现有的PS1内容上,似乎可以工作。像这样:`PS1+="\[\e]0;YOUR TITLE GOES HERE\a\]\u@\h:\w\$ "` - ahcox

设置 $PROMPT_COMMAND 如上所示对此处没有任何效果。这并不奇怪,因为Bash在终端内运行,而父进程(这里是gnome-terminal)无法读取Unix-like操作系统中子进程的环境。 使用更简单的方法,例如
PROMPT_COMMAND='echo bla'

在执行echo bla时,什么都不会发生。
编辑:必须将其包装在转义序列中,参见我的另一个答案。尽管读取子进程的环境是不可能的,但可以通过这些序列与父进程进行一些通信。
在Gnome bug 740188中,他们谈论在.bashrc中定义一个title()函数。每个打开的标签页都需要一个不同的函数吗?如果可能的话,这是一种严重丑陋的黑客行为!
即使是Stackexchange上的其他解释也谈到设置$PS1(并获得点赞)。抱歉,那不是标题,那只是命令提示符。
简而言之:他们为了在首选项对话框中节省一点空间而搞砸了它。天哪!
现在,唯一能够撤销开发者决策的机会就是引发一场严重的风暴,否则他们只需在几秒钟内关闭你的错误报告(我试过很多很多次)。我们如何制造这场风暴呢?