ma question est peut-être hors sujet, je la pose quand-même au cas zou...
voila, j'écris un soft de liaison, avec ssh et scp, entre un mac
(10.4.11) et un "smartphone" sous linux.
c'est une application avec UI.
mon problème concerne l'émulation d'un terminal par cet UI.
plus exactement, je manque de base en info pour savoir comment faire
passer mon UI pour un tty...
j'ai implémenté un parser simple en ce qui concerne les escapes
séquences lequel commence à fonctionner y compris avec vi...
si cela se passe assez bien avec telnet, j'ai plus de difficultés avec ssh.
Au départ j'avais le warning suivant :
Pseudo-terminal will not be allocated because stdin is not a terminal.
j'ai donc ajouté l'option -T pour forcer l'allocation d'un
pseudo-terminal, mais, à part ce message, ça ne change pas grand
chose...
le problème rencontré avec mon UI (en RubyCocoa) :
quand je me connecte au serveur distant via ssh avec l'UI :
- je n'ai pas le prompt d'attente de commande (qui est tout simplement
"# " avec ssh en CLI)
- aucune "escape séquence" n'est transmise (en CLI je vois bien la
colorisation de certains fichiers et/ou symlink)
- je ne reçois pas le message de déconnection.
et comme je ne vois passer aucun caractère de contrôle mis à part \n
ou \r (pas de \e par exemple et encore moins de \e[31m...)
je pense que c'est ma config soft qui "montre" tout de suite à ssh que
mon UI n'est pas un pseudo-terminal et ssh basculerait, d'après cette
déduction, dans un autre mode de fonctionnement.
j'ai lu, certes hâtivement les rfc4251-4 mais je n'y vois pas grand
chose qui puisse m'éclairer.
je pense manquer d'infos en ce qui concerne une "émulation de
terminal" surtout dans la façon dont se passe l'ouverture d'une
session.
bien évidemment, ce problème a été résolu par d'autres, Terminal.app,
est un UI dont je voudrais m'approcher au mieux du fonctionnement dans
une fenêtre de mon appli.
avec Telnet j'y suis +/- bien parvenu d'ailleurs, le seul vrai pb
rencontré étant que Telnet n'envoit pas de caractère spécifique à la
fin d'une transmission. Je m'en sort soit par timeout soit en envoyant
une commande bidon (echo END_OF_COMMAND) à la suite d'une commande
voulue.
c'est ce que je souhaiterais éviter avec ssh car on m'a dit qu'ssh
envoyait des caractères de contrôle lors des transmissions de données,
je n'ai pas plus d'info à ce sujet.
donc, en résumé, deux questions :
- auriez-vous des infos sur le protocole d'échange, avec un terminal, de ssh ?
- que faut-il implémenter pour qu'un UI puisse se faire passer pour un
pseudo-terminal, non pas au niveau du parser des "escape sequences",
c'est réalisé et testé avec Telnet, mais à un niveau plus proche du
système.
excusez moi si mes questions vous paressent floues ou mal posées, mais
je patauge...
cordialement,
--
yvon
_______________________________________________
archives :
http://listes.patpro.net/list/sshfr.fr.html
http://listes.patpro.net/mailman/listinfo/script_shell_fr