我在 GNU 屏幕上遇到一个小问题。 GNU 屏幕会话在我的 RaspberryPi 上运行。现在有时,当我加入它时,如果我单击终端(我在 Fedora 上使用 terminator),我会看到写有奇怪的字符。这些字符取决于我的鼠标坐标……似乎是发送到 GNU 屏幕的单击事件的错误解码。这些字符包括诸如
kM#kM - Z3#Z3 - q-#q-
ETC…
我首先认为这是我的问题,tty
所以我在 RaspberryPi 上打开了一个新的 GNU Screen 会话:一点问题都没有。
我stty -a
对这两次会议都做了一次检查,发现了差异。然后我 stty -g > ~/stty-good-settings
在好的会话上做了一个,并将其加载到坏的会话上stty `cat ~/stty-good-settings`
(之后我比较了值,设置已成功加载),但我仍然在一个屏幕会话中遇到问题,而不是在另一个屏幕会话中!
我不确定发生了什么,如果这是由于我的TERM
值(两者相同)、我的tty
设置、我的终端......
答案1
运行的东西里面GNU 屏幕决定它在 xterm(或类似的)中运行,并启用应用程序鼠标模式。 (或者在连接到 GNU screen 之前,甚至可能在 ssh 之前,在该终端中运行的某些内容,它没有正确重置自身。) 如果 $TERM 不是“screen”而是“xterm”或“screen”,则通常会出现这种情况。 xterm”。后者出现在已ncurses-term
安装的 Debian 系统(及其衍生版本)上;尝试清除该软件包(在主机和 raspi 上)。
否则,reset
(正如已经说过的)或printf \\x033c
可能暂时有所帮助。或者,当然,正确的转义序列可以告诉您的终端模拟器禁用鼠标模式。
答案2
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-mouse 模式是否可用kmous
(这是screen
终端描述)。自此以来,这一直是测试该功能的标准方法1999年,因此应用程序不太可能意外打开鼠标模式。相反,它表明应用程序忘记完成其工作。
screen.xterm
顺便说一句, Debian 中没有条目ncurses-term
包(保留它比删除它更有帮助)。以下是该包中所有与屏幕相关的条目的列表。大多数用于修复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