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


44

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

З іншого боку, у мене також є інший обліковий запис на тій же машині, і коли я переглядаю цей рахунок, його термінал працює чудово. Я не міг зрозуміти, чому це відбувається.


У мене така ж проблема - мій хост - Win7-64, а мої віддалені гостьові системи - це Ubuntu Server 10.04. На одному сервері ключі працюють, на іншому - ні.
Матенг

Додаткова інформація: Я входжу у віддалені машини разом із Putty / Kitty
Mateng

Чи можете ви спробувати ssh за допомогою іншої програми або створити новий профіль для цільової системи?
belacqua

Я зіткнувся з проблемою і з cygwin (у виграші 7)
gopi1410

Що повертається, ввівши ехо "$ TERM" , коли це відбувається?
david6

Відповіді:


32

EDIT: Довідка: відповідь Матенга

Матенг близький в тому, що я думаю, ти, мабуть, працюєш з Борном Шеллом. Але ви не повинні редагувати /etc/passwdфайл безпосередньо. Спробуйте скористатися chshкомандою замість цього:

chsh -s /bin/bash

Прапор -s зробить нову оболонку (Bash в даному випадку) вашою оболонкою для входу вперед.


Здається легітимним. Якщо gopi1410 погодиться, 50 повторень - це ваше.
Матенг

@Mateng: погодився, і додано посилання на вашу відповідь, щоб завершити її
gopi1410

1
Запустити як root:sudo chsh -s /bin/bash
KrisWebDev

1
@ Працював для мене більш ніж через 3 роки. Дуже дякую! Ти неймовірний!
goncalotomas

17

Наступні зміни вирішили проблему для мене. Спочатку я перевірив, яка оболонка працює:

$ echo $0

який повернувся:

/bin/sh

Як я читав у цій публікації в Ubuntuforums , зміна оболонки /bin/bashприносить рішення. Тому я змінив мої налаштування користувача /etc/passwdна:

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

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

/bin/bash

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


13

коли ви вперше впадете, спробуйте ці дві команди

stty sane
export TERM=linux

Мені доводиться це робити на деяких машинах, в які я вживаюсь, щоб вирішити саме цю проблему


1
Я спробував це, але проблема зберігається
Матенг

1
ви спробували термін як VT100 замість linux? про що stty erase <backspace>(<назад у тому, що ви насправді натискаєте на ключ)
Дрейк Кларріс

З (стрілка вгору): $ stty erase '^[[A' stty: invalid integer argument '\033[A'. З [Backspace]: $ stty erase '^?'працює. З [Tab]: $ stty erase ' ' помилок немає, але тоді [Backspace] повертається до незвичайної поведінки.
Матенг

Я спробував export TERM=VT100, але безрезультатно.
Матенг

1
stty tab0не допомагає. Я думаю, потрібна якась загальна переконфігурація xterm. Або клавішна карта просто неправильна?
Матенг

5

Один з найпростіших способів виправити цю проблему - набрати / bin / bash в інтерфейсі командного рядка:

$ / бін / баш

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

Однак, щоб зберегти зміни, одна можливість - редагувати файл / etc / passwd та додавати / редагувати / замінювати оболонку за замовчуванням на / bin / bash після останнього символу ':' у рядку, що відповідає користувачеві. Для редагування цього файлу потрібні права адміністратора.


1

Термінал Gbnome точно не імітує "xterm".

від: Вікіпедія >> Термінал GNOME

Термінал GNOME емулює емулятор терміналу xterm та надає деякі ті самі функції.


Трактат щодо питання та їх вирішення можна знайти тут:

Linux Backspace / Видалити міні-HOWTO

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

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

Найпростішим рішенням (яке може працювати тут) є використання: bash $ export TERM = gnome


1

Як кореневий користувач редагуйте / 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 not 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

Гаразд, я знаю, що це не "рішення" на думку, і це може не допомогти багатьом з вас , але, сподіваємось, це допоможе принаймні 1 з вас . Це вирішило мою проблему.

Мій шестимісячний старший стукнувся моєю клавіатурою, а клавіші зі стрілками перестали працювати над моїм сеансом шпаклівки у поле Debian. Вони працювали скрізь (у всіх інших програмах поза шпаклівкою). Після Googleing і навіть приземлення тут (я збирався закрити цю вкладку, це не вирішило для мене). Я щось спробував. Я відкрив новий сеанс ssh до того ж поля, і мої клавіші зі стрілками спрацювали. Я приєднався до свого екранного сеансу, і вони не спрацювали. Так щось сталося прив’язане до поточного сеансу екрана, де вимкнено клавіші зі стрілками. На жаль, я опинився в середині великого проекту, маючи 28 вікон, відкритих на моєму екрані, і не хотів закривати сесію, втрачаючи своє місце на всіх 28 вікнах.

Тому..

Перебуваючи на оболонці bash, я спробував усі комбінації, про які я міг придумати, CTRL + вгору, вниз, вліво, вправо, ALT + вгору, вниз, вліво, вправо, SHIFT + вгору, вниз, вліво вправо, CTRL + ALT + вгору, вниз , ліворуч праворуч, CTRL + SHIFT + вгору, вниз, вліво праворуч і т. д. Все ж не пощастило, я також спробував меню меню Windows та клавіші додатків Windows з вгору, вниз, вліво праворуч.

Тепер мої стріли працюють знову! Щось про одну з комбінацій того, що вище, і клавіші зі стрілками виправили це.


0

Жоден з вищезазначених відповідей не вирішив мою ідентичну проблему, тобто не можу використовувати зворотний простір або подібні клавіші після передачі даних на віддалений від Ubuntu (тут ubuntu-17.10 з ncurses-6.0).

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

Вирішення проблеми вирішило:

$ хост: відлуння $ TERM
xterm-256color
$ 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.

Потім отримане джерело складається через tic.

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


Що робить ваш блок коду? створити термін config якось? Було б добре пояснити, що запуск таємничого коду не найкраща ідея, навіть їхні чоловічі сторінки не надто чіткі щодо ефекту infocmp за замовчуванням, або як це корисно
Xen2050

@ Xen2050: Я додав пояснення до кожної команди. infocmp без жодної опції еквівалентний infocmp -I $ TERM. Це описано на головній сторінці, але у двох частинах: "Якщо параметри не вказані і вказано нуль або одне ім'я терміна, параметр -I буде прийнятий. [...] Параметри -I, -L та -C створить список джерел для кожного названого терміналу. - Я використовую імена terminfo. Якщо імена термінів не вказані, змінна середовище TERM буде використана для імені терміналу. "
користувач1448926
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.