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…

Noé Malzieu
źródło
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.

mirabilos
źródło
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
Thomas Dickey
źródło