Klawisz Backspace, Tab, Del i strzałki nie działają w terminalu (przy użyciu ssh)


44

Kiedy ssh na innym komputerze Ubuntu z moim kontem (z uprawnieniami sudo), mój klawisz backspace generuje kilka dziwnych symboli po naciśnięciu. Również klawisze Tab, Del i Arrow nie działają.

Z drugiej strony mam także inne konto na tej samej maszynie, a kiedy ssh przez to konto, jego terminal działa doskonale. Nie mogłem zrozumieć, dlaczego tak się dzieje.


Mam ten sam problem - moim hostem jest Win7-64, a moim zdalnym systemem-gościem jest Ubuntu Server 10.04. Na jednym serwerze klucze działają, na innym nie.
Mateng

Informacje dodatkowe: Do zdalnych maszyn wchodzę za pomocą Putty / Kitty
Mateng

Czy możesz spróbować ssh za pomocą innego programu lub utworzyć nowy profil dla systemu docelowego?
belacqua

Miałem też problem z cygwinem (w win 7)
gopi1410

Co jest zwracane po wpisaniu echa „$ TERM” ?
david6,

Odpowiedzi:


32

EDYCJA: Odniesienie: odpowiedź Matenga

Mateng jest blisko, ponieważ myślę, że prawdopodobnie prowadzisz Bourne Shell. Ale nie powinieneś /etc/passwdbezpośrednio edytować pliku. chshZamiast tego spróbuj użyć polecenia:

chsh -s /bin/bash

Flaga -s sprawi, że nowa powłoka (w tym przypadku Bash) stanie się powłoką logowania.


Wydaje się legit. Jeśli gopi1410 się zgodzi, 50 powtórzeń należy do ciebie.
Mateng

@Mateng: zgodzono się i dodano link do Twojej odpowiedzi w celu jej uzupełnienia
gopi1410,

1
Uruchom jako root:sudo chsh -s /bin/bash
KrisWebDev,

1
@ Pracował dla mnie ponad 3 lata później. Dziękuję bardzo! Jesteś niesamowity!
goncalotomas

17

Poniższe zmiany rozwiązały problem dla mnie. Najpierw sprawdziłem, która powłoka działa:

$ echo $0

który zwrócił:

/bin/sh

Jak czytam w tym poście w Ubuntuforums , zmiana powłoki na /bin/bashprzynosi rozwiązanie. Zmieniłem więc ustawienia użytkownika w /etc/passwd:

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

Wylogowałem się, a następnie zalogowałem ponownie. O dziwo musiałem ręcznie zmienić powłokę (być może trochę pamięci podręcznej było aktywne), wpisując to:

/bin/bash

Voila!
[Problem powstał z powodu aktualizacji dystrybucji.]


13

kiedy po raz pierwszy wpiszesz ssh, wypróbuj te dwa polecenia

stty sane
export TERM=linux

Muszę to zrobić na niektórych komputerach, na które wchodzę, aby naprawić dokładnie ten problem


1
Próbowałem tego, ale problem nadal występuje
Mateng

1
próbowałeś określenia jako VT100 zamiast Linux? co powiesz na stty erase <backspace>(<backspace> będąc tam, gdzie faktycznie nacisnąłeś klawisz)
Drake Clarris,

Z (strzałka w górę) $ stty erase '^[[A' stty: invalid integer argument '\033[A'. Z [Backspace]: $ stty erase '^?'działa. Z [Tab]: $ stty erase ' ' bez błędu, ale wtedy [Backspace] powraca do dziwnego zachowania.
Mateng

Próbowałem export TERM=VT100, ale bezskutecznie.
Mateng

1
stty tab0nie pomaga. Chyba potrzebna jest jakaś ogólna rekonfiguracja xtermu. Czy mapa klawiszy jest po prostu błędna?
Mateng,

5

Jednym z najprostszych sposobów rozwiązania tego problemu jest wpisanie / bin / bash w wierszu polecenia interfejsu wiersza poleceń:

$ / bin / bash

Wyżej wymienione polecenie wykona powłokę Bourne Again na istniejącej powłoce jako podproces. Stanowi to wadę wykorzystania większej ilości zasobów, ale nie trzeba nic edytować i nie są wymagane żadne specjalne uprawnienia. Na przykład w najnowszych wersjach Kubuntu rozpocznie sesję / bin / bash na domyślnym interfejsie powłoki wiersza poleceń / bin / dash.

Aby jednak zachować zmiany, jedną z możliwości jest edycja pliku / etc / passwd i dodanie / edycja / zamiana domyślnej powłoki do / bin / bash po ostatnim znaku „:” w wierszu odpowiadającym użytkownikowi. Jednak w celu edycji tego pliku wymagane byłyby uprawnienia administratora.


1

„Gbnome Terminal” nie naśladuje dokładnie „xterm”.

z: Wikipedia >> Terminal GNOME

Terminal GNOME emuluje emulator terminala xterm i zapewnia niektóre z tych samych funkcji.


Traktat na temat problemu i rozwiązania można znaleźć tutaj:

Linux Backspace / Usuń mini-HOWTO

Każdy użytkownik Linuksa został wcześniej lub później uwięziony w sytuacji, w której posiadanie działającego klawisza Backspace i Delete na konsoli i na X wydawało się niemożliwe. Ten artykuł wyjaśnia, dlaczego tak się dzieje, i sugeruje rozwiązania. Podane tu pojęcia są zasadniczo niezależne od dystrybucji: ze względu na bardzo różną zawartość plików konfiguracyjnych systemu w każdej dystrybucji, postaram się dać czytelnikowi wystarczającą wiedzę, aby w razie potrzeby wymyślić własne poprawki.

Zakładam, że klawisz Backspace powinien cofnąć się o jeden znak, a następnie usunąć znak pod kursorem. Z drugiej strony klawisz Delete powinien usunąć znak pod kursorem, bez przesuwania go. Jeśli uważasz, że należy zmienić funkcję dwóch klawiszy, pomimo faktu, że większość klawiatur ma strzałkę skierowaną w lewo (←) na klawisz Backspace, to ten dokument nie poda natychmiastowych rozwiązań, ale na pewno podane tu wyjaśnienia mogą okazać się przydatne.

Najprostszym rozwiązaniem (które może tu działać) jest użycie: bash $ export TERM = gnome


1

Jako użytkownik root edytuj plik / etc / passwd dla swojego użytkownika i zmień z / bin / sh na / bin / bash

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

To zadziałało dla mnie.


1

Próbowałem wszystkich powyższych plus notatki z ( tego linku ) bez powodzenia. Możesz sprawdzić, czy vim jest zainstalowany.

Zwykle używam vi nie vim. Więc zainstalowałem vim.

$ sudo apt-get install vim

Po tym uderzenia klawiatury zaczęły działać poprawnie, gdy wykonałem vi. Patrząc na następujące wyniki, wygląda na to, że vi został utworzony alias vim po instalacji:

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

0

Jest to problem ze zgodnością z klawiaturą, tj. Sposób interpretacji w systemie hosta. Może być konieczne użycie j lub h, aby przejść w edytorze vi w trybie poleceń. Strzały nie będą działać.

Sprawdź preferencje profilu -> zgodność w systemie hosta dla tego konkretnego użytkownika.


0

Okej, wiem, że nie jest to „rozwiązanie” na powiedzenie i może nie pomóc wielu z was , ale mam nadzieję, że pomoże przynajmniej jednemu z was . Naprawił mój problem.

Mój sześciomiesięczny trzask uderzył w klawiaturę, a klawisze strzałek przestały działać podczas mojej sesji putty w pudełku Debiana. Działali wszędzie indziej (wszystkie inne programy poza kitem). Po Googleingu, a nawet wylądowaniu tutaj (miałem zamiar zamknąć tę kartę, nie rozwiązało to dla mnie). Próbowałem czegoś Otworzyłem nową sesję ssh w tym samym pudełku i moje klawisze strzałek działały. Dołączyłem do sesji ekranowej i nie działały. Więc coś się stało, związane z bieżącą sesją ekranową, wyłączając klawisze strzałek. Niestety byłem (jestem) w trakcie dużego projektu, miałem 28 okien otwartych w mojej sesji ekranowej i nie chciałem zamykać sesji, tracąc swoje miejsce we wszystkich 28 oknach.

Więc..

Podczas korzystania z powłoki bash wypróbowałem wszystkie kombinacje, które mogłem wymyślić, CTRL + góra, dół, lewo prawo, ALT + góra, dół, lewo, prawo, SHIFT + góra, dół, lewo prawo, CTRL + ALT + góra, dół , lewy prawy, CTRL + SHIFT + góra, dół, lewo prawo itp. Wciąż bez powodzenia spróbowałem także menu systemu Windows i klawiszy aplikacji Windows za pomocą klawiszy góra, dół, lewo prawo.

Teraz moje strzały znów działają! Naprawiono coś w jednej z kombinacji tego, co jest powyżej i klawiszy strzałek.


0

Żadna z powyższych odpowiedzi nie rozwiązała mojego identycznego problemu, tzn. Nie można użyć backspace lub podobnych kluczy po sshing do zdalnego z Ubuntu (tutaj ubuntu-17.10 z ncurses-6.0).

W końcu jest to problem z terminfo. Zasadniczo mój terminal gnome mówi, że jest to terminal xterm-256color (poprzez zmienną TERM, która jest eksportowana przez ssh do pilota), ale pilot nie miał konfiguracji terminfo dla xterm-256color.

Wykonanie następujących czynności naprawiło problem:

$ host: echo $ 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, bez żadnej opcji, tworzy listę źródeł dla terminala w zmiennej środowiskowej $ TERM. Jest to więc odpowiednik infocmp -I $ TERM.

Następnie powstałe źródło jest kompilowane za pomocą tic.

Na koniec zainstaluj odpowiednią konfigurację terminfo w zdalnej lokalizacji. Kiedy następnym razem połączę się ze zdalnym $ hostem za pośrednictwem $ hosta, dowie się on o moim terminalu.


Co robi twój blok kodu? stworzyć jakoś konfigurację terminu? Byłoby miło mieć jakieś wyjaśnienie, uruchamianie tajemniczego kodu nie jest najlepszym pomysłem, nawet ich strony podręcznika nie są super jasne na temat domyślnego efektu infocmp lub tego, jak to jest użyteczne
Xen2050,

@ Xen2050: Dodałem wyjaśnienie do każdego polecenia. infocmp bez żadnej opcji jest równoważne infocmp -I $ TERM. Jest to opisane na stronie podręcznika, ale w dwóch częściach: „Jeśli nie podano żadnych opcji i podano zero lub jedną nazwę term, zostanie przyjęta opcja -I. [...] Opcje -I, -L i -C stworzy listę źródłową dla każdego nazwanego terminala. -Używam nazw terminfo Jeśli nie podano żadnych terminów, dla nazwy terminala zostanie użyta zmienna środowiskowa TERM. "
user1448926,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.