繁体   English   中英

在 Synology (DSM6) 上使用屏幕:“找不到‘xterm-256color’的 termcap 条目”

[英]Using screen on Synology (DSM6): "Cannot find termcap entry for 'xterm-256color"

在 Synology (DSM6) 上使用屏幕时出现错误

找不到“xterm-256color”的 termcap 条目

当我输入screen时。

我知道这个问题的快速修复Unix screen utility error: Cannot find termcap entry for 'xterm-256color'
所以TERM=xterm screen确实有效并启动了screen

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

使用 .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 更改在屏幕中生效,您需要告诉屏幕将每个终端视为一个新的 shell

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

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

如果你这样做

infocmp screen-256color xterm-256color

您可能会注意到一些差异。 处理颜色值变化的是initc (从调色板中选择给定的颜色是使用setafsetab完成的)。

警告消息是因为(显然)您的机器没有安装xterm-256color的终端描述,例如,如果您通过 ssh 连接到机器并且它从本地机器获取TERM screen想知道什么TERM适用于outside ,以帮助它转换到它的inside ( TERM=screen )。 快速阅读文档和源代码可以看出,虽然它具有修改输入/输出TERM之间的转换以及选择特定内部 TERM 的多个功能,但没有用于覆盖环境变量TERM.screenrc设置。

这是指向screen中相关代码块的指针:

    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);

它确保设置了TERM ,以及指向(向下几个级别)的指针, 它检查TERM是否对应于实际的终端描述

if (*D_termname == 0 || e_tgetent(tbuf, D_termname) != 1) {
    Msg(0, "Cannot find terminfo entry for '%s'.", D_termname);
    return -1;
}

所以...如果你只想运行“屏幕”,你可以创建一个 shell 别名,或者像你现在所做的那样设置TERM的简单脚本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM