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


37

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

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

Відповіді:


37

Таких проблем я бачив і раніше.

Візьмемо, наприклад, зворотну простір, віддалений хост очікує, що якийсь символ буде використаний як "стирання / зворотній простір", тоді як ви натискаєте на проміжку в терміналі, програма терміналу надсилатиме деякий символ віддаленому хосту, якщо те, що очікує віддалений хост, відрізняється від символи, надіслані термінальною програмою, ви зіткнетеся з цим питанням. Тож швидке виправлення наведено нижче:

  1. запустіть команду #stty -aна віддаленому хості та знайдіть у вихідному коді очікуваний код стерти. Скажи erase=^?.
  2. У терміналі наберіть Ctrlvі натисніть зворотну область. Ви побачите, який код надсилається як "стерти". Скажіть, так і є ^H.
  3. У віддаленому хості запустіть #stty erase ^H.
    (Примітка: використовувати Ctrlv+ Backspace, не вводити ^ вручну)

Виправити вкладку можна так само, як і вище.


Мій задній простір - якийсь спеціальний символ, щось на зразок перевернутого трикутника. Тож його не працює
gopi1410

1
Цей простий коментар, безумовно, найкраще рішення, яке я бачив. Це здається хиткою, але це працює.
Пауло Матос

Це працювало для мене! Що я не розумію, хоча це те, що моя оболонка обробляє назад, як очікувалося, але читання від stdin у моєму додатку не робить. Виконання запропонованих результатів змін у зворотному просторі працює для обох. Я розумію, що оболонка обробляє штрифування буксу, тому чи обробка зворотної області не повинна бути однаковою як для оболонки, так і для програми?
Самуїл

1
Що робити, якщо код взагалі не надсилається? Ctrlv + backspace нічого не створює ...
Manfredo

Для мене код зворотного простору такий же, як і stty -aвихідний, але все ще не працює
Matej J

36

Крім рішення "stty", ви можете спробувати рішення "TERM".

Ви переходите до свого Debian з якогось терміналу (putty, solaris dterm, debain xterm, you-name-it), ці термінальні можливості оголошення (що включає ключі, такі як Backspace та Tab) через змінну середовища TERM.

Отже, після ssh до unix хосту (це не залежить від debian він чи іншого хоста) встановіть змінну TERM відповідно до вашого терміналу. Подумайте, що ви використовуєте bash як оболонку, а vt100 як термінал:

export TERM=vt100

ps: Термін повинен бути оголошений через ssh автоматично, але в деяких випадках ця магія виходить з ладу.


досі не працює :(
gopi1410

Який термінал ви використовуєте? І яке значення терміна ви пробували?
Павло

Я спробував vt100. Як я дізнаюся про значення TERM? Я спробував ssh від cygwin (у windows) до Debian. Якщо є проблеми з cygwin, я навіть спробував це з терміналу ubuntu, але така ж проблема.
gopi1410

Не впевнений, що cygwin має гарну термінальну емуляцію, наскільки я знаю, cygwin просто використовує звичайну консоль Windows, у якій відсутня емуляція терміналу (можливо, неправильна). З ubuntu все повинно працювати чудово. Щось не так із бібліотекою оболонок чи термінальних файлів на debian. Увійти з Ubuntu і дати мені висновок команд: 1. Ехо $ TERM 2. Запущена -a
PAUL

2
Хоча це не допомогло мені безпосередньо, оскільки TERM був правильно встановлений, він допоміг визначити проблему. Мені не вистачало записів terminfo для мого терміналу. Я використовую urxvt і на арку вам потрібно встановити rxvt-unicode-terminfo, щоб виправити цю конкретну проблему
Xandaros

15

Це тому, що ваша шкаралупа за замовчуванням shдля використання bashпросто запущена bashз вашої оболонки.

bash

Щоб встановити bashяк оболонку за замовчуванням:

chsh -s /bin/bash 

або

sudo chsh -s /bin/bash yourusername

2
Цей зафіксував це для мене. Ніколи навіть не дивлячись на мою оболонку входу!
Джеймс Пак

2
Я бачу цю проблему, але моя шкаралупа тріщить.
матч

6

Для вашої оболонки може бути встановлено /bin/shзамість/bin/bash


1
Пов’язана з цією відповіддю: unix.stackexchange.com/questions/50542/…
Самуїл


Це було б корисніше, якби це пояснило трохи більше і як це змінити, але це була моя проблема. Дякую @Tom за ваше посилання, яке вирішило проблему для мене.
Джейк

Це було причиною в моєму випадку .. саме для цього користувача. Жодна оболонка не була визначена /etc/passwd, коли я додав :/bin/bashдо його рядка, він працював. Ви можете дізнатися, з якою оболонкою використовуєтьсяecho $0
MSpreij

6

Зазвичай я використовую це для виправлення будь-якого фанк-виводу у своєму терміналі. Він скидає всі спеціальні символи до їх значень за замовчуванням.

stty sane

Зі сторінки stty man:

те ж, що і cread -ignbrk brkint -inlcr -igncr icrnl -iutf8 -ixoff -iuclc -ixany imaxbel opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0 isf echchoeeeee echochoe -xcase -tostop -echoprt echoctl echoke, всі спеціальні символи до значень за замовчуванням


2

поверх відповіді Поля, якщо ви хочете зберегти можливість мати кольоровий вихід, ви можете використовувати xterm-88color

echo 'export TERM=xterm-88color' >> ~/.bashrc
source ~/.bashrc

1
toe -aпоказує перелік підтримуваних типів терміналів ... xterm-88colorдалеко не єдиний варіант, і він може бути недоступним для певних систем.
0xC0000022L
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.