GNU Screen странные символы при нажатии

21

У меня небольшая проблема на экране GNU. Сеанс экрана GNU запускается на моем RaspberryPi. Теперь иногда, когда я присоединяюсь к нему, если я нажимаю в терминале (я использую терминатор в Fedora), я вижу странные написанные символы. Эти символы зависят от координат моей мыши ... Похоже, неправильное декодирование события щелчка, отправленного на экран GNU. Эти символы включают в себя такие вещи, как

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

и т.д…

Сначала я подумал, что это проблема с моим, ttyпоэтому я пошел и открыл новый сеанс GNU Screen на своем RaspberryPi: никаких проблем вообще.
Я сделал stty -aна обеих сессиях и увидел, что есть разница. Затем я сделал stty -g > ~/stty-good-settingsхорошую сессию и загрузил ее на плохую stty `cat ~/stty-good-settings`(сравнивал значения после этого, настройки были успешно загружены), но у меня все еще есть проблема в одной из сеансов экрана, а не в другой!

Я не уверен, что происходит, если это связано с моей TERMценностью (то же самое в обоих), моими ttyнастройками, моим терминалом ...

Noé Malzieu
источник
2
Я вижу это tmuxвремя от времени тоже. В какой-то момент терминальные мультиплексоры, похоже, xtermработают неправильно и декодируют входы неправильно ( возможно, здесь есть что сказать). resetобычно исправляет это для меня.
Петер
Действительно, resetработает на экране тоже! Спасибо за исправление, однако, я хотел бы получить некоторое представление о том, почему ...
Noé Malzieu
Я тоже ... :) Я подозреваю, что это какое-то плохое взаимодействие между терминальными мультиплексорами и содержащими их терминалами.
Петер
Понятно .. Вы можете ответить на вопрос, я проверю этот ответ!
Noé Malzieu

Ответы:

14

Что-то, что работает внутри экрана GNU, решило, что оно работает в xterm (или подобном), и включило режим Application Mouse. (Или что-то, что вы запускаете в этом терминале перед тем, как подключить его к экрану GNU, возможно, даже до ssh, который сам себя не сбросил должным образом.) Это часто имеет место, если $ TERM не «screen», а, например, «xterm» или «screen». Xterm». Последний виден в системах Debian (и их производных), которые ncurses-termустановили; попробуйте очистить этот пакет (на хосте и распи).

В противном случае reset(как уже было сказано) или printf \\x033cможет помочь временно. Или, конечно, правильные escape-последовательности, чтобы сообщить эмулятору терминала отключить режим мыши.

mirabilos
источник
resetсделал свое дело. Благодарю.
Алик Эльзин-килака
9

resetимеет свое место, но очищает ваш экран. Если вы работаете xtermили что-то совместимое , самая короткая, наименее навязчивая вещь будет

printf '\033[?9l'

Это явно не указано в разделе « Отслеживание мыши » в « Последовательностях управления XTerm» , но xtermпозволяет сбросить (отключить) режим мыши, отключив любой из возможных режимов, которые могут быть включены. Они задокументированы как именованные константы:

 #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

и 9самый короткий.

Режим мыши включен многими приложениями. Если вы выходите без выключения, это приводит к появлению странных символов, которые вы видели. Приложения ncurses отключают режим мыши endwin, при котором все хорошо проклятые приложения вызывают приложения. Другие приложения могут не использовать (n) curses или могут забыть позвонить endwin.

Приложения ncurses проверяют, доступен ли режим мыши xterm, проверяя kmousвозможность (которая является частью screenописания терминала). Это был стандартный способ тестирования этой функции с 1999 года , поэтому маловероятно, что приложение случайно включило режим мыши. Скорее, это указывает на приложение, которое забыл выполнить свою работу.

Кстати, screen.xtermв ncurses-termпакете Debian нет записи (хранить ее более полезно, чем удалять). Вот список всех связанных с экраном записей в этом пакете. Большинство из них используются для устранения несоответствий в screenповедении различных терминалов:

/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
Томас Дики
источник