为什么 ssh 不返回终端标题?

为什么 ssh 不返回终端标题?

您可能知道,当您从 X 终端(rxvt、gnome-terminal...) ssh 到服务器时,ssh 会更改窗口标题以反映 user@host,它不会改变它回来。

互联网上有很多解决此问题的技巧。我不要求再要一份1

我正在寻找的是解释为什么会这样。所以我可以学会忍受这一点。为什么 ssh 不设置标题?

更恰当地说:如果 vim 可以做到,为什么 ssh 不能呢?

1 ...除非解释是问题仅由 ssh 配置错误引起,在这种情况下我欢迎解决该问题的方法。

答案1

终端中的窗口标题由嵌入在终端中运行的任何内容的输出中的控制字符设置。 ssh 没有注意到这一点,因为它只是将远程端生成的任何字符传递回客户端的标准输出。通常,大多数“设置窗口标题”的 UNIX/Linux 系统通过将控制字符嵌入到 shell 的提示PS1变量中来实现这一点,无论是在主窗口中/etc/bash_profile还是在用户的默认$HOME/.bashrc$HOME/.bash_profile(或您选择的 shell 使用的任何配置文件)中。这一页描述了如何在许多不同的 shell 中执行此操作。

因此,解释了这一点,然后您登录到设置了这些内容的远程计算机,窗口标题被设置,而窗口标题没有“变回”的原因可能是因为您的本地计算机没有这些嵌入在本地提示中的控制字符以重新设置窗口标题。换句话说,一旦通过这些控制字符设置了窗口标题,它们就不会自动取消设置。您必须实际再次输出控制字符才能更改它,通常是将它们放在本地提示变量中。

运行在本地机器上的 VIM 可以从 X 服务器查询窗口标题(通过引用 中的窗口 ID $WINDOWID)并保存标题,以便在退出时恢复回来。这可以通过 VIM 选项来控制titletitlestring请参阅:help 'title')。 ssh 客户端似乎根本不执行此操作,这可能又是因为 ssh 根本不直接管理窗口标题,它只是从远程 shell 输出字符。

编辑:感谢 Stephane Chazelas 在评论中对 VIM 标题行为的更正。

相关内容