用鼠标点击终端窗口的时候出现:0;61;50M0;61;50M0;62;50M0
在做aws webrtc viewer拉流压测的过程中,我本地打开了多个终端,用于连接EC2实例:
- 一个终端用于启动 ‘并发master脚本’、监控master端的cpu、mem;
- 一个终端用于监控master端的带宽情况;
- 一个终端用于监控viewer端的cpu、mem;
- 一个终端用于监控viewer端的带宽情况;
- 一个终端用于从本地上传文件到实例、从实例下载文件到本地;
- 一个终端用于启动 ‘并发viewer脚本’;
这几个终端长时间打开,没有关闭过,突然有一次,我在用鼠标点击终端窗口的时候,终端窗口会出现:0;61;50M0;61;50M0;62;50M0
鼠标点击一次出现一次“乱码”,很奇怪,不知道是什么原因。不点击就不会出现。
后来查了一下资料:
- 可能是因为 我的终端程序(比如 gnome-terminal、xterm、tmux、screen 等)处于鼠标追踪(mouse tracking)模式,点击鼠标,终端程序把鼠标事件编码成了一串字符发送给正在运行的命令行程序(比如 Vim、top、htop 等)。如果该程序没有处理这些事件,就会原样输出到屏幕上。
- 正在运行的程序启用了 终端鼠标事件捕获模式(比如某些用 ncurses 库编写的程序)
- 在运行 cat、bash 等普通命令时误触了这种模式(比如误运行了一段脚本或命令启用了 xterm 鼠标模式)
但是我不知道为什么会处于鼠标追踪模式。也不知道是如何误触的。当我点击选择某个终端的时候并没有什么程序正在运行。
说一下最终解决方法吧
reset
当出现 ‘乱码’ 时就reset,搞定了。
补充说明
这种“乱码”,其实是 Xterm 鼠标事件编码格式,形如:
\x1b[<0;61;50M
意思是:鼠标左键在(x=61, y=50)按下(M 表示按下,m 表示释放)
用鼠标点击终端窗口的时候出现:0;61;50M0;61;50M0;62;50M0,这些字符是由于终端程序将鼠标点击事件转成 escape sequence 发给前台进程,但前台程序没有理解它,就直接显示出来了。