PuTTY wstawia losowe znaki podczas sesji

26

Niedawno zacząłem wynajmować powierzchnię na zdalnym serwerze, aby móc pracować nad projektem. Odkryłem, że stosunkowo bezbolesnym sposobem dostępu do niego na komputerze z systemem Windows jest PuTTY. Jest jednak jedna rzecz, która zawsze mnie denerwowała podczas korzystania z niej: z pozoru nie ma powodu, aby losowe znaki były czasami wstawiane do kursora.

W większości przypadków jest to tylko jedna tylda, ale rzadko wyrzuca coś, co wygląda jak sekwencja ucieczki ([[^ 8 lub podobny). Wystąpi to tylko wtedy, gdy skupię się na oknie, niezależnie od tego, czy piszę, czy 20 stóp od klawiatury. Jeśli pozostanie wystarczająco długo, będzie pluć tyldy w losowych odstępach czasu (średnia to około 1 minuty).

Wreszcie, to zachowanie wydaje się być niespójne podczas uruchamiania programów takich jak nano lub interfejs mysql: w nano zamiast wstawiania tyld, ustawi znaczniki (ctrl- ^); w mysql linii nie da się edytować.

Moje pytanie brzmi: czy ktoś jeszcze doświadczył takiego zachowania w PuTTY? A jeśli tak, co można zrobić, aby zapobiec / poprawić to zachowanie?

Zachary Polikarpus
źródło
Czy Twój komputer to robi również, jeśli zostawiasz na swoim komputerze przez kilka godzin otwarty program losowy, na przykład Notatnik?
cutrightjm
@ ekaj Nie, tylko w PuTTY. I ewidentnie programy oparte na PuTTY, takie jak MobaXterm (pobrałem wersję przenośną do testowania) EDYCJA: tylko podczas sesji SSH w Moba
Zachary Polikarpus
Hmm Czy na pewno nie jest to zbyt zbliżone do okresowego, jak zawsze 55-65 sekund, gdy kit jest całkowicie bezczynny? Jeśli tak, może to być działanie polegające na utrzymywaniu aktywności, zarówno po stronie serwera, jak i kit. Zobacz rzeczy znalezione pod hasłem „żywy” w kitu. Może te będą pomocne: superuser.com/questions/94436/… unix.stackexchange.com/questions/6105/…
mgkrebbs
@mgkrebbs Czasami wydaje się to okresowe, ale czasami nie występuje przez około 5 do 6 minut, a następnie wróć do wydawania się okresowe. Jeśli chodzi o pomysł podtrzymania życia, wydaje się, że jest to izolowane po stronie klienta, ponieważ jeśli rozpocznę sesję ssh z komputera z linuksem w natywnym terminalu, wszystko będzie dobrze. Widziałem ten pierwszy link, kiedy zadawałem pytanie, i próbowałem zmienić typ terminala na „linux”, ale nie wydawało się to robić żadnej zauważalnej różnicy.
Zachary Polikarpus
Ten problem również występuje. Pokazuje się, gdy używam Putty, Kitty, a nawet MobaXterm.
Attilah

Odpowiedzi:

30

Miałem ten sam problem z PuTTY i odkryłem, że jest to spowodowane aplikacją, którą nazwałem „kofeiną”, która skutecznie naciska klawisz F13 co minutę, aby zatrzymać aktywację wygaszacza ekranu (zasady grupy uniemożliwiają mi zmianę limitu czasu wygaszacza ekranu na moja maszyna). Wyłączenie aplikacji rozwiązało problem.

Bruce
źródło
2
Miałem wtedy zainstalowaną kofeinę! Teraz wszystko ma sens ... Dzięki, Bruce!
Zachary Polikarpus
3
Doh, powinienem był to podejrzewać. Killing Caffeine załatwiło sprawę. PS: Zobacz moje rozwiązanie poniżej, aby Kofeina i Putty pracowali razem
shreyansp
Miałem aplikację signage, która zrobiła to samo. Niektóre [28 ~ pojawiły się na terminalu.
Curious Mind
12

Jeśli wolisz, aby Putty i Kofeina działały, wykonaj następujące kroki:

  1. Zatrzymaj kofeinę
  2. Sprawdź plik Readme.txt w Caffeine pod kątem domyślnego symulowanego klucza - mój był F15
  3. Zaloguj się do swojego zdalnego terminala za pośrednictwem Putty
  4. Rozpocznij kofeinę (Wskazówka: rozpocznij kofeinę w krótkich odstępach czasu, np. 3 sekundy).
  5. Skoncentruj się na sesji Putty.
  6. W wierszu poleceń bash naciśnij Ctrl+V(Jest to wymagane, aby uzyskać specjalny kod dla klucza, np. Spróbuj, Ctrl+Va następnie F12)
  7. Poczekaj, aż kofeina zasymuluje klucz
  8. Kod klawisz zostanie wyświetlony w linii poleceń (na przykład F15to ^[[28~, gdzie ^[jest ucieczka). Zatrzymaj kofeinę
  9. Teraz możesz powiązać ten klucz z pustym, aby podczas symulacji Kofeiny nie pisał ~
    • edytuj ~/.inputrc(utwórz nowy plik, jeśli nie istnieje)
    • dodaj linię "\e[28~":""
  10. Uruchom kofeinę
  11. Uruchom ponownie sesję terminalową
    • Nie powinno być więcej losowości ~podczas korzystania z terminalu Putty z tym serwerem Linux
Shreyansp
źródło
+1. Rozszerzyłem tę odpowiedź poniżej (z wyjaśnieniem, dlaczego nie była to dla mnie optymalna odpowiedź) :)
Petru Zaharia
7

Uważam , że rozwiązanie shreyansp jest najbardziej (ale nie do końca) satysfakcjonujące :)
Oto moja próba ulepszenia tego (oczywiście YMMV). Mam nadzieję, że może to być przydatne dla osób szukających rozwiązania :)

Moje rozwiązanie zachowuje się następująco:

  • kofeina wysyła do Windows odpowiedni kod klucza wirtualnego, który:
    • zapobiega przejściu systemu Windows w tryb uśpienia lub bezczynności
    • w przeciwnym razie nie generuje żadnych skutków ubocznych w systemie Windows ani osobno, ani w kombinacji (bez Ctrl, Shift, Alt, Alt-Gr, Win, F1-F5, F10 itp.)
    • albo nie jest wysyłany do Putty, albo jest ignorowany przez Putty

TL; DR: Moje rozwiązanie jest stosowane między krokami 2 i 3 (patrz poniżej) w przypadku -key:0Eparametru kofeiny:
Wyjdź z kofeiny i uruchom ją ponownie za pomocą:
caffeine.exe 5 -key:0E(dla łatwego testowania)
caffeine.exe 50 -key:0E(dla obowiązkowego wygaszacza ekranu ustawionego na 1 minutę)

  • Uruchom readprogram na zdalnym hoście i zobacz, jak nie są odbierane żadne naciśnięcia klawiszy co 5 lub 50 sekund.
  • Wyjdź readzCtrl+C

Shreyansp zaproponował rozwiązanie, w którym poprawka zostanie zastosowana między krokami 5 i 10 (patrz poniżej).
Efektem ubocznym tego (w mojej konfiguracji) było to, że z każdym naciśnięciem klawisza ten kit przekazywany z kofeiny do zdalnego hosta:

  • uruchomił „Reset paska przewijania po naciśnięciu klawisza” (ustawienie na stronie Putty / Window),
    którego normalnie bym chciał, ale tylko wtedy, gdy (człowiek) naciska klawisz, ale nie regularnie przez kofeinę :)
  • przetłumaczona wersja readline / bash (z '"\e[28~"'na '""'(pusty klucz?) spowodowała zawieszenie interakcji sesji zdalnej na kilka sekund

Aby łatwo przetestować powyższe, wyjdź z kofeiny i uruchom ją ponownie z 5-sekundowym interwałem i kodem wirtualnego klucza 07:
caffeine.exe 5 -key:07

  • Uruchom readprogram na zdalnym hoście i obserwuj, jak naciśnięcia klawiszy są odbierane co 5 lub 50 sekund.
  • Wyjdź readzCtrl+C

„Potok” klawisza, tak jak go rozumiem:

  1. Kofeina wysyła kod wirtualnego klucza do systemu Windows
  2. Windows wysyła ten kod klucza wirtualnego do Putty
  3. Putty wykonuje niektóre „tłumaczenia” / „mapowania” na podstawie niektórych ustawień sesji w:
    • Terminal/*
    • Okno/*
  4. Putty wysyła kod klucza „przetłumaczony” / „zamapowany” do zdalnego hosta
  5. Na zdalnym komputerze, program „Terminal” (np: $TERM=xterm, vt100, vt102, vt220, itd.) Tłumaczy z „protokołem linii” w kluczowych kodów.
  6. biblioteka readline wykonuje niektóre tłumaczenia / mapowania na podstawie ~/.inputrc
  7. readline wysyła kod klucza do bash
  8. bash wykonuje niektóre tłumaczenia / mapowania na ~/.bashrcpodstawie (na podstawie wbudowanej komendy bind)
  9. bash lub readline (nie jestem pewien, który z nich) wysyła przetłumaczony kod klucza do nano (mojego edytora tekstu)
  10. Ten potok może się jeszcze wydłużyć, dodając screenprogram (który obejmuje $TERM=screenkrok 5 i ponownie zapętla się w kroku 6 do 10.)

Uwaga: Po przejściu do kroku 4. bardzo trudno jest precyzyjnie kontrolować różne warstwy „tłumaczeń” / „odwzorowań”. Polecam unikanie tego, jeśli możesz.


Tło: Używałem przez lata, zanim
miałem caffeine.exe -key:07do czynienia z pfsense 2.3.3-RELEASE-p1 (oparty na FreeBSD 10.3-RELEASE).
Następnie caffeine.exe -key:07został odebrany po drugiej stronie jako ^[[28~... co wydaje się być mapowane na Ctrl+^(Set Mark) w Nano.
To było dość irytujące (wyobraź sobie, że ktoś naciska i przytrzymuje klawisz Shift podczas przesuwania kursora tekstu w Notatniku).

Wcześniej zrobiłem wiele dostosowań w Putty Ustawienia, ~/.tcshrc, ~/.inputrc, ~/.bashrc, ~/.nanorc, ~/.screenrcaby to, co uważam za podstawową funkcjonalność ( Backspace, Delete, Home, End, PgUp, PgDown, Ctrl+Left, Ctrl+Right, Numpad 0-9, Numpad ./*-+) pracuje konsekwentnie pomiędzy bash / nano / ekran.

Gdy odkryłem ten caffeine.exe -key:07„błąd”, nie chciałem go od nowa powtarzać :)


Testowany na:
Windows 8.1 64-bit Enterprise (6.3.9600) / Putty 0.66 / pfsense 2.3.3-RELEASE-p1 (oparty na FreeBSD 10.3-RELEASE) / bash 4.4.12-release / nano 2.7.3 / screen 4.04. 00


Referencje:

Petru Zaharia
źródło
1

To naprawdę wygląda jak sekwencja ucieczki lub znak kontrolny, co może wyjaśniać, dlaczego nie widzisz go w innych programach, takich jak notatnik.

Nie jestem pewien, które klawisze należy nacisnąć, aby uzyskać ten wynik, ale trochę się pobawię i spróbuję się dowiedzieć. Czy potrafisz nazwać inną pokazaną sekwencję? Zachowanie mysql i nano może być kolejną interpretacją sekwencji ucieczki, które wydają się być wprowadzane.

Wreszcie pytanie brzmi: co powoduje te kluczowe dane wejściowe. Czy przypadkiem używasz laptopa, który np. Automatycznie kontroluje podświetlenie za pomocą oprogramowania zastrzeżonego? Widziałem jakieś dziwnie zainstalowane oprogramowanie, które faktycznie emuluje naciśnięcia klawiszy zamiast korzystania z API. Możesz chcieć użyć czegoś takiego jak log wejściowy na sobie.

Patrick R.
źródło
Od tego czasu zmieniłem systemy operacyjne, najpierw zmieniając mój podwójny Win-8.1 i Ubuntu tylko na Ubuntu, potem na Mint, a na końcu na Arch. Nie spotkałem się z podobnymi problemami, co prowadzi mnie do przekonania, że ​​problem był odizolowany od sposobu, w jaki Windows współdziałał z PuTTY. Jeśli chodzi o przyczynę kluczowych danych wejściowych, nie zdziwiłbym się, gdyby to, co zasugerowałeś, miało miejsce, jednak nie użyłem ani nie zauważyłem żadnej automatycznej kontroli sprzętu. Gdybym nadal miał te dzienniki, opublikowałbym je. EDYCJA: Jeśli ktoś jeszcze tego doświadcza, zachęcam do opublikowania tych informacji.
Zachary Polikarpus
Zobacz także odpowiedź Gillesa w artykule Dlaczego Putty wstawiający ~ do mojej powłoki bash Fedory , który ładnie wyjaśnia, dlaczego można zobaczyć ~(i usłyszeć beeb) tylko wtedy, gdy \e[3~wysyłane jest coś podobnego .
Arjan
(Tak na marginesie: może chcesz link do tego stanowiska, jak na pierwszy pomyślałem, widząc jeden ~by nie wskazują sekwencję ucieczki.)
Arjan
1

Używam opcji -key: 07 w wierszu poleceń, aby uruchomić caffiene .. Wydaje się, że zatrzymuję problem Putty.

Po prostu włóż to do pliku nietoperza

caffeine.exe -key: 07

WorsleyBaz
źródło
Używam „caffiene.exe -key: 07”, a także dobrze mi to służyło przez lata. Jednak od czasu połączenia z moim pfSense (opartym na FreeBSD), jest on odbierany po drugiej stronie jako ^ [[28 ~ ... co wydaje się być mapowane na Ctrl + ^ (Set Mark) w Nano. Jest to dość irytujące (wyobraź sobie, że ktoś naciska i przytrzymuje klawisz Shift podczas przesuwania kursora tekstu w Notatniku). :) Będę musiał znaleźć inny klucz po stronie kofeiny lub wykonać niestandardowe mapowanie po stronie FreeBSD. (patrz defs @ msdn.microsoft.com/en-us/library/windows/desktop/… )
Petru Zaharia
Przełączono na caffeine.exe -key:0E(patrz moja odpowiedź poniżej). Wydaje się działać dobrze z Windows 8.1 (64-bit) oraz Putty szczęśliwie ignoruje go :)
Petru Zaharia
0

Ktoś na forach Cisco sugeruje zmianę parametru prędkości konsoli, aby rozwiązać ten problem.

http://www.dslreports.com/forum/r27090677-HELP-Cisco-1800-garbled-output-in-putty

Na pewno wypróbowałeś wszystkie warianty prędkości konsoli w Putty, jak wspomniano w 1 ?

Uwaga: Jeśli szybkość transmisji jest inna niż domyślna, w interfejsie CLI widoczne są znaki nieparzyste. Sprawdź tabelę 1, aby ustawić prędkości transmisji dla różnych wartości Confreg.

Montag451
źródło
1
Prędkości konsoli dotyczą połączeń szeregowych. Odnosi się do połączenia SSH. Chociaż SSH ma ustawienie „Prędkości terminala” ... Nigdy nie widziałem, aby powodowało to problem.
Jared
0

Miałem również ten sam problem i stwierdziłem, że caffeine.exe rzeczywiście był problemem. Na początku myślałem, że nie może to być spowodowane przez caffeine.exe, ponieważ używałem tego przez ponad 2 lata na moim starym laptopie. Próbowałem zamiast tego zmienić caffeine.exe -usehift, ale to wysłało ^ C. Znalazłem inny program, Mouse Jiggler, który utrzymuje wygaszacz ekranu z daleka, ale nie wysyła już żadnych sekwencji Escape w moich sesjach Putty.

użytkownik332804
źródło
0

Lepszym rozwiązaniem jest skonfigurowanie ustawień podczas sesji szpachlowania, aby Caffine nie przeszkadzała.

W Putty pod Terminal Keyboard wybierz opcję SCO. W Putty pod Terminal Bell zmień akcję na None (aby wyłączyć dzwonek).

Caffine nadal to zrobi i nie będzie ci przeszkadzać podczas sesji szpachlowania. (Nie używam klawiszy Fn podczas sesji szpachlowania, więc nie wiem, co się stanie, jeśli chcesz użyć klawiszy Fn).

TomH
źródło
0

2017-09-20: Rozwiązano zastrzyk char, uruchamiając kofeinę z «caffeine.exe -useshift -noicon» w harmonogramie zadań wyzwalanym przy logowaniu. Brak ikony, koniec wstrzykiwania znaków podczas sesji miętowej / bash. To było bardzo denerwujące. Dziękujemy wszystkim za podpowiedzi.

Marc Verreault
źródło