退格键,Tab,Del和箭头键在终端中不起作用(使用ssh)


44

当我使用我的帐户(具有sudo权限)SSH到另一台Ubuntu计算机时,我的退格键在按下时会产生一些尴尬的符号。另外,Tab,Del和Arrow键不起作用。

另一方面,我在同一台计算机上还有另一个帐户,当我通过该帐户使用ssh时,其终端可以正常运行。我不知道为什么会这样。


我有同样的问题-我的主机是Win7-64,我的远程来宾系统都是Ubuntu Server 10.04。在一台服务器上,密钥在另一台服务器上不起作用。
Mateng 2012年

附加信息:我用Putty / Kitty输入远程机器
Mateng 2012年

您可以尝试通过其他程序ssh还是为目标系统创建新的配置文件?
belacqua 2012年

我也遇到了Cygwin(在胜利7中)的问题
gopi1410 2012年

出现这种情况时,通过键入echo“ $ TERM”返回什么?
david6 2012年

Answers:


32

编辑:参考:Mateng的答案

Mateng与我接近,因为我认为您可能正在运行Bourne Shell。但是,您不应该/etc/passwd直接编辑文件。尝试改用以下chsh命令:

chsh -s /bin/bash

-s标志将使新的shell(在本例中为Bash)成为您的登录shell,然后继续。


似乎是合法的。如果gopi1410同意,那50个代表就属于您了。
马登2012年

@Mateng:同意,并添加了指向您答案的链接以使其完整
gopi1410 2012年

1
以root sudo chsh -s /bin/bash
身份

1
@三年后为我工作。非常感谢!你真棒!
goncalotomas

17

以下更改为我解决了该问题。首先,我检查了运行哪个shell:

$ echo $0

返回:

/bin/sh

正如我在Ubuntuforums上的这篇文章中所读到的,更改外壳以/bin/bash带来解决方案。因此,我将用户设置编辑/etc/passwd为:

johndoe:x:1001:104:John Doe:/home/johndoe:/bin/bash

我注销,然后再次登录。奇怪的是,我不得不通过输入以下命令手动切换外壳(也许某些缓存处于活动状态):

/bin/bash

瞧!
[由于发行版更新,出现了问题。]


13

第一次使用ssh时,请尝试以下两个命令

stty sane
export TERM=linux

我必须在要修复此问题的某些机器上执行此操作


1
我尝试了一下,但问题仍然存在
Mateng 2012年

1
您是否尝试将术语称为VT100而不是Linux?怎么样stty erase <backspace>(<backspace>是您真正按下键的位置)
德雷克·克拉里斯(Dreak Clarris

随着(箭头向上): $ stty erase '^[[A' stty: invalid integer argument '\033[A'。使用[Backspace]:$ stty erase '^?'有效。使用[Tab]:$ stty erase ' ' 没有错误,但是[Backspace]返回到异常行为。
Mateng 2012年

我试过了export TERM=VT100,但无济于事。
Mateng 2012年

1
stty tab0没有帮助。我猜想,xterm的某种常规重新配置是必要的。还是键盘映射根本错了?
Mateng 2012年

5

解决此问题的最简单方法之一是在命令行界面提示符下键入/ bin / bash:

$ / bin / bash

上面提到的命令将在现有外壳程序的顶部执行Bourne Again Shell作为子进程。这带来了利用更多资源的缺点,但是无需进行任何编辑,也不需要特殊权限。例如,在最新的Kubuntu版本中,它将在默认的/ bin / dash命令行外壳程序界面上启动/ bin / bash会话。

但是,要保留更改,一种可能性是编辑/ etc / passwd文件,并将默认外壳程序添加/编辑/替换为与用户对应的行中最后一个':'字符后的/ bin / bash。但是,为了编辑此文件,将需要管理员特权。


1

'Gbnome Terminal'不能完全模拟'xterm'..

来自:维基百科>> GNOME终端

GNOME终端仿真xterm终端仿真器,并提供一些相同的功能。


有关此问题和解决方案的文章可以在这里找到:

Linux Backspace /删除mini-HOWTO

每个Linux用户迟早都会陷入一种困境,即在控制台和X上都无法使用Backspace和Delete键。本文解释了为什么会发生这种情况并提出了解决方案。这里给出的概念本质上是与发行版无关的:由于每个发行版中系统配置文件的内容差异很大,因此,如有必要,我将尝试为读者提供足够的知识,以考虑自己的修订。

我假设Backspace键应该退回一个字符,然后擦除光标下方的字符。另一方面,Delete键应删除光标下的字符,而不移动它。如果您认为应该交换两个键的功能,尽管大多数键盘在Backspace键上都带有一个指向左(←)的箭头,那么本文不会为您提供立即的解决方案,但是您肯定可以可能会发现此处给出的说明很有用。

给出的最简单的解决方案(可能在这里可行)是使用:bash $ export TERM = gnome


1

以root用户身份为您的用户编辑/ etc / passwd文件,然后从/ bin / sh更改为/ bin / bash

hdfs:x:1020:1001 :: / home / hdfs:/ bin / sh到hdfs:x:1020:1001 :: / home / hdfs:/ bin / bash

这对我有用。


1

我尝试了上述所有内容以及(此链接)的注释,但均未成功。您可能要检查是否已安装vim。

我通常使用vi而不是vim。所以我安装了vim。

$ sudo apt-get install vim

之后,当我执行vi时,键盘笔触开始正常工作。查看以下输出,看起来在安装后vi成为了vim的别名:

$ ls -al /etc/alternatives | grep vi 
lrwxrwxrwx   1 root root    18 Jan 13 09:38 vi -> /usr/bin/vim.basic

0

这是键盘的兼容性问题,即在主机系统中的解释方式。您可能必须使用j或h在命令模式下在vi编辑器中移动。箭头将不起作用。

检查主机系统中该特定用户的配置文件首选项->兼容性。


0

好的,我知道这不是每个人所说的“解决方案”,它可能对很多人没有帮助,但希望它对您至少有一个帮助。它确实解决了我的问题。

我六个月大的孩子在键盘上敲打,箭头键停止在腻子盒中的Debian盒中工作。他们确实在其他任何地方都工作(除腻子外的所有其他程序)。谷歌搜索甚至登陆后(我打算关闭此选项卡,但它并没有为我解决)。我试过了 我在同一框中打开了一个新的ssh会话,并且箭头键起作用了。我参加了屏幕会议,但没有工作。因此,与当前屏幕会话相关的事情刚刚发生,禁用了箭头键。不幸的是,我正处于一个大项目的中间,在屏幕会话中打开了28个窗口,并且不想关闭会话,这使我在所有28个窗口中都失去了位置。

所以..

在bash shell上,我尝试了所有我能想到的组合,包括CTRL +向上,向下,向左,向右,ALT +向上,向下,向左,向右,SHIFT +向上,向下,向左向右,CTRL + ALT +向上,向下,左,右,CTRL + SHIFT +,上,下,左,右等。仍然没有运气,我还尝试了Windows菜单和Windows应用程序键的上,下,左,右。

现在,我的箭头再次起作用!关于上述内容和箭头键的组合之一,它可以解决此问题。


0

上面的答案都没有解决我的相同问题,即从Ubuntu切入远程目录后无法使用退格键或类似的键(这里是ncurses-6.0的ubuntu-17.10)。

最终成为terminfo的问题。基本上,我的gnome-terminal表示它是一个xterm-256color终端(通过TERM变量,该变量由ssh导出到远程),但是远程没有针对xterm-256color的terminfo配置。

执行以下操作可以解决此问题:

$ host:回显$ TERM
xterm-256color
$ host:infocmp> terminfo.src
$ host:tic terminfo.src
$ host:scp .terminfo / x / xterm-256color $远程:/ usr / share / terminfo / x / xterm-256color

无任何选择,infocmp会在环境变量$ TERM中为终端生成源列表。因此,它等效于infocmp -I $ TERM。

然后,通过tic编译生成的源。

最后,将相应的terminfo配置安装到远程位置。因此,下次我通过$ host连接到$ remote时,它将知道我的终端。


您的代码块做什么?以某种方式创建术语配置?最好有个解释,运行神秘代码不是最好的主意,即使他们的手册页也不对infocmp的默认效果或它的用处非常
清晰

@ Xen2050:我为每个命令添加了解释。没有任何选项的infocmp等效于infocmp -I $ TERM。在手册页中对此进行了描述,但分为两部分:“如果未指定选项,并且指定了零或一个术语名,则将采用-I选项。[...] -I,-L和-C选项将为每个命名的终端生成一个源列表。-我使用terminfo名称如果未给出termname,则将环境变量TERM用作终端名称。”
user1448926
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.