Caracteres estranhos da tela GNU ao clicar

21

Eu tenho um pequeno problema na tela GNU. Uma sessão de tela GNU é executada no meu RaspberryPi. Agora, às vezes, quando eu ingresso, se eu clicar no terminal (estou usando o terminator no Fedora), vejo caracteres estranhos escritos. Esses caracteres dependem das coordenadas do meu mouse ... Parece uma decodificação incorreta do evento click enviada para o GNU Screen. Esses personagens incluem coisas como

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

etc ...

Primeiro pensei que era um problema com o meu, ttyentão eu abri uma nova sessão GNU Screen no meu RaspberryPi: sem problema algum.
Eu fiz um stty -aem ambas as sessões e vi que havia diferença. Em seguida, fiz uma stty -g > ~/stty-good-settingssessão boa e a carreguei na ruim stty `cat ~/stty-good-settings`(comparei os valores depois disso, as configurações foram carregadas com êxito), mas ainda tenho o problema em uma das sessões da tela e não na outra!

Não tenho certeza do que está acontecendo, se isso se deve ao meu TERMvalor (o mesmo em ambos), minhas ttyconfigurações, meu terminal ...

Noé Malzieu
fonte
2
Eu vejo isso tmuxde vez em quando também. Em algum momento, os multiplexadores de terminal parecem ficar banais e decodificar as entradas incorretamente ( xtermtambém pode ter algo a dizer aqui). resetgeralmente corrige isso para mim.
Peterph
De fato, também resetfunciona na tela! Obrigado pela correção, no entanto, eu adoraria algumas dicas sobre o porquê ...
Noé Malzieu
Eu também ... :) Suspeito que seja algum tipo de interação ruim entre os multiplexadores de terminal e o terminal que os contém.
Peterph
Entendo .. Você pode responder à pergunta, eu vou validar esta resposta!
Noé Malzieu

Respostas:

14

Algo que é executado dentro da tela do GNU decidiu que estava sendo executado em um xterm (ou similar) e habilitou o modo Mouse de Aplicativo. (Ou algo que você executa nesse terminal antes de se conectar à tela do GNU, possivelmente antes do ssh, que não se redefiniu adequadamente.) Geralmente, esse é o caso se $ TERM não for "tela", mas por exemplo "xterm" ou "tela. xterm ". O último é visto nos sistemas Debian (e derivados) que foram ncurses-terminstalados; tente limpar esse pacote (no host e no raspi).

Caso contrário, reset(como já foi dito) ou printf \\x033cpode ajudar temporariamente. Ou, é claro, as seqüências de escape apropriadas para dizer ao emulador de terminal para desativar o modo mouse.

mirabilos
fonte
resetfez o truque. Obrigado.
AlikElzin-kilaka
9

resettem seu lugar, mas limpa sua tela. Se você estiver executando xtermou algo compatível , a coisa mais curta e menos invasiva a ser usada seria

printf '\033[?9l'

Isso não é explicitamente declarado na seção Rastreamento de Mouse das XTerm Control Sequences , mas xtermpermite redefinir (desativar) o modo do mouse desativando qualquer um dos modos possíveis que possam estar ativados. Aqueles são documentados como constantes nomeadas:

 #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

e 9é o mais curto.

O modo do mouse está ativado por muitos aplicativos. Se alguém sair sem desligá-lo, isso produzirá os caracteres estranhos que você viu. Os aplicativos ncurses desativam o modo mouse endwin, o qual todos os comportamentos bem-intencionados amaldiçoam a chamada do aplicativo. Outros aplicativos podem não usar (n) maldições ou podem esquecer de ligar endwin.

O ncurses applications verifica se o modo xterm-mouse está disponível testando a kmouscapacidade (que faz parte da screendescrição do terminal). Essa é a maneira padrão de testar o recurso desde 1999 , por isso é improvável que um aplicativo ative o modo do mouse acidentalmente. Em vez disso, indica um aplicativo que esqueceu de fazer seu trabalho.

A propósito, não existe nenhuma screen.xtermentrada no ncurses-termpacote Debian (mantê-lo é mais útil do que removê-lo). Aqui está uma lista de todas as entradas relacionadas à tela nesse pacote. A maioria é usada para corrigir discrepâncias no screencomportamento de vários terminais:

/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
fonte