GNU Екран дивні символи при натисканні


21

У мене невелика проблема в екрані GNU. На моєму RaspberryPi працює сеанс екрану GNU. Зараз іноді, коли я приєднуюся до нього, якщо натискаю термінал (я використовую термінатор у 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налаштуваннями, моїм терміналом ...


2
Я бачу це також tmuxчас від часу. У якийсь момент термінальні мультиплексори, здається, переходять на банан і неправильно декодують входи (тут xtermтакож може щось сказати). resetзазвичай це виправляє для мене.
петерф

Дійсно, resetпрацює і на екрані! Дякую за виправлення, проте я хотів би трохи зрозуміти, чому ...
Noé Malzieu

Я теж ... :) Я підозрюю, що це якась погана взаємодія між термінальними мультиплексорами і містить термінал.
петерф

Я бачу .. Ви можете відповісти на питання, я підтверджую цю відповідь!
Noé Malzieu

Відповіді:


14

Щось, що працює на екрані GNU, вирішило, що він працює в xterm (або подібному) і ввімкнув режим миші Application. (Або щось, що ви запускаєте в цьому терміналі перед тим, як приєднати до екрана GNU, можливо, ще до ssh, який не був належним чином скинутий себе.) Це часто трапляється, якщо $ TERM не є "екраном", але, наприклад, "xterm" або "screen. xterm ”. Останнє спостерігається на встановлених системах (і похідних) Debian ncurses-term; спробуйте очистити цей пакет (на хості та raspi).

В іншому випадку reset(як уже було сказано) або printf \\x033cможе тимчасово допомогти. Або, звичайно, правильні послідовності втечі, щоб сказати емулятору терміналу відключити режим миші.


resetзробив трюк. Спасибі.
AlikElzin-kilaka

9

resetмає своє місце, але очищає ваш екран. Якщо ви працюєте xtermчи що-небудь сумісне , найкоротшим, найменш настирливим буде використання

printf '\033[?9l'

Тобто явно не вказано в Tracking миші розділі 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) прокльони або можуть забути дзвонити 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.