GNU Screen dziwne postacie po kliknięciu


21

Mam mały problem z ekranem GNU. Sesja ekranowa GNU działa na moim RaspberryPi. Czasami, kiedy do niego dołączę, klikam terminal (używam terminatora w Fedorze) i widzę dziwne znaki napisane. Znaki te zależą od współrzędnych mojej myszy… Wydaje się, że błędne dekodowanie zdarzenia kliknięcia wysłanego na ekran GNU. Te postacie obejmują takie rzeczy jak

kM#kM -  Z3#Z3  -  q-#q-

itp…

Najpierw pomyślałem, że to problem, ttywięc otworzyłem nową sesję GNU Screen na moim RaspberryPi: w ogóle nie ma problemu.
Zrobiłem stty -ana obu sesjach i zobaczyłem, że były różnice. Potem zrobiłem stty -g > ~/stty-good-settingsdobrą sesję i załadowałem ją do złej stty `cat ~/stty-good-settings`(potem porównałem wartości, ustawienia zostały pomyślnie załadowane), ale nadal mam problem w jednej sesji ekranowej, a nie w drugiej!

Nie jestem pewien, co się dzieje, jeśli wynika to z mojej TERMwartości (tej samej w obu), moich ttyustawień, mojego terminalu…


2
tmuxOd czasu do czasu też to widzę . W pewnym momencie multipleksery terminali wydają się być bananami i niepoprawnie dekodują dane wejściowe ( xtermmoże mieć coś do powiedzenia tutaj). resetzwykle naprawia to dla mnie.
— peterph

Rzeczywiście, resetdziała również na ekranie! Dzięki za poprawkę, chciałbym jednak dowiedzieć się, dlaczego ...
— Noé Malzieu

Ja też ... :) Podejrzewam, że to jakaś zła interakcja między terminalowymi multiplekserami a zawierającym terminal.
— peterph

Rozumiem .. Możesz odpowiedzieć na pytanie, zweryfikuję tę odpowiedź!
— Noé Malzieu

Odpowiedzi:


14

Coś, co działa na ekranie GNU, zdecydowało, że zamiast tego działa w xterm (lub podobnym) i włącza tryb Myszy aplikacji. (Lub coś, co uruchamiasz w tym terminalu, zanim podłączyłeś się do ekranu GNU, być może nawet przed ssh, który sam się nie zresetował.) Często dzieje się tak, gdy $ TERM nie jest „screen”, ale np. „Xterm” lub „screen. xterm ”. To ostatnie jest widoczne na ncurses-termzainstalowanych systemach Debiana (i pochodnych) ; spróbuj wyczyścić ten pakiet (na hoście i raspi).

W przeciwnym razie reset(jak już powiedziano) lub printf \\x033cmoże tymczasowo pomóc. Lub, oczywiście, odpowiednie sekwencje specjalne, które nakazują emulatorowi terminala wyłączenie trybu myszy.


resetwykonał lewę. Dzięki.
— AlikElzin-kilaka

9

resetma swoje miejsce, ale czyści ekran. Jeśli prowadzisz xtermlub coś kompatybilnego , najkrótszą, najmniej inwazyjną rzeczą będzie

printf '\033[?9l'

Nie jest to wyraźnie określone w sekcji Śledzenie myszy w Sekwencjach kontrolnych XTerm , ale xtermumożliwia zresetowanie (wyłączenie) trybu myszy poprzez wyłączenie dowolnego z możliwych trybów, które mogą być włączone. Są one udokumentowane jako nazwane stałe:

 #define SET_X10_MOUSE               9
 #define SET_VT200_MOUSE             1000
 #define SET_VT200_HIGHLIGHT_MOUSE   1001
 #define SET_BTN_EVENT_MOUSE         1002
 #define SET_ANY_EVENT_MOUSE         1003

i 9jest najkrótszy.

Tryb myszy jest włączony przez wiele aplikacji. Jeśli ktoś wyjdzie bez jego wyłączenia, powstanie nieparzysta postać, którą zobaczyłeś. Aplikacje ncurses wyłączają tryb myszy, w endwinktórym wszystkie dobrze zachowane klątwy wywołują aplikację. Inne aplikacje mogą nie używać (n) przekleństw lub mogą zapomnieć o połączeniu endwin.

Aplikacje ncurses sprawdzają, czy tryb myszy xterm jest dostępny, testując jego kmouszdolność (która jest częścią screenopisu terminala). Jest to standardowy sposób testowania tej funkcji od 1999 r. , Więc jest mało prawdopodobne, aby aplikacja przypadkowo włączyła tryb myszy. Wskazuje raczej na aplikację, która zapomniała wykonać swoją pracę.

Nawiasem mówiąc, screen.xtermw ncurses-termpakiecie Debiana nie ma wpisu (utrzymanie go jest bardziej pomocne niż usunięcie go). Oto lista wszystkich wpisów związanych z ekranem w tym pakiecie. Większość służy do usuwania rozbieżności w screenzachowaniu różnych terminali:

/usr/share/terminfo/s/screen.konsole
/usr/share/terminfo/s/screen-16color-bce
/usr/share/terminfo/s/screen-16color
/usr/share/terminfo/s/screen3
/usr/share/terminfo/s/screen.mrxvt
/usr/share/terminfo/s/screen-bce.Eterm
/usr/share/terminfo/s/screen-bce.gnome
/usr/share/terminfo/s/screen.xterm-xfree86
/usr/share/terminfo/s/screen-bce.konsole
/usr/share/terminfo/s/screen-bce.mlterm
/usr/share/terminfo/s/screen-256color-s
/usr/share/terminfo/s/screen-bce.mrxvt
/usr/share/terminfo/s/screen-bce.rxvt
/usr/share/terminfo/s/screen.linux
/usr/share/terminfo/s/screen.vte
/usr/share/terminfo/s/screen-bce.xterm-new
/usr/share/terminfo/s/screen.teraterm
/usr/share/terminfo/s/screen-16color-bce-s
/usr/share/terminfo/s/screen.xterm-r6
/usr/share/terminfo/s/screen+fkeys
/usr/share/terminfo/s/screen-256color-bce-s
/usr/share/terminfo/s/screen.mlterm
/usr/share/terminfo/s/screen-16color-s
/usr/share/terminfo/s/screen-bce.linux
/usr/share/terminfo/s/screen.gnome
/usr/share/terminfo/s/screen.rxvt
/usr/share/terminfo/s/screen2
/usr/share/terminfo/s/screen.Eterm
/usr/share/terminfo/s/screen.xterm-new
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.