GNU Screen personnages étranges au clic

21

J'ai un petit problème dans l'écran GNU. Une session d'écran GNU s'exécute sur mon RaspberryPi. Maintenant, parfois, lorsque je le rejoins, si je clique sur le terminal (j'utilise Terminator sur Fedora), je vois des caractères étranges écrits. Ces caractères dépendent des coordonnées de ma souris… On dirait un mauvais décodage de l'événement click envoyé à GNU Screen. Ces personnages incluent des choses comme

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

etc…

J'ai d'abord pensé que c'était un problème avec mon, ttyalors je suis allé ouvrir une nouvelle session d'écran GNU sur mon RaspberryPi: pas de problème du tout.
J'ai fait un stty -asur les deux sessions et j'ai vu qu'il y avait une différence. J'ai ensuite fait un stty -g > ~/stty-good-settingssur la bonne session et l' stty `cat ~/stty-good-settings`ai chargé sur la mauvaise avec (j'ai comparé les valeurs après cela, les paramètres ont été chargés avec succès) mais j'ai toujours le problème dans l'une des sessions d'écran et pas dans l'autre!

Je ne suis pas sûr de ce qui se passe, si cela est dû à ma TERMvaleur (la même dans les deux), mes ttyparamètres, mon terminal…

Noé Malzieu
la source
2
Je le vois aussi tmuxde temps en temps. À un moment donné, les multiplexeurs terminaux semblent aller banane et décoder les entrées de manière incorrecte ( xtermpeut-être aussi quelque chose à dire ici). resetrègle généralement cela pour moi.
peterph
En effet, resetfonctionne aussi en écran! Merci pour le correctif, cependant, j'aimerais savoir pourquoi ...
Noé Malzieu
Moi aussi ... :) Je soupçonne qu'il s'agit d'une sorte de mauvaise interaction entre les multiplexeurs de terminaux et le terminal conteneur.
peterph
Je vois .. Vous pouvez répondre à la question, je validerai cette réponse!
Noé Malzieu

Réponses:

14

Quelque chose qui s'exécute à l' intérieur de l' écran GNU a décidé qu'il s'exécutait à la place dans un xterm (ou similaire) et a activé le mode Application Mouse. (Ou quelque chose que vous exécutez dans ce terminal avant de vous attacher à l'écran GNU, peut-être même avant ssh, qui ne s'est pas correctement réinitialisé.) C'est souvent le cas si $ TERM n'est pas «screen» mais par exemple «xterm» ou «screen. xterm ”. Ce dernier est vu sur les systèmes Debian (et dérivés) qui ont ncurses-terminstallé; essayez de purger ce package (sur l'hôte et le raspi).

Sinon, reset(comme cela a déjà été dit) ou printf \\x033cpeut aider temporairement. Ou, bien sûr, les séquences d'échappement appropriées pour indiquer à votre émulateur de terminal de désactiver le mode souris.

mirabilos
la source
reseta fait l'affaire. Merci.
AlikElzin-kilaka le
9

reseta sa place, mais efface votre écran. Si vous utilisez xtermou quoi que ce soit compatible , la chose la plus courte et la moins intrusive à utiliser serait

printf '\033[?9l'

Cela n'est pas explicitement indiqué dans la section Suivi de la souris des séquences de contrôle XTerm , mais xtermvous permet de réinitialiser (désactiver) le mode souris en désactivant l'un des modes possibles qui pourraient être activés. Ceux-ci sont documentés sous forme de constantes nommées:

 #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

et 9est le plus court.

Le mode souris est activé par de nombreuses applications. Si l'on sort sans l'éteindre, cela produit les caractères étranges que vous avez vus. Les applications ncurses désactivent le mode souris endwin, dans lequel toutes les applications curses bien comportées appellent. D'autres applications peuvent ne pas utiliser (n) curses ou oublier d'appeler endwin.

Les applications ncurses vérifient si le mode xterm-mouse est disponible en testant la kmouscapacité (qui fait partie de la screendescription du terminal). C'est la façon standard de tester la fonctionnalité depuis 1999 , il est donc peu probable qu'une application active accidentellement le mode souris. Il indique plutôt une application qui a oublié de faire son travail.

Il n'y a d'ailleurs aucune screen.xtermentrée dans le ncurses-termpaquet Debian (le garder est plus utile que le supprimer). Voici une liste de toutes les entrées liées à l'écran dans ce package. La plupart sont utilisés pour corriger les écarts de screencomportement pour différents terminaux:

/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
Thomas Dickey
la source