在Synology(DSM6)上使用屏幕:"找不到' xterm-256color"的termcap条目

时间:2017-02-14 23:51:28

标签: linux gnu-screen synology

在Synology上使用屏幕(DSM6)我收到错误

  

找不到' xterm-256color'

的termcap条目

当我输入screen时。

我知道这个问题的快速解决方法Unix screen utility error: Cannot find termcap entry for 'xterm-256color' 因此,TERM=xterm screen可以正常运行并启动screen

但我想在我的机器上将TERM设置为不同的值,因此我只需输入screen即可。
我可以选择颜色模式屏幕使用并将其设置在某个地方吗?

2 个答案:

答案 0 :(得分:1)

screen过滤掉它不支持的转义序列。它不支持更改颜色值的xterm样式转义序列,但仅使用终端的预定义调色板。

如果你这样做

infocmp screen-256color xterm-256color
你可能会注意到一些不同之处。处理颜色值变化的是initc。 (从调色板中选择给定的颜色是使用setafsetab)。

警告消息是因为(显然)您的计算机没有安装xterm-256color的终端说明,例如,如果您ssh到计算机并且它从本地计算机获得TERMscreen想了解TERM适用于外部的内容,以帮助其转换为内部TERM=screen)。快速阅读文档和源代码表明,虽然它有几个功能可以修改 in / out TERM之间的转换,以及选择特定的内部TERM,但没有{ {1}}设置覆盖环境变量.screenrc

这是指向relevant chunk of code in screen的指针:

TERM

确保设置 if ((attach_term = getenv("TERM")) == 0 || *attach_term == 0) Panic(0, "Please set a terminal type."); if (strlen(attach_term) > MAXTERMLEN) Panic(0, "$TERM too long - sorry."); GetTTY(0, &attach_Mode); ,并指向it checks if TERM corresponds to an actual terminal description

指向(几个级别)的指针
TERM

所以...如果您只想运行“屏幕”,您可以创建一个shell别名,或者像现在一样设置if (*D_termname == 0 || e_tgetent(tbuf, D_termname) != 1) { Msg(0, "Cannot find terminfo entry for '%s'.", D_termname); return -1; } 的简单脚本。

答案 1 :(得分:0)

使用 .bashrc 您可以将 TERM 设置回工作版本。我的问题是 screen.xterm-256color 不存在。

# ~/.screenrc
# Fix screen and vim
# "E437: terminal capability "cm" required"
if [[ $TERM = 'screen.xterm-256color' ]]; then
  export TERM=xterm-256color
fi

要使 .bashrc 更改在 screen 中生效,您需要告诉 screen 将每个终端视为新的 shell

#~/.screenrc
# Treat all new screen tabs as new shells
shell -$SHELL