web-dev-qa-db-ja.com

GNUクリックすると画面がおかしくなる

GNU screen。A GNU screen screen run on my RaspberryPi。に小さな問題があります。今、参加するとき、ターミナルをクリックすると(Fedoraでターミネーターを使用しています)変な文字が表示されます。これらの文字は、マウスの座標に依存します…GNU画面に送信されたクリックイベントのデコードが間違っているようです。これらの文字のようなものを含める

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

等…

私は最初にttyの問題だと思ったので、RaspberryPiで新しいGNU Screenセッションを開きました。まったく問題ありません。
両方のセッションでstty -aを実行したところ、違いがあることがわかりました。次に、良好なセッションでstty -g > ~/stty-good-settingsを実行し、不良なセッションにstty `cat ~/stty-good-settings`を使用してロードしました(その後、値を比較しましたが、設定は正常にロードされました)。スクリーンセッションではなく、他の!

これが私のTERM値(両方に同じ)、私のtty設定、私の端末が原因である場合、私は何が起こっているのかわかりません。

23
Noé Malzieu

実行するものinside GNU screenは、代わりにxterm(または同様の)で実行していると判断し、アプリケーションマウスモードを有効にしました(または、 GNU screen、おそらくsshの前であっても、それ自体を正しくリセットしなかった。)これは、$ TERMが「screen」ではなく「xterm」または「screen.xterm後者は、ncurses-termがインストールされているDebianシステム(および派生物)で見られます;(Hostおよびraspiで)そのパッケージを削除してみてください。

そうでなければ、reset(すでに述べたように)またはprintf \\x033cが一時的に役立つことがあります。または、もちろん、適切なエスケープシーケンスを使用して、端末エミュレータにマウスモードを無効にするように指示します。

16
mirabilos

reset はその場所にありますが、画面をクリアします。実行している場合xtermまたは何か互換性がある 、使用する最も短い、最も邪魔にならないものは、

printf '\033[?9l'

XTerm Control SequencesMouse Trackingセクションでは明示的に述べられていませんが、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 でマウスモードをオフにします。これはすべて正常に動作するcursesアプリケーション呼び出しです。他のアプリケーションは(n)cursesを使用しないか、endwinの呼び出しを忘れる場合があります。

ncursesアプリケーションは、kmous機能(これは screen 端末の説明の一部です)をテストして、xterm-mouseモードが使用可能かどうかを確認します。 1999 以降、この機能をテストするための標準的な方法であるため、アプリケーションが誤ってマウスモードをオンにした可能性は低いです。むしろ、それはその仕事をするのを忘れたアプリケーションを示します。

ちなみに、Debianの screen.xterm パッケージには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
9
Thomas Dickey