Posso alterar meu plano de fundo do terminal com base no nome do host?

17

Gostaria que minha cor de fundo do terminal fosse alterada com base no nome do host. Meu raciocínio para isso é principalmente ter uma maneira extra de me lembrar em qual servidor estou, para não fazer algo estúpido.

Existe alguma maneira de fazê-lo usar o plano de fundo padrão de beringela se estiver na minha máquina local e depois mudar para vermelho se eu fizer um SSH em um servidor Web de produção ou em outros hosts que eu possa especificar?

chris
fonte
Uma idéia, escreva a alteração na variável ambiental que lida com as configurações do terminal. Crie um script para cada local em que você normalmente usa o SSH e inclua a alteração nas configurações desse script. Aqui está um guia que pode ajudar: cyberciti.biz/faq/… - dessa forma, você pode simplesmente executar um script que não apenas se conectará para você, mas personalizará o terminal para essa sessão específica.
21411 MaQleod
1
Há a mesma pergunta no site ubuntu: askubuntu.com/questions/13705/... mente, eu não culpo você, eu não encontrá-lo em primeiro lugar, quer :)
Stefano

Respostas:

9

Você pode usar a opção de comando local do ssh / config para executar um comando sempre que um alias for usado. eu uso

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

Isso depende do xtermcontrol e seu termo é xterm. Presumivelmente, existem outros aplicativos para outros termos.

O único problema com essa abordagem é que isso acontece quando você chama ssh. Não há nada para desfazer a mudança de cor. Eu fiz isso envolvendo uma função em torno do ssh, mas isso também tem suas desvantagens.

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

Não parece haver nenhuma funcionalidade gnome-terminalpara adicionar uma nova guia a uma janela existente na linha de comando. Mas existem algumas opções para realizar o que você deseja.

Perfis por comando

Crie um novo gnome-terminalperfil para cada host no qual você fará o SSH. Se você tiver apenas alguns hosts aos quais se conecta regularmente, isso pode ser o mais simples. Cada perfil pode ter um título diferente, cor de primeiro plano, cor de fundo, comando personalizado e outras configurações definidas. Em seguida, você pode usar File -> Open Tabpara abrir uma nova guia com o perfil selecionado.

Perfil reutilizável

Crie um novo gnome-terminalperfil que será usado para abrir uma nova janela sempre que desejar conectar-se a um host SSH diferente (com base nesta resposta do AskUbuntu que Stefano apontou). Isso funcionaria bem se você se conectar com muitos hosts diferentes com frequência. Isso não permitirá a distinção entre gnome-terminaljanelas diferentes nas quais você está conectado a hosts diferentes apenas nas cores de plano de fundo / primeiro plano, mas você terá um título diferente por janela.

  1. Crie um novo gnome-terminalperfil ( File -> New Profile) com base no Defaultperfil e chame-o de "RemoteHost" (observe, não há espaços no "RemoteHost" para facilitar os comandos).
  2. Na Title and Commandguia, altere:
    1. Initial title: para "Host remoto"
    2. When terminal commands set their own titles: para Replace initial title
  3. Na Colorsguia, altere:
    1. Desmarque Use colors from system theme
    2. Build-in schemes: para Custom
    3. Text color:e Background color:às cores de sua escolha. Lembre-se de que alguns comandos (como ls) usam cores para sua saída e você não deseja escolher cores que dificultem a leitura da saída.
  4. Clique no Closebotão para salvar seu novo perfil.
  5. Agora você pode abrir uma nova gnome-terminaljanela para cada host SSH remoto usando o comando gnome-terminal --window-with-profile=RemoteHost -t "Some Remote SSH Host" -x ssh user@somehost. A -topção define o gnome-terminaltítulo da janela e -xexecuta o restante da linha de comando no terminal. Você pode até aliasreduzir o total de pressionamentos de tecla.

Linha de comando

Encontrei esta entrada de blog com o seguinte script que usa os comandos xdotoole wmctrl(eles não foram instalados por padrão no Ubuntu, então você pode precisar instalá-los primeiro) para usar o atalho de teclado gnome-terminal Ctrl+ Shift+ tpara abrir uma nova guia na gnome-terminaljanela atual . Pode ser modificado para abrir uma nova guia com um perfil específico e executar algum comando para você.

#!/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

De outros

Você pode ser criativo e tentar outras coisas.

Essa resposta do Superusuário basicamente usa um pouco de acrobatas "script-fu" para criar um gnome-terminalperfil temporário usado para abrir uma nova janela. Pode ser modificado para seu uso.

Você provavelmente poderia usar essas perguntas e respostas sobre o StackOverflow e mais acrobatas "script-fu" para alterar dinamicamente o gnome-terminaltítulo sempre que fizer o SSH para um host remoto. Não seria tão proeminente quanto as alterações de cor de segundo plano / primeiro plano, mas seria melhor do que um Terminaltítulo padrão o tempo todo.

Dan Cruz
fonte
6

Isso funcionará no Gnome, se você estiver disposto a usar uma nova janela do terminal gnome para cada sessão ssh.

  1. Crie um novo perfil (com cor de fundo diferente) chamado "Remoto"

  2. Insira o seguinte em .bash_aliases, ou.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
    

Agora sshc remote-machineabre uma nova sessão do terminal gnome com o perfil "Remoto". isso diferencia os perfis local e remoto.

Para acomodar vários perfis / hosts, crie vários perfis e coloque algo assim .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

Agora sshc Productionabrirá uma nova janela de sessão usando o perfil "Vermelho", sshc Testabrirá uma nova janela de sessão usando o perfil "Verde" e outros hosts usarão o perfil "Padrão".

peonicles
fonte
2

Reunir todas as informações dos sites de pilha *** aqui é a solução mais simples que encontrei para o terminal mint mate + mate (o mesmo que para o gnome).

  1. No terminal mate, defina o segundo perfil, com fundo diferente.
  2. Verifique se as teclas padrão funcionam Alt + PageDown / Alt + PageUp devem alterar o perfil e o plano de fundo também.
  3. sudo apt get install xdotool

Agora você pode modificar / etc / ssh / ssh_config, para que ele possa alterar o perfil após o estabelecimento de cada sessão ssh:

Host *
  PermitLocalCommand yes
  LocalCommand xdotool key Alt+Page_Down

Agora, depois que cada conexão ssh for estabelecida no terminal, o perfil será alterado e você nunca mais colocará atualizações indesejadas do sql no banco de dados de produção :)

No entanto, não há uma solução fácil para retornar ao perfil padrão após o fechamento da conexão ssh. Mas isso parece suficiente para mim e não procurei mais informações.

Lukasz Frankowski
fonte