2017-08-19 2 views
0

Reformulation de mon problème ici. J'ai une application Web utilisant les modules de nœuds 'xterm.js', 'ws' et 'ssh2'. Tout fonctionne bien. Sauf une chose:xterm.js + ws + ssh2 ne transmettant pas les signaux de redimensionnement du terminal (SIGWINCH) au serveur ssh

Le signal de redimensionnement de la fenêtre SIGWINCH ne sera pas accessible au serveur sshd ou au flux ssh2. D'autres sigs, esc, ansi fonctionnent bien. Esc [8 disparaît juste.

Dans un vrai xterm, echo -e "\e[8;30;120t" redimensionne le terminal aux deux extrémités. Pas ici. sock.send("\u001b[8;30;120t") ne fera rien non plus. Console.log sur le serveur de mon application de nœud affiche Escape [8 (ou \ e, \ u001b ou \ x1b) ne le fait pas. D'autres codes d'échappement fonctionnent - flèches, clics de souris etc.

Je peux faire term.resize (x, y) sur le client, mais je dois actuellement utiliser stty sur le serveur. La pty de Ssh2 les place à la connexion seulement. Comment est-ce que je propage SIGWINCH? Où est-il piégé?

Répondre

0

Ok. Donc, ma propre réponse à cette question: Dans le navigateur, utilisez term.resize (cols, lignes) pour redimensionner le terminal local. Transmettez les cols et les lignes via la séquence d'échappement ansi sur websocket. Ensuite, sur l'application serveur de noeud, dans le client ssh2, utilisez Regexp pour faire correspondre la séquence d'échappement de redimensionnement et extraire les deuxième et troisième nombres, qui sont le nombre de colonnes et de lignes (le '8' est le code de redimensionnement). Utilisez la fonction de redimensionnement du client ssh2 avec les cols et les lignes extraits (indique à ssh2 psuedoterminal d'envoyer sigwinch et cols/rows au serveur ssh). Pas idéal, je sais qu'il y a une meilleure façon de le trouver, mais ça marche bien si vous faites une fonction dans le navigateur et que vous l'ajoutez à un écouteur d'événement pour redimensionner la fenêtre. Maintenant, ma session de terminal sera redimensionnée de manière appropriée à la fois sur le client et sur le serveur lorsque je redimensionne la fenêtre du navigateur, ou lorsque le clavier logiciel apparaît ou se cache sur le téléphone portable.