Клавиши Backspace, Tab, Del и стрелки не работают в терминале (используя ssh)

44

Когда я захожу на другой компьютер Ubuntu с моей учетной записью (с разрешениями sudo), моя клавиша Backspace генерирует некоторые неудобные символы при нажатии. Также не работают клавиши Tab, Del и Arrow.

С другой стороны, у меня также есть другая учетная запись на той же машине, и когда я ssh через эту учетную запись, его терминал работает отлично. Я не мог понять, почему это происходит.

gopi1410
источник
У меня та же проблема - мой хост - Win7-64, а мои удаленные гостевые системы - Ubuntu Server 10.04. На одном сервере ключи работают, на другом нет.
Mateng
Дополнительная информация: Я вхожу в удаленные машины с Putty / Kitty
Mateng
Можете ли вы попробовать ssh через другую программу или создать новый профиль для целевой системы?
Белаква
Я тоже столкнулся с проблемой с cygwin (в win 7)
gopi1410
Что возвращается после ввода echo "$ TERM" , когда это происходит?
Давид6

Ответы:

32

РЕДАКТИРОВАТЬ: Ссылка: ответ Матенга

Матенг близок к тому, что я думаю, что вы, вероятно, управляете Bourne Shell. Но вы не должны редактировать свой /etc/passwdфайл напрямую. Попробуйте использовать chshкоманду вместо этого:

chsh -s /bin/bash

Флаг -s сделает новую оболочку (в данном случае Bash) вашей оболочкой для входа в систему.

Аарон
источник
Выглядит вполне законно. Если Gopi1410 соглашается, то 50 повторений - ваши.
Mateng
@Mateng: согласен, добавлена ​​ссылка на ваш ответ, чтобы завершить его
gopi1410
1
Запуск от имени пользователя root:sudo chsh -s /bin/bash
KrisWebDev
1
@ Работал для меня более 3 лет спустя. Спасибо большое! Ты восхитителен!
гонкалотомы
17

Следующие изменения решили проблему для меня. Сначала я проверил, какая оболочка запущена:

$ echo $0

который вернулся:

/bin/sh

Как я читал в этом посте в Ubuntuforums , изменение оболочки на /bin/bashприносит решение. Поэтому я отредактировал свои пользовательские настройки так /etc/passwd:

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

Я вышел из системы, затем снова вошел в систему. Странно, мне пришлось переключать оболочку вручную (возможно, какой-то кэш был активен), введя это:

/bin/bash

Вуаля!
[Проблема возникла из-за обновления дистрибутива.]

Mateng
источник
13

при первом входе в ssh попробуйте эти две команды

stty sane
export TERM=linux

Я должен сделать это на некоторых машинах, которые я вхожу, чтобы решить именно эту проблему

Дрейк Кларрис
источник
1
Я пробовал это, но проблема сохраняется
Матенг
1
Вы пробовали термин VT100 вместо Linux? что насчет stty erase <backspace>(<backspace> где вы на самом деле
нажали
С (стрелка вверх): $ stty erase '^[[A' stty: invalid integer argument '\033[A'. С [Backspace]: $ stty erase '^?'это работает. С [Tab]: $ stty erase ' ' нет ошибки, но затем [Backspace] возвращается к странному поведению.
Mateng
Я пытался export TERM=VT100, но безрезультатно.
Mateng
1
stty tab0не помогает. Я думаю, какая-то общая реконфигурация xterm необходима. Или раскладка клавиатуры просто неверна?
Матенг
5

Один из самых простых способов решить эту проблему - набрать / bin / bash в командной строке интерфейса:

$ / bin / bash

Вышеупомянутая команда выполнит Оболочку Bourne Again поверх существующей оболочки как подпроцесс. Это представляет собой недостаток использования большего количества ресурсов, но ничего не нужно редактировать и никаких специальных разрешений не требуется. Например, в последних версиях Kubuntu он запускает сеанс / bin / bash поверх интерфейса командной строки по умолчанию / bin / dash.

Однако, чтобы сохранить изменения, можно отредактировать файл / etc / passwd и добавить / отредактировать / заменить оболочку по умолчанию в / bin / bash после последнего символа «:» в строке, соответствующей пользователю. Однако для редактирования этого файла потребуются права администратора.

nightsinwhiteaustin
источник
1

«Терминал Gbnome» точно не эмулирует «xterm».

из: Википедия >> Терминал GNOME

Терминал GNOME эмулирует эмулятор терминала xterm и предоставляет некоторые из тех же функций.


Трактат о проблеме и ее решениях можно найти здесь:

Linux Backspace / Удалить мини-HOWTO

Каждый пользователь Linux рано или поздно оказался в ловушке в ситуации, когда рабочие клавиши Backspace и Delete на консоли и на X казались невозможными. Эта статья объясняет, почему это происходит, и предлагает решения. Представленные здесь понятия по существу не зависят от дистрибутива: из-за разного содержания файлов конфигурации системы в каждом дистрибутиве я постараюсь дать читателю достаточно знаний, чтобы при необходимости продумать свои собственные исправления.

Я предполагаю, что клавиша Backspace должна вернуться на один символ назад, а затем стереть символ под курсором. С другой стороны, клавиша Delete должна удалять символ под курсором, не перемещая его. Если вы считаете, что необходимо заменить функцию двух клавиш, несмотря на то, что на большинстве клавиатур имеется клавиша Backspace со стрелкой, указывающей влево (←), то этот документ не даст вам немедленных решений, но, безусловно, вы может найти объяснения, приведенные здесь полезными.

Самое простое решение (которое может работать здесь) - использовать: bash $ export TERM = gnome

david6
источник
1

От имени пользователя root отредактируйте файл / etc / passwd для своего пользователя и измените с / bin / sh на / bin / bash

hdfs: x: 1020: 1001 :: / home / hdfs: / bin / sh to 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
jtlindsey
источник
0

Это проблема совместимости с клавиатурой, т. Е. Как она интерпретируется в хост-системе. Возможно, вам придется использовать j или h для перемещения в редакторе vi в командном режиме. Стрелки не будут работать.

Проверьте настройки профиля -> совместимость в хост-системе для этого конкретного пользователя.

Сай Шива Сундар
источник
0

Хорошо, я знаю, что это не «решение», скажем так, и это может не помочь многим из вас , но, надеюсь, это поможет по крайней мере 1 из вас . Это решило мою проблему.

Мой шестимесячный ребенок стучал по моей клавиатуре, и мои клавиши со стрелками перестали работать на моей сессии замазки в коробку Debian. Они работали везде (все остальные программы, кроме шпатлевки). После Google и даже посадки здесь (я собирался закрыть эту вкладку, это не решило это для меня). Я попробовал что-то. Я открыл новый сеанс SSH в том же окне, и мои клавиши со стрелками работали. Я присоединился к своему сеансу экрана, и они не работали. Так что что-то произошло, привязанное к текущей сессии экрана, отключив клавиши со стрелками. К сожалению, я был (я) в середине большого проекта, у меня было открыто 28 окон в сеансе экрана, и я не хотел закрывать сеанс, теряя свое место во всех 28 окнах.

Так..

Находясь в оболочке bash, я перепробовал все возможные комбинации: CTRL + вверх, вниз, влево, вправо, ALT + вверх, вниз, влево, вправо, SHIFT + вверх, вниз, влево вправо, CTRL + ALT + вверх, вниз , влево вправо, CTRL + SHIFT + вверх, вниз, влево, вправо и т. д. Тем не менее, безуспешно, я также попробовал меню Windows и клавиши приложения Windows вверх, вниз, влево вправо.

Теперь мои стрелки снова работают! Что-то в одной из комбинаций того, что было выше, и клавиши со стрелками исправили это.

PyTis
источник
0

Ни один из приведенных выше ответов не устранил мою идентичную проблему, то есть не может использовать клавишу Backspace или аналогичные ключи после sshing на удаленный компьютер из Ubuntu (здесь ubuntu-17.10 с ncurses-6.0).

Это в конечном итоге проблема с terminfo. По сути, мой gnome-терминал говорит, что это терминал xterm-256color (через переменную TERM, который экспортируется с помощью ssh на удаленный компьютер), но на удаленном компьютере не было конфигурации terminfo для xterm-256color.

Выполнение следующих действий решило проблему:

$ host: echo $ TERM
Xterm-256-цветные
$ host: infocmp> terminfo.src
$ host: tic terminfo.src
$ host: scp .terminfo / x / xterm-256color $ remote: / usr / share / terminfo / x / xterm-256color

infocmp без какой-либо опции создает листинг источника для терминала в переменной окружения $ TERM. Так что это эквивалентно infocmp -I $ TERM.

Затем полученный источник компилируется через тик.

Наконец, установите соответствующую конфигурацию terminfo в удаленном месте. Итак, в следующий раз, когда я подключусь к $ remote через $ host, он узнает о моем терминале.

user1448926
источник
Что делает ваш блок кода? создать термин конфигурации как-нибудь? Было бы неплохо получить какое-то объяснение, запуск загадочного кода - не лучшая идея, даже их справочные страницы не очень ясны о влиянии infocmp по умолчанию или о том, как это полезно
Xen2050
@ Xen2050: я добавил объяснение для каждой команды. infocmp без какой-либо опции эквивалентен infocmp -I $ TERM. Это описано на странице руководства, но состоит из двух частей: «Если опции не указаны и указаны ноль или одно имя термина, будет использоваться опция -I. [...] Опции -I, -L и -C создаст список источников для каждого названного терминала. -Я использую имена terminfo. Если имена терминов не указаны, для имени терминала будет использоваться переменная среды TERM. "
user1448926