在做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 發給前臺進程,但前臺程序沒有理解它,就直接顯示出來了。