【问题标题】:How does ncurses search for terminal descriptionsncurses如何搜索终端描述
【发布时间】:2023-09-28 18:40:01
【问题描述】:

出于某些原因,我正在从源代码构建 ncurses 6.1。首先,我使用

配置源
./configure

然后我用它构建它

make

两者都没有参数。当我尝试运行测试时,我收到错误消息

Error opening terminal: xterm-256color.

在我的本地系统(Ubuntu 17.10)和

Error opening terminal: xterm

在构建服务器(Jenkins Docker 容器)上。

我发现这个版本正在/usr/share/terminfo/ 中寻找终端描述。我的本地系统上有很多描述,但没有xterm-256color。在构建服务器上,文件夹 /usr/share/terminfo/ 为空。我在/lib/terminfo 找到了xterm-256colorxterm。当我使用包管理器(适用于 Ubuntu 17.10)安装 ncurses 时,它可以工作。所以我假设这个包选择了正确的路径。我分别复制了xterm-256colorxterm/lib/terminfo/usr/share/terminfo/,我的构建现在可以在两个系统上运行。为什么存在两条不同的路径,为什么这两个版本的 ncurses 选择两条不同的路径?我需要一个 ncurses 的 conan 包,它可以开箱即用,无需复制描述文件。

这可能与以下内容重复: How to set custom search paths for the terminfo database when building ncurses from source

【问题讨论】:

    标签: ncurses terminfo ubuntu-17.10


    【解决方案1】:

    答案在configure 末尾的摘要中(问题中未显示)。但是运行infocmp -D 将显示infocmp 在查找描述时将使用的目录。

    您可以使用TERMINFOTERMINFO_DIRS 环境变量修改行为。

    /lib/terminfo 是特定于 Debian 的(Ubuntu 没有为 ncurses 提供任何更改;它们只是重新编译 Debian 软件包:大多数 Ubuntu 的 ncurses 错误报告都解决了这样做的问题)。

    Debian 默认会在该目录中安装某人的最小终端数据库概念。安装ncurses-term 以获得完整的终端数据库。

    顺便说一句,在已安装 ncurses 的 Debian/Ubuntu/其他系统上编译和安装 ncurses 存在破坏bash 和您可能需要的其他实用程序(例如)使用的现有库的风险。

    【讨论】:

    • 是否可以通过 configuremake 的参数更改行为。正如我所说,我想在不更改系统、环境变量或复制描述的情况下使用该库。我没有安装我自己的构建。我使用柯南,所以库在詹金斯家中,柯南设置了包含和库路径。
    • ./configure --datadir=/libmake 为我工作。您的信息导致 SO 中的正确帖子。