【问题标题】:Screen: Cannot find terminfo entry for 'xterm-256color'屏幕:找不到“xterm-256color”的 terminfo 条目
【发布时间】:2012-09-02 23:09:10
【问题描述】:

当我跑步时

screen

在远程主机(运行Linux)上,我得到以下错误:

Cannot find terminfo entry for 'xterm-256color'.

我在 Mac OSX Lion 上运行终端来访问远程主机。我用谷歌搜索了这个问题的解决方案,似乎人们建议这样做

export TERM=xterm-color

这对我不起作用。

请帮忙。

【问题讨论】:

  • 我在 macOS 上使用 ncurses 6.0 时遇到同样的错误。把这个留给索引器......

标签: terminal osx-lion


【解决方案1】:

我在完全不同的环境中遇到了同样的问题。

通过输入 infocmp,我得到了无法打开 terminfo 的消息。但它也告知了它试图获得的路径。我所做的只是用正确的术语(xterm-256color)创建那条路径。使用 find * 我在另一个目录中找到它并复制到新目录。

【讨论】:

    【解决方案2】:

    如果您导出变量,请不要忘记刷新终端源...

    source ~/.bashrc 或者只是打开一个新终端。可能是原始海报无法导出的原因。

    【讨论】:

      【解决方案3】:

      另一种情况,例如从screen 内部升级到 Debian Buster。

      Terminfo xterm-256colour 格式已更改,因此 screen 无法恢复之前的会话。

      您可以使用export TERM=xterm 关闭屏幕会话,然后重新启动屏幕。这次它会使用正确的 terminfo 文件,所以它会成功。

      来源:https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=901843

      【讨论】:

        【解决方案4】:

        您在远程计算机上缺少与“xterm-256color”匹配的terminfo 文件。

        Screen 不知道如何模拟您要求的终端 (xterm-256color),因为它没有描述您正在使用的终端的文件 (xterm-256color)。

        您可以更改 ENV 变量 TERM 以请求远程机器拥有的终端仿真。例如:export TERM=vt220,但这会假设你的遥控器有一个 vt220 terminfo 文件,你不会得到漂亮的颜色,你必须做其他乏味的事情才能让它坚持下去。更好...

        如果您的本地机器有 terminfo 文件,但您的远程机器没有,例如 linux/macos 与 QNAP/QNAS/busybox/rpi/router/modem/IOTdevice 通话,那么...

        您可以将必要的文件复制到其中并指示您的远程终端将其用于屏幕。例如:

        [local] $ scp /lib/terminfo/x/xterm-256color john@nasbox:xterm-256color
        [local] $ ssh john@nasbox
        [remote] $ ls
        xterm-256color
        [remote] $ TERMINFO='/share/homes/john/xterm-256color' screen
        

        此时屏幕应该可以工作了。您的本地计算机可能在其他地方有 terminfo 目录(/etc/terminfo//usr/share/terminfo/ 是常见的替代方案;您可能必须四处寻找才能找到您的目录)。

        要更永久地设置它,请将其移至主目录中的“.terminfo”目录(如果您知道得更好,也可以移至其他地方)。例如:

        [remote] mkdir -p .terminfo/x
        [remote] mv xterm-256color .terminfo/x
        [nasbox] screen
        

        同样的技术应该适用于其他终端仿真。 ENV 变量TERM 确定它应该尝试模拟哪个终端,并且同名文件提供了实现这一切的魔法代码。

        【讨论】:

        • 根据this,这是正确的做法,而不是仅仅设置一些随机的 TERM 值。但是,我不知道证实这一点。无论如何,它确实对我有用。
        • 这是针对缺少 terminfo 条目的稳健、长期解决方案的正确方法。正确设置 TERM 环境变量意味着用户可以从他们正在使用的终端的实际功能中受益,例如,我选择 Tmux 而不是 GNU 屏幕的一个原因是它支持斜体文本。当我连接到旧的 RHEL 6 服务器时,我将 tmuxtmux-256color 编译后的 terminfo 条目复制到 ~/.terminfo/t。这意味着我可以使用任何终端设备登录,而不必弄乱TERM 环境变量。
        【解决方案5】:

        您可以在远程服务器 (Debian/Ubuntu) 上安装 ncurses-term 来解决此问题。

        【讨论】:

        • 最新的 ncurses-term 不再提供xterm-256color,但我注意到xterm+256color(其中不起作用)。
        • 我们可以从哪个包安装xterm-256color? @约翰格林
        【解决方案6】:

        在问题中,用户的配置要求提供非默认的终端描述screen。这最终由 Apple 的更新解决。在问题中引用的版本中,Apple 没有提供该终端描述。他们现在这样做(并且自 2015 年以来一直如此)。作为记录,这里是一个目录列表,显示了 MacPorts(/opt/local)的相关条目、本地构建的 ncurses(/usr/local)和/usr/share 中的 Apple/system 文件:

        -rw-r--r--   1 root         1912 Oct  3 2015    opt/local/share/terminfo/73/screen-256color
        -rw-r--r--   1 root         1924 Oct  3 2015    opt/local/share/terminfo/73/screen-256color-bce
        -rw-r--r--   1 root         1954 Oct  3 2015    opt/local/share/terminfo/73/screen-256color-bce-s
        -rw-r--r--   1 root         1940 Oct  3 2015    opt/local/share/terminfo/73/screen-256color-s
        -rw-r--r--   1 root         1912 Apr 12 04:22   usr/local/ncurses/share/terminfo/73/screen-256color
        -rw-r--r--   1 root         1924 Apr 12 04:22   usr/local/ncurses/share/terminfo/73/screen-256color-bce
        -rw-r--r--   1 root         1954 Apr 12 04:22   usr/local/ncurses/share/terminfo/73/screen-256color-bce-s  
        -rw-r--r--   1 root         1940 Apr 12 04:22   usr/local/ncurses/share/terminfo/73/screen-256color-s
        -rw-r--r--   1 root         1828 Aug 22 2015    usr/share/terminfo/73/screen-256color
        -rw-r--r--   1 root         1840 Aug 22 2015    usr/share/terminfo/73/screen-256color-bce
        -rw-r--r--   1 root         1866 Aug 22 2015    usr/share/terminfo/73/screen-256color-bce-s
        -rw-r--r--   1 root         1856 Aug 22 2015    usr/share/terminfo/73/screen-256color-s
        

        您可能会注意到一些细节:

        • 在 OSX 上,默认文件系统会忽略大小写,因此 s 以十六进制编码(使其与 S 不同)

        • 条目的大小略有不同。 Apple 提供了旧版本的终端数据库,缺少一些功能。

        • 使用toe,我看到了:

        --> /usr/local/ncurses/share/terminfo ----> /usr/share/terminfo ------> /opt/local/share/terminfo *-*-*-: screen-256color 256色的GNU屏幕 *-*-*-: screen-256color-bce 具有 256 色和 BCE 的 GNU 屏幕 *-*-*-: screen-256color-bce-s 使用 BCE 和状态行的 256 色 GNU 屏幕 *-*-*-: screen-256color-s 具有 256 种颜色和状态行的 GNU 屏幕

        并将系统与 MacPorts 进行比较:

        --- macports    2017-04-26 04:38:21.000000000 -0400
        +++ system      2017-04-26 04:40:08.000000000 -0400
        @@ -1,19 +1,19 @@
        -#      Reconstructed via infocmp from file: /opt/local/share/terminfo/73/screen-256color
        +#      Reconstructed via infocmp from file: /usr/share/terminfo/73/screen-256color
         screen-256color|GNU Screen with 256 colors,
                am, km, mir, msgr, xenl,
        -       colors#256, cols#80, it#8, lines#24, pairs#32767,
        +       colors#256, cols#80, it#8, lines#24, ncv#3, pairs#32767,
                acsc=++\,\,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
                bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[?25l,
                clear=\E[H\E[J, cnorm=\E[34h\E[?25h, cr=^M,
                csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
                cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C,
                cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\EM,
        -       cvvis=\E[34l, dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m,
        -       dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, el1=\E[1K,
        -       enacs=\E(B\E)0, flash=\Eg, home=\E[H, ht=^I, hts=\EH,
        -       ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L, ind=^J, is2=\E)0,
        -       kbs=^H, kcbt=\E[Z, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC,
        -       kcuu1=\EOA, kdch1=\E[3~, kend=\E[4~, kf1=\EOP, kf10=\E[21~,
        +       cvvis=\E[34l, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM,
        +       dl1=\E[M, ed=\E[J, el=\E[K, el1=\E[1K, enacs=\E(B\E)0,
        +       flash=\Eg, home=\E[H, ht=^I, hts=\EH, ich=\E[%p1%d@,
        +       il=\E[%p1%dL, il1=\E[L, ind=^J, initc@, is2=\E)0, kbs=^H,
        +       kcbt=\E[Z, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA,
        +       kdch1=\E[3~, kend=\E[4~, kf1=\EOP, kf10=\E[21~,
                kf11=\E[23~, kf12=\E[24~, kf2=\EOQ, kf3=\EOR, kf4=\EOS,
                kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~,
                khome=\E[1~, kich1=\E[2~, kmous=\E[M, knp=\E[6~, kpp=\E[5~,
        @@ -22,6 +22,6 @@
                rmul=\E[24m, rs2=\Ec\E[?1000l\E[?25h, sc=\E7,
                setab=\E[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m,
                setaf=\E[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m,
        -       sgr=\E[0%?%p6%t;1%;%?%p1%t;3%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p5%t;2%;m%?%p9%t\016%e\017%;,
        +       sgr=\E[0%?%p6%t;1%;%?%p1%t;3%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;m%?%p9%t\016%e\017%;,
                sgr0=\E[m\017, smacs=^N, smcup=\E[?1049h, smir=\E[4h,
                smkx=\E[?1h\E=, smso=\E[3m, smul=\E[4m, tbc=\E[3g,
        

        【讨论】:

          【解决方案7】:

          您只需将/usr/share/terminfo/x/xterm-256color 复制到您要连接的服务器。

          【讨论】:

            【解决方案8】:

            如果是我的 Buffalo Linkstation,我是这样解决的:

            cd /lib/terminfo/x
            ln -s xterm-color xterm-256color
            

            【讨论】:

            • 这是一个简单而长期的解决方案,谢谢;)(虽然我的路径是/usr/share/terminfo/x
            【解决方案9】:

            找出支持的 TERM:

            ls /usr/share/terminfo/x
            

            这将为您提供支持的 TERM 列表,即

            xterm
            xterm-xfree86
            

            设置环境变量:

            export TERM=xterm-xfree86
            

            并运行屏幕:

            TERMINFO='/usr/share/terminfo/' screen
            

            【讨论】:

            • 我不必使用最后一个命令运行屏幕,运行 screen 工作
            • 10.11.5 我似乎没有文件夹/usr/share/terminfo/x 但是我在unix.stackexchange.com/questions/30058/… 找到的find /usr/share/terminfo/ -type f -print 确实返回了一个列表
            • 在 QNAP NAS 上遇到这个问题,这解决了这个问题。谢谢!
            • 我也在做 QNAP NAS。我刚刚将export TERMINFO='/usr/share/terminfo/' 添加到.bashrc,所以现在它和任何其他别名都会自动处理。 当您更新固件时,这将被恢复,因此您应该在系统外的某个地方记录类似这样的添加/更改,以便在新固件映像尚未修复的情况下可以添加它们。如果您不想弄乱安全设置要求的 shell 超时,那么 screen 可以很好地保持 shell 会话。我还必须添加路径。
            【解决方案10】:

            我能够从菜单中更改 Mac OSX(10.7.5) 终端(v2.2.3, 303.2) 仿真 终端>首选项>设置>高级>仿真 将终端声明为 xterm-color

            打开一个新的终端 ssh 连接启用了新设置。

            【讨论】:

              【解决方案11】:

              我之前使用默认的 Mac OS X 终端应用程序通过 ssh 访问我的基于 Ubuntu 的 tmux,发现了您描述的问题 - 我的 bash 和 tmux 设置为 screen-256color,甚至不在列表中的选项在 Mac 终端首选项中。

              我尝试添加该行:

              export TERM=screen-256color
              

              作为启动命令,但它被忽略并在启动时被 xterm-color 覆盖。

              我还设法将 Mac 终端的设置更改为 screen-256color,方法是选择 Shell > Export Settings,然后编辑它生成的 XML 文件,找到 xterm-color 行并将其更改为 screen-256color,然后是 Shell > 导入此设置文件。然而,在启动终端时,我发现它仍然用 xterm-color 覆盖了这个设置。

              所以我承认并下载了iTerm2,它允许我通过在纯文本字段中输入来更改屏幕 256 色设置(而不是从有限的下拉菜单中选择)。这可以立即工作甚至无需关闭并重新打开控制台

              因此,总而言之,我建议使用 iTerm2 而不是默认的 Mac 终端(它似乎不允许对您需要的 $TERM 进行更改)。

              【讨论】:

              • 我可以改用screen-256color-s吗?
              【解决方案12】:

              在您用于 ssh 的终端应用程序中,转到首选项 -> 高级 -> 将终端声明为:-> xterm-color(或 xterm-256color 之外的其他内容)

              此答案取自对该帖子的评论,该帖子有另一种解决方案: http://marcoschuh.de/wp/?p=873

              【讨论】:

                【解决方案13】:

                您可能需要在 Linux 主机上安装一个软件包,该软件包提供以下文件之一:

                /usr/share/terminfo/x/xterm-256color
                /lib/terminfo/x/xterm-256color
                

                例如,在 Ubuntu 上,这是由 ncurses-base 包提供的。

                【讨论】:

                  猜你喜欢
                  • 2017-07-03
                  • 2012-06-05
                  • 2017-02-11
                  • 2012-04-17
                  • 1970-01-01
                  • 1970-01-01
                  • 2011-10-10
                  • 2013-02-28
                  • 1970-01-01
                  相关资源
                  最近更新 更多