让 PuTTY 与 FreeBSD 正常工作

让 PuTTY 与 FreeBSD 正常工作

我使用 FreeBSD 11 和 PuTTY 进行 SSH。键盘的按键代码似乎根本没有正确设置 - 例如,它在向上箭头上发出蜂鸣声,并为大多数导航键插入“〜”,包括箭头和删除键等基本功能。键盘是标准的英国英语键盘。打字真的很痛苦。

我读过许多关于在 rc 和 shell 中设置关键代码的线程,所以我知道我可以将这种方式设置为最后的手段。

但是,对于具有如此多可配置性的客户端和具有如此广泛使用的操作系统来说,如果没有一些共同的终端选项/设置,他们都“只是理解”,我可以在两者上设置,瞧,这将是非常奇怪的 -键全部(或大部分)工作。问题是我不知道如何找到它,也不知道当我找到它时,如何为以后的所有会话设置它。

我了解如何查找终端为单个密钥发送的密钥代码,因此我可以以这种方式一一设置我的密钥。但我想为我的 shell rc 和 PuTTY 找到基本的终端设置,以获得尽可能多的键,让两者都能理解,所以我只需要在需要时设置一些例外。

我怎样才能做到这一点?

答案1

有很多旋钮需要扭转和转动。人们盲目遵循互联网上的许多建议。一如既往,通往罗马的方式有很多,但当你知道事物之间的联系时,它们就会变得非常简单。

超简短的答案是:

将 Putty 中的终端字符串从 更改为xtermputty在“连接”->“数据”->“终端类型字符串”下)。

要避免的典型陷阱:

确保您没有TERM在 rc 文件中的其他位置进行设置。

稍微长一点的答案:

首先,我首先确保您实际上使用的是默认值。我使用 DK 键盘(和映射)从我的个人 Windows 10 笔记本电脑连接到带有 DK 映射的 FreeBSD 11.1 设置。就我而言,箭头键在命令行上按预期工作。在当前行上向左/向右移动。向上/向下浏览命令历史记录。

我已经针对 /bin/sh (默认用户 shell)和 /bin/tcsh (默认 root shell)验证了这一点。您可以阅读贝壳

您写道您知道如何在 shell rc 文件中进行键盘映射。关于如何做到这一点的许多建议正在流传。但这通常不是你应该做的。

您将找到类似 tcsh 键绑定的建议:

# Del(ete), Home and End 
bindkey "\e[3~"   delete-char
bindkey "\e[1~"   beginning-of-line
bindkey "\e[4~"   end-of-line

以及像这样的 bash 的建议(~/.inputrc)

"\x7F": backward-delete-char
"\e[3~": delete-char
"\e[1~": beginning-of-line
"\e[4~": end-of-line

但是,您应该使用而不是为每个会话和每个 shell 在本地设置这些绑定术语帽/术语信息为此目的(稍后详细介绍)。

在这种情况下,Putty 就是您的终端

Putty 的默认设置是将会话的 TERM 设置为“xterm”。它这样做是因为它与 xterm 相当兼容。xterm不是对任何终端的引用,而是对程序的引用Xterm

PuTTY配置

Connection -> Data -> Terminal-type string: `xterm`

登录后,您可以验证此设置是否适用于您的会话:

echo $TERM
xterm

如果 $TERM 与您在 Putty 中设置的内容不匹配,那么您可能在 rc 文件中设置了覆盖。请注意/bin/sh以下警告~/.profile

# Setting TERM is normally done through /etc/ttys.  Do only override
# if you're sure that you'll never log in via telnet or xterm or a
# serial line.
# TERM=xterm;   export TERM

因为我们消耗的体力并不多十月VT100's morexterm是你会在很多地方看到的。

即使您只是保留TERM原样,xterm您也会使用默认的 Putty 和 FreeBSD 获得颜色输出,原样也ls -G可以工作。

有些人会建议您设置TERMxterm-color,xterm-256rxvt-256color以获得“适当的”颜色支持。

但要记住:所有这些神奇TERM值只是数据库中的映射。今天如此普遍的一个原因xterm是某些程序和脚本检查是否以$TERM开头xterm(这是一个可怕的想法)。

这让我们回到术语帽这是 FreeBSD 上的默认设置。如果您想使用 terminfo 那么您需要安装开发/ncurses。有关这方面的更多信息,请参阅:如何在 FreeBSD 上使用 terminfo 条目?

您可以在文本文件中找到 termcap 数据库的源代码 /usr/share/misc/termcap。如果您对此文件进行更改,则需要运行cap_mkdb以使系统确认更改。在这里您将找到您的难题的答案。 Putty有一个显式TERM设置,名为:putty

然后,FreeBSD 选择不更改设置以xterm匹配 Putty 的行为(可能是出于可操作性考虑)。但他们已经足够好,为 Putty 提供了一个设置。

因此,如果您将 Putty 默认设置从 更改为 ,Terminal-type string:那么xterm这会在您登录时putty反映出来。默认的 FreeBSD termcap 有一个与此相关的条目。TERM

神奇的是,无需接触大量 rc 文件,您现在就可以使用箭头键(我在 xterm 中也使用了),而且 Home/End 移动到行的开头/结尾,并且 Del(ete) 删除。

奖金:

默认的 putty 定义似乎不支持所有 256 种颜色。然后,您可以修改 termcap 并添加这两行(并运行 cap_mkdb):

putty-256color:\
        :pa#32767:Co#256:tc=putty:

然后你可以将你的设置TERMputty-256color斯科特·罗宾逊建议应该添加此内容 - 但 FreeBSD 尚未接受此更改。我在数据库中找不到这个 PR。

奖金2:

如果您希望保持现状TERMxterm那么您应该花时间配置 Putty 以匹配 FreeBSD 对 xterm 终端的期望。

如果您进入设置终端 -> 键盘在设置中Home 和 End 键您可以将“标准”更改为“rxvt”。

通过此更改,您会注意到 Home 键可以在命令行上使用(移动到行首)。但 End 现在什么也没做。

因此,接下来的问题是让 Putty 同意 FreeBSD 对 xterm 的期望。只是为了表明您也可以采取相反的方式。

答案2

我无法发表评论,但 @clausandersen 的回答非常彻底。然而,关于添加 termcap 条目的奖励部分并不完全正确。调用tput AF 100将无法按预期工作,因为从 putty 条目继承的 termcap AF 功能仅支持 8 种颜色。这应该按预期工作:

putty-256color|PuTTy - 256 colors:\
        :Co#256:pa#32767:\
        :AB=\E[48;5;%dm:AF=\E[38;5;%dm:\
        :tc=putty:

相关内容