Lorsque j'utilise la console série de mon système, je me retrouve toujours avec $COLUMNS=80
et $LINES=24
.
Bien que je puisse modifier ces variables manuellement, il est quelque peu ennuyeux de le faire à tout moment lorsque la fenêtre du terminal côté client a été redimensionnée.
Habituellement, je me connecte à la console à l'aide de screen /dev/mytty baudrate
.
Changer la $TERM
variable d'environnement en "screen" ou "xterm" n'aide pas.
Aurai-je besoin d'appeler getty
avec certains d'entre eux au lieu de vt100?
Inutile de dire que tout cela fonctionne bien, lorsque je me connecte à la même machine en utilisant ssh.
la source
[[ $(tty) == /dev/ttyS0 ]] && trap res2 DEBUG
à l'une des configurations de profil de shell (par exemple/etc/profile
,~/.bash_profile
). Cela le fera s'exécuter après chaque commande (ce qui ne serait une bonne chose que si vous redimensionnez les fenêtres / volets avec screen / tmux / terminal-emulator).res
etres2
sont trop lents pour quoi que ce soit , mais une utilisation sur la première connexion. Sur mes machines, elles prennent toutes les deux 0,5 secondes pour terminer ... ce qui rend toutes mes commandes lentes (lorsqu'elles sont utilisées avec le piège DEBUG). Oups! Je ne peux pas avoir ça. Je suppose que je vais installerxterm
.resize
est waaaay plus rapide - généralement 0,002 s.busybox
semblait être tout aussi lente pour moi.resize
n'est donc pas une option.Juste pour mémoire, voici la réponse à ce problème (Usenet a gagné):
Applications console en cours d' exécution dans les applications de terminal virtuel (
xterm
,rxvt
et amis) recevrontSIGWINCH
après une opération de modification de taille a eu lieu. Ainsi, l'application pourra redessiner la fenêtre, etc. dans le gestionnaire de signaux correspondant.Malheureusement, lors de l'utilisation d'une console série, il n'existe aucun mécanisme de ce type.
Il est cependant possible pour l'application de demander activement la taille actuelle de la fenêtre de la console. Donc, la deuxième meilleure chose à faire est de le faire chaque fois qu'une invite de commande est imprimée par le shell.
Ceci peut être réalisé en compilant d' abord un exécutable de redimensionnement spécial , puis en utilisant ce qui suit dans
bashrc
:Bien sûr, cela ne changera pas les paramètres de taille de la console dans une application console pendant l'exécution.
la source
resize
qui est installée sur votre système.Les terminaux "redimensionnables" en tant que tels sont le résultat de NAWS (
Negotiate About Window Size
de RFC 1073 Telnet Window Size Option ).Si vous êtes connecté directement à l'ordinateur via un port série, aucune négociation n'est impliquée et l'ordinateur n'a aucune connaissance directe de la taille d'écran de votre terminal.
Si un terminal peut négocier la taille, l'ordinateur enverra
SIGWINCH
aux applications s'exécutant dans le terminal, leur disant de mettre à jour leur notion de taille d'écran.Lorsque l'ordinateur ne connaît pas la taille de l'écran, il définit généralement la taille indiquée par
stty -a
(lignes et colonnes) sur zéro. Pour une utilisation interactive, c'est un peu hostile, et certains systèmes utilisent des variables d'environnementLINES
etCOLUMNS
pour aider. Les valeurs attribuées peuvent être dérivées de la description du terminal; le plus souvent, ils sont simplement codés en dur. La convention pour ces variables exige qu'elles prennent effet à moins qu'elles ne soient explicitement supprimées, par exemple dans lause_env
fonction des applications curses . Du côté positif, ces variables peuvent être utiles lorsqu'aucune information fiable n'est disponible. Du côté négatif, il n'y a pas de méthode pratique pour modifier ces variables.Le
resize
programme (un utilitaire fourni avecxterm
) peut utiliser la séquence d'échappement du rapport de position du curseur de style VT100 pour déterminer la taille de l'écran. Cela peut être exécuté à partir de la ligne de commande; il n'y a (encore) aucun moyen pratique de le faire automatiquement. En tant qu'effet secondaire,resize
met à jour les informations sur les lignes / colonnes vues parstty
. Son utilisation pour fournir des variables d'environnement mises à jour est principalement utile dans des cas comme celui-ci, oùLINES
etCOLUMNS
sont définis, et doit être mis à jour.la source
Voici une autre solution qui a très bien fonctionné pour moi sur mon système Linux embarqué (Overo exécutant Angstrom). Je viens de l'exécuter à partir de mon fichier .bashrc. Je ne voulais pas utiliser le redimensionnement car cela nécessite l'installation de certains packages X, et je ne le voulais pas.
Dire à votre Raspberry Pi que votre terminal est plus grand que 24 lignes | Blog sur les pensées superficielles
la source
Dans le cas où vous pourriez utiliser FreeBSD à la place, il y a la commande resizewin (1) , qui fait exactement ce que vous voulez.
la source
Lors de l'exécution d'une session shell sur une ligne série, il suffit d'appeler la
resize
commande à l'intérieur de cette session - après avoir établi la connexion et après chaque changement de géométrie du terminal.La
resize
commande fait partie de xterm mais ne dépend pas de X11. Par exemple, sur Fedora, il est emballé séparément en tant quexterm-resize
.Comment ça marche: la commande resize mesure la hauteur / largeur via quelques mouvements de curseur puis envoie ces valeurs au terminal via des séquences d'échappement.
Avec un shell comme zsh, cela met également automatiquement à jour les variables
LINES
etCOLUMNS
(en variante, on peut évaluer les instructions d'exportation que les commandes impriment sur stdout).Pourquoi cela est nécessaire: avec une session locale ou ssh, le terminal est en mesure de signaler la session sur les changements de géométrie (cf. SIGWINCH). Ce mécanisme ne fonctionne pas sur une connexion série.
la source
Voici une fonction de redimensionnement simple et rapide qui ne fonctionne que pour bash. Il est modifié à partir de resk de phk, en utilisant bash
read -d delim
pour éviter de laisser le délai d'attente pour terminer la lecture.la source