La commande passe autour de la même ligne après 80 caractères

8

J'ai un problème ennuyeux avec minicom connecté à une console série sur une machine Yocto Linux.

La commande que j'entre passe sur la même ligne après le 80e caractère. Cela devient très gênant de travailler avec. Tout ce que j'ai entré au début de la ligne est écrasé par les derniers caractères de cette ligne.

Une connexion SSH à la même machine fonctionne très bien. Après le 80e caractère, ssh passe à la ligne suivante.

Voici le paramètre stty:

stty -a
speed 115200 baud; rows 24; columns 80; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 hupcl -cstopb cread clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon ixoff
-iuclc -ixany -imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon -iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke

L'option -w de minicom n'a aucun effet. Toujours le même comportement

minicom -w

La resizecommande n'est pas disponible sur cette machine. À quel paquet appartient-il? Je peux peut-être l'installer.

Comment puis-je résoudre ce problème?

Oliver G.
la source
Quelle est la TERMvariable d'environnement lors d'une connexion via minicom?
thrig
echo $ TERM xterm
Oliver G.19
afficher la sortie de l' stty -aexécution à l'intérieurminicom
Arkadiusz Drabczyk
Est-ce que courir minicomavec de l' -waide?
Arkadiusz Drabczyk du
Si j'utilise puttyau lieu de minicomcomme programme de terminal série et que j'active le paramètre de terminal "LF implicite dans chaque CR", le comportement a disparu.
Oliver G.20

Réponses:

4

Lorsque vous êtes connecté via une ligne série, le système ne peut pas négocier la taille de la fenêtre avec le terminal (NAWS - Negotiate About Window Size est RFC 1073 ). Dans ce cas, vous pouvez obtenir soit un système par défaut pour la taille, soit même simplement des zéros. Soit confondrait l'éditeur de ligne du shell, qui a besoin de connaître la largeur réelle du terminal pour fonctionner avec sa fonction enveloppante.

bash devient confus, pensant qu'il a été encapsulé en raison de la fonction d'autowrap du terminal et se déplace au début de la ligne actuelle (incorrecte) dans le cadre de l'édition / affichage de la ligne.

Comme solution de contournement, la plupart des terminaux (y compris minicom - voir source ) que vous utiliseriez avec une interface série peuvent répondre à la séquence d'échappement du rapport de position du curseur utilisée par resizepour trouver la taille de la fenêtre - et comme effet secondaire, définissez l'idée du système de la taille de votre fenêtre de terminal.

Thomas Dickey
la source
1
Je serais toujours curieux de savoir pourquoi il s'enroule sur la même ligne, plutôt que dans la ligne suivante.
dirkt
3

Cela a fonctionné pour moi. Le shell cible doit être défini pour vérifier la taille de la fenêtre et être défini sur la taille correcte de votre interface utilisateur de console. Après la connexion via série avec du mastic ou minicom:

shopt -s checkwinsize
resize
Mark Inderhees
la source
Cela semble avoir fonctionné pour moi, mais je ne sais pas comment cela a été fait ni comment l'appliquer en règle générale.
TheMeaningfulEngineer
Ajoutez ceci à votre .bashrc sur la cible: "shopt -s checkwinsize" et "eval` resize`"
Mark Inderhees