如何根据登录用户更改屏幕的硬状态颜色?


8

我已经有一段时间没有编辑/创建.screenrc文件了,但这是我目前正在使用的文件:

# 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

老实说,我不记得我的hardstatus行中的所有内容代表什么,但是我想弄清楚如何根据登录的用户更改主机名颜色。这是否可能?现在,当我以任何用户身份登录时,主机名都是黄色。但如果我是root,我希望它是红色的。这可以在我的.bashrc文件中更改吗?我在.bashrc中拥有此功能,可以将新的屏幕窗口名称更改为我连接到的服务器的主机名:

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

谢谢你的帮助!

编辑

我尝试将其添加到我的.bashrc文件中,但它只是将ANSI代码放在主机名的屏幕hardstatus中:

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

编辑2

我还在我的上述语句中添加了实际的ANSI颜色代码(例如:)\[\033[31m\]和屏幕转义代码(例如:),但均无效。%kr.bashrc

编辑3

如果将其用作提示命令行,则主机名显示在我的PS1的红色前面:

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

如果使用以下提示,则窗口名称将更改为主机名(是!);但颜色仍为默认颜色(否!):

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

我还尝试用屏幕颜色转义符(%kr)替换\033[31m(仅[31m),但是那也不起作用。


您是否要根据已登录用户的颜色对其进行着色,直到某个用户已登录到系统?
slm

是。我想这样做,以便当我以root用户身份登录该服务器时服务器主机名变为红色。例如,在我的.bashrc文件中,当我以root用户身份登录时,有一行代码将PS1更改为所有红色文本。我想用屏幕上的主机名模拟此行为。
2013年

Answers:


1

看看这个U&L问答。

具体来说,这个答案是https://unix.stackexchange.com/a/16433/7453

总的想法是,你保持2个不同的screenrc同色系文件,并根据你$USER在你的bashrc文件,你点的环境变量SCREENRC对一个给定用户。


我会看一看。我对此唯一的疑问是,两个.screenrc文件会同时工作吗?例如,如果我以自己的身份打开屏幕,然后sudo -s在该屏幕会话中以另一台计算机为根目录,我的其他屏幕窗口会保持黄色,而我刚刚成为根目录的窗口的名称(主机名)又变成红色?
2013年

我不知道是否可行,也许是,但是仍然有点与众不同,我的意思是,如果您在同一个屏幕会话中,它将使用相同的屏幕运行.screenrc。使用两个单独的屏幕实例,这样做很简单,只需两个单独的配置。
njsg 2013年

这就是我的假设,如果找到解决方案(或者其他人有解决方案),我将继续搜索并更新线程。谢谢您的帮助!
2013年
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.