我可以根据主机名更改终端背景吗?


17

我想根据主机名更改终端背景颜色。我这样做的理由主要是为了拥有一种提醒自己自己在什么服务器上的额外方法,因此我不会做任何愚蠢的事情。

如果我在本地计算机上,是否可以通过标准茄子背景使用它,如果将SSH转换为生产Web服务器或其他可以指定的主机,则可以将其更改为红色?


一种想法是,将更改的脚本编写为处理终端设置的环境变量。为您通常要转至的每个地方制作一个脚本,并在该脚本中包括对设置的更改,以下指南可为您提供帮助:cyberciti.biz/faq/…-这样,您可以运行一个脚本,该脚本不仅会连接为您服务,但会为该特定会话自定义终端。
MaQleod

1
在ubuntu网站上有一个相同的问题:askubuntu.com/questions/13705/…介意,我不怪你,我一开始也没有找到它:)
Stefano

Answers:


9

每当使用别名时,都可以使用ssh / config的localcommand选项运行命令。我用

host hostname
    user myusername
    localcommand xtermcontrol --bg '#abc'

这取决于xtermcontrol和您的术语xterm。大概还有其他术语的其他应用程序。

这种方法的唯一问题是调用ssh时会发生这种情况。没有什么可以撤消颜色变化的。我通过在ssh周围包装一个函数来完成此操作,但这也有其缺点。

function ssh() {
  FG=$(xtermcontrol --get-fg)
  BG=$(xtermcontrol --get-bg)
  $(which ssh) "$@"
  xtermcontrol --fg="$FG"
  xtermcontrol --bg="$BG"
}

7

似乎没有任何功能gnome-terminal可以从命令行向现有窗口添加新选项卡。但是有一些选择可以实现您想要的。

每个命令配置文件

gnome-terminal为将要SSH连接到的每个主机创建一个新的配置文件。如果只有几个定期连接的主机,这可能是最简单的。每个配置文件可以具有不同的标题,前景色,背景色,自定义命令和其他定义的设置。然后,您可以使用File -> Open Tab打开带有所选配置文件的新选项卡。

可重复使用的配置文件

创建一个新的gnome-terminal,将被用于要连接到不同的SSH主机(在此基础上,每次打开一个新的窗口轮廓AskUbuntu答案斯蒂法诺指出)。如果您经常连接到许多不同的主机,这会很好。这将不允许您gnome-terminal仅在背景/前景颜色上区分连接到不同主机的不同窗口,但是每个窗口的标题都不同。

  1. 根据gnome-terminal配置文件创建一个新的配置文件(File -> New Profile),Default并将其命名为“ RemoteHost”(注意,“ RemoteHost”中没有空格,以使命令更容易使用)。
  2. Title and Command标签下,更改:
    1. Initial title: 到“远程主机”
    2. When terminal commands set their own titles:Replace initial title
  3. Colors标签下,更改:
    1. 取消选中 Use colors from system theme
    2. Build-in schemes:Custom
    3. Text color:以及Background color:您选择的颜色。请记住,某些命令(如ls)使用颜色作为其输出,而您不想选择会使其难以读取输出的颜色。
  4. 单击Close按钮保存您的新配置文件。
  5. 现在,您可以gnome-terminal使用以下命令为每个远程SSH主机打开一个新窗口gnome-terminal --window-with-profile=RemoteHost -t "Some Remote SSH Host" -x ssh user@somehost。该-t选项设置gnome-terminal窗口标题,并且该-x选项在终端中执行其余命令行。您甚至可以alias缩短总的击键次数。

命令行

我发现此博客条目带有以下脚本,该脚本使用xdotooland wmctrl命令(在Ubuntu上默认未安装它们,因此您可能需要先安装它们)才能使用gnome-terminal Ctrl+ Shift+ t键盘快捷键在当前gnome-terminal窗口中打开新标签页。可以对其进行修改以打开一个具有特定配置文件的新选项卡,并为您执行一些命令。

#!/bin/bash
# Path: /usr/local/bin/gnome-terminal
if [ "x$*" != "x" ]; then
  /usr/bin/gnome-terminal "$@"
else
  pgrep -u "$USER" gnome-terminal | grep -qv "$$"
  if [ "$?" == "0" ]; then
    WID=`xdotool search --class "gnome-terminal" | head -1`
    xdotool windowfocus $WID
    xdotool key ctrl+shift+t
    wmctrl -i -a $WID
  else
    /usr/bin/gnome-terminal
  fi
fi

其他

您可以发挥创意,然后尝试其他一些事情。

这个SuperUser答案基本上使用了一些“ script-fu”杂技演员来创建gnome-terminal用于打开新窗口的临时配置文件。可以对其进行修改以供您使用。

每当您将SSH连接到远程主机时,您都可以使用此StackOverflow问答和更多的“ script-fu”杂技演员来动态更改gnome-terminal标题。它不会像背景/前景颜色变化那样突出,但始终比标准Terminal标题更好。


6

如果您愿意为每个ssh会话使用一个新的gnome-terminal窗口,那么它将在Gnome中起作用。

  1. 创建一个名为“ Remote”的新配置文件(具有不同的背景色)

  2. 将以下内容插入.bash_aliases.bashrc

    ### add to .bash_aliases, for differentiating between local and remote hosts 
    sshhelper() {
       gnome-terminal --window-with-profile=Remote -x bash -c "ssh $1";
    }
    alias sshc=sshhelper
    

现在使用“远程”配置文件sshc remote-machine打开一个新的 gnome-terminal会话。这将区分本地和远程配置文件。

要容纳多个配置文件/主机,请创建多个配置文件,然后在其中放置以下内容.bash_aliases

### add to .bash_aliases, for differentiating between multiple remote hosts
sshhelper() {
    HOST=`echo $1 | cut -d'@' -f2`

    case $HOST in
        Production )  PROFILE="Red" ;;
        Test )        PROFILE="Green" ;;
        # ... if you have more cases ...
        *)           PROFILE="Default" ;;
    esac

    gnome-terminal --window-with-profile=$PROFILE -x bash -c "ssh $1";
}

# alias ssh=sshhelper    # this will "override" the ssh command, but may break other stuff!
alias sshc=sshhelper

现在,sshc Production将使用“红色”配置文件sshc Test打开一个新的会话窗口,将使用“绿色”配置文件打开一个新的会话窗口,其他主机将使用“默认”配置文件。


2

从堆栈***站点收集所有信息是我发现的薄荷伴侣+伴侣终端(与gnome一样)的最简单解决方案。

  1. 在配合终端中定义具有不同背景的第二个配置文件。
  2. 检查默认键是否起作用Alt + PageDown / Alt + PageUp应该更改配置文件以及背景。
  3. sudo apt get install xdotool

现在,您可以修改/ etc / ssh / ssh_config,以便在建立每个ssh会话后可以更改配置文件:

Host *
  PermitLocalCommand yes
  LocalCommand xdotool key Alt+Page_Down

现在,在终端中建立每个ssh连接之后,配置文件将被更改,并且您永远不会再将不需要的sql更新再次放入生产数据库中了:)

但是,没有简单的解决方案可以在ssh连接关闭后恢复到默认配置文件。但这对我来说足够了,我没有挖掘更多信息。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.