Como posso alterar a cor do estado físico da tela com base no usuário conectado?

8

Não editei / criei um arquivo .screenrc há algum tempo, mas é o que estou usando atualmente:

# Turn off the screen startup message
startup_message off

# Define format of bottom navigation/status/date/etc. line
hardstatus alwayslastline "%{yk}[ %H ] %-Lw%50>%{gk}(%{-}%n-%t%{gk})%{-}%+Lw%< %=%{yk}[ %c %d.%m.%Y ]"

# Increase scrollback buffer to 30000 lines
defscrollback 30000

Sinceramente, não me lembro do que tudo significa na minha linha de status, mas quero descobrir como eu poderia mudar a cor do nome do host com base no usuário conectado. Isso é possível? No momento, o nome do host fica amarelo quando estou conectado com qualquer usuário; mas quero que fique vermelho se eu for root. Isso pode ser alterado no meu arquivo .bashrc? Eu tenho isso no meu .bashrc para alterar os novos nomes de janelas de tela para o nome do host do servidor ao qual estou conectado:

# Set screen window title
case "$TERM" in
screen)
  PROMPT_COMMAND='echo -ne "\033k$HOSTNAME\033\\"'
  ;;
esac

Obrigado por qualquer ajuda!

EDITAR

Eu tentei adicionar isso ao meu arquivo .bashrc, mas ele apenas coloca o código ANSI na frente do nome do host no estado da minha tela:

case "$TERM" in
screen)
  if (( $UID == 0 )); then
    PROMPT_COMMAND='echo -ne "\033k$FRED$HOSTNAME$RS\033\\"'
  else
    PROMPT_COMMAND='echo -ne "\033k$HOSTNAME\033\\"'
  fi
  ;;
esac

EDIT 2

Também adicionei os códigos de cores ANSI reais (ex .:) \[\033[31m\]e os códigos de escape de tela (ex:) %krà declaração acima .bashrc, mas nenhum deles funcionou.

EDIT 3

Se eu usar isso como linha de comando do prompt, o nome do host aparecerá em vermelho na frente do meu PS1:

PROMPT_COMMAND='echo -ne "\033[31m$HOSTNAME\033\\"'

Se eu usar o seguinte prompt, o nome da janela mudará para o nome do host (SIM!); mas a cor permanece o padrão (NÃO!):

PROMPT_COMMAND='echo -ne "\033[31m\033k$HOSTNAME\033\\"'

Também tentei substituir \033[31m(e apenas [31m) a escape de cores da tela (% kr), mas isso também não funcionou.

EGr
fonte
Você deseja pintá-lo com base no usuário no qual está conectado, como se um determinado usuário estivesse conectado ao sistema?
slm
Sim. Eu quero fazer com que o nome do host do servidor fique vermelho quando eu entrar no servidor como root. Por exemplo, no meu arquivo .bashrc, tenho uma linha que altera meu PS1 para todo o texto em vermelho quando faço login como raiz. Eu quero emular esse comportamento com os nomes de host na tela.
EGR

Respostas:

1

Veja estas perguntas e respostas da U&L.

Especificamente, esta resposta, https://unix.stackexchange.com/a/16433/7453 .

A idéia geral é que você mantenha 2 screenrcarquivos diferentes com as cores e, com base $USERno seu bashrcarquivo, aponte a variável de ambiente SCREENRCpara aquela de um determinado usuário.

slm
fonte
Vou dar uma olhada. A única pergunta que tenho sobre isso é: os dois .screenrcarquivos funcionarão ao mesmo tempo? Por exemplo, se eu abrir a tela como eu mesmo, sudo -spara fazer o root em outra máquina dentro dessa sessão de tela, minhas outras janelas de tela permanecerão amarelas e o nome (nome do host) da janela que acabei de tornar a raiz ficará vermelho?
EGR
Não sei se isso é possível, talvez seja, mas ainda é um pouco fora do comum, quero dizer, se você estiver na mesma sessão de tela, ele estará executando o mesmo .screenrc. Com duas instâncias de tela separadas, seria muito simples fazê-lo, apenas duas configurações separadas.
njsg
Isso é o que eu assumi, continuarei pesquisando e atualizando o thread se encontrar uma solução (ou se alguém tiver uma). Obrigado pela ajuda!
EGR