在 ssh 会话中使终端文本颜色不同

在 ssh 会话中使终端文本颜色不同

有没有办法让我的终端(konsole)在 ssh 会话中显示不同的文本颜色而不修改远程主机的颜色配置?比如,也许会自动切换到不同的配置文件?

Konsole 可以使用这些不同的“配置文件”

alt text

我想在 ssh 会话中基本上更改为不同的配置文件。因此,不要将默认的黑底绿字改为白底黑字之类的。

它不一定必须使用此配置文件设置。但如果 xterm 或其他东西有一个设置可以做到这一点,那也可以。

这个想法是在任何 ssh 会话上工作,而不仅仅是与特定机器的特定会话。

答案1

如果终端支持的话,一种可能性是使用终端的更改颜色转义序列。显然 konsole 不支持它。来自 Xterm 控制序列文档 (ctseqs):

OSC Ps;铂贝尔

Ps=4; C ;规格 -> 将颜色编号 c 更改为规格指定的颜色,即根据 XParseColor 的名称或 RGB 规格。可以给出任意数量的 c 名称对。颜色编号对应于 ANSI 颜色 0-7、其明亮版本 8-15,以及 88 色或 256 色表的其余部分(如果支持)。

这意味着控制序列将改变颜色的外观\e]4;NUMBER;VALUE\a数字数字是颜色编号(0-7 表示八种基本颜色,8-15 表示明亮版本,如果终端支持更多颜色,则更多)。这价值是这样的东西X解析颜色理解,例如 RGB 规范#123456X 颜色名称rgb.txt(在您的机器上查找,或使用xcolors以查看可能性)。

例如,以下命令更改基本蓝色(颜色 4)及其明亮变体(4+8)以包含一些绿色:

printf '\033]4;4;#004080;12;#0040ff\007'

请注意,这会更改窗口中当前以该特定颜色显示的每个字符。无法仅更改随后显示的字符的颜色含义;如果这就是您想要的,您必须将终端内显示的每个程序配置为在与终端对话时使用不同的颜色数字。

当您在 ssh 会话中键入时发生这种情况将非常复杂,但处理常见情况相当简单:使用 ssh 的包装器来更改调色板,然后运行 ​​ssh,最后将调色板更改回来。无法处理的情况示例包括挂起 ssh 进程并在 screen 或 tmux 内运行 ssh。

答案2

Konsole 的设置选项卡之一上是否有一个类似于“运行自定义命令而不是我的 shell”的位置?

如果是这样,您可以执行以下操作(这是我为 Gnome 终端设置的内容,您可能需要为 Konsole 稍微调整;如果与 Konsole 存在差异,我将很乐意更新):

  1. 使用您想要的配色方案创建配置文件。
  2. 选中“运行自定义命令”框。
  3. 放入ssh [remote host alias]“自定义命令”文本框中
    • 如果您希望它像本地终端一样运行并在键入 时关闭选项卡exit,请选择“当命令退出时:退出终端”(或其等效项)

通过该设置,您只需打开一个包含所选配置文件的新选项卡,它将自动连接到您的 SSH 会话并具有您想要的配色方案。

然而,这确实有一个缺点,即它不适用于任何 SSH 连接(如上所述,您必须为每个 SSH 连接设置一个配置文件,尽管您可以编写一个脚本来允许您输入远程主机(当您打开该配置文件时),并且您必须专门打开该配置文件,除非您将其设置为默认配置文件。

答案3

xterm在(以及其他一些 X11 终端仿真器)中更改背景和前景色的顺序是\33]11;black\7\33]10;green\7。有一个xtermcontrol命令可以让它变得更容易:

xtermcontrol --bg black --fg green

所以你可以将 ssh 命令重新定义为:

ssh() {
  [ -t 2 ] && xtermcontrol --bg black --fg green
  command ssh "$@"
  [ -t 2 ] && xtermcontrol --bg white --fg black
}

相关内容