J'utilise FreeBSD 11 avec PuTTY pour SSH. Les codes des touches du clavier ne semblent pas être configurés correctement - par exemple, il émet un bip sur la flèche vers le haut et insère "~" pour la plupart des touches de navigation, y compris les éléments de base tels que les flèches et la touche de suppression. Le clavier est un clavier anglais britannique standard. Taper est une vraie douleur.
J'ai lu un certain nombre de discussions sur la définition des codes de clé, à la fois dans rc et shell, donc je sais que je peux le configurer de cette façon en dernier recours.
Mais il serait très étrange pour un client avec autant de configurabilité, et un système d'exploitation avec une utilisation aussi large, de ne pas avoir une option / un paramètre de terminal en commun qu'ils "comprennent juste", que je peux définir sur les deux et le tour est joué - le les touches fonctionnent toutes (ou presque). Le problème est que je ne sais pas comment le trouver et, quand je le trouve, comment le configurer pour toutes les sessions futures.
Je comprends comment trouver le code d'activation envoyé par le terminal pour une clé individuelle, afin que je puisse configurer mes clés de cette façon, une par une. Mais j'aimerais trouver les paramètres de terminal de base pour mon shell rc et pour PuTTY, qui obtiennent autant de clés que possible comprises par les deux, donc je n'ai qu'à configurer quelques exceptions si j'en ai besoin.
Comment puis-je faire cela ?
Réponse acceptée :
Il y a tellement de boutons à tordre et à tourner. Et beaucoup de conseils sur Internet que les gens suivent aveuglément. Comme toujours, de nombreuses façons de se rendre à Rome, mais quand vous savez comment les choses sont liées, elles sont très simples.
La réponse ultra courte est :
Modifiez la chaîne de terminal dans Putty à partir de xterm
à putty
(sous Connexion -> Données -> Chaîne de type terminal).
Le piège type à éviter :
Assurez-vous que vous ne définissez pas TERM
ailleurs dans vos fichiers rc.
La réponse un peu plus longue :
Tout d'abord, je commencerais par m'assurer que vous utilisez réellement les valeurs par défaut. Depuis mon ordinateur portable Windows 10 personnel utilisant le clavier DK (et le mappage), je me connecte à une configuration FreeBSD 11.1 avec le mappage DK. Dans mon cas, les touches fléchées fonctionnent comme prévu sur la ligne de commande. Déplacements gauche/droite sur la ligne courante. Haut/Bas parcourt l'historique des commandes.
J'ai vérifié cela pour /bin/sh (shell utilisateur par défaut) et /bin/tcsh (shell root par défaut). Vous pouvez lire sur les coquillages.
Vous écrivez que vous savez comment faire votre keymapping dans le fichier shell rc. De nombreuses suggestions sur la façon de procéder circulent. Mais ce n'est généralement pas ce que vous devriez faire.
Vous trouverez des suggestions comme celle-ci pour les raccourcis clavier tcsh :
# Del(ete), Home and End
bindkey "\e[3~" delete-char
bindkey "\e[1~" beginning-of-line
bindkey "\e[4~" end-of-line
Et des suggestions comme celle-ci pour bash ( ~/.inputrc)
"\x7F": backward-delete-char
"\e[3~": delete-char
"\e[1~": beginning-of-line
"\e[4~": end-of-line
Mais plutôt que de définir ces liaisons localement pour chaque session et chaque shell, vous devriez plutôt utiliser termcap/terminfo à cette fin (plus à ce sujet plus tard).
Dans ce contexte, Putty est votre terminal.
La valeur par défaut pour Putty est de définir TERM pour votre session sur "xterm". Il le fait parce qu'il est raisonnablement compatible xterm. xterm
n'est pas une référence à un terminal mais au programme Xterm.
Configuration de PuTTY
Connection -> Data -> Terminal-type string: `xterm`
Une fois connecté, vous pouvez vérifier que ce paramètre s'applique à votre session :
echo $TERM
xterm
Si $TERM ne correspond pas à ce que vous avez défini dans Putty, vous avez peut-être défini un remplacement dans vos fichiers rc. Notez l'avertissement pour /bin/sh
dans ~/.profile
:
# Setting TERM is normally done through /etc/ttys. Do only override
# if you're sure that you'll never log in via telnet or xterm or a
# serial line.
# TERM=xterm; export TERM
Parce que nous n'utilisons plus beaucoup de DEC VT100 physiques xterm
est ce que vous verrez de nombreux endroits.
Même si vous gardez juste TERM
comme xterm
vous obtiendrez une sortie couleur avec Putty et FreeBSD par défaut en tant que ls -G
fonctionnera.
Certains vous recommanderont de définir TERM
à xterm-color
, xterm-256
ou rxvt-256color
pour obtenir une prise en charge des couleurs "correcte".
Mais rappelez-vous : Tous ces TERM
magiques les valeurs ne sont que des mappages dans une base de données. Une raison xterm
est tellement répandu aujourd'hui que certains programmes et scripts vérifient si $TERM
commence par xterm
(ce qui est une idée horrible).
Cela nous ramène ensuite à termcap qui est la valeur par défaut sur FreeBSD. Si vous souhaitez utiliser terminfo, vous devrez installer devel/ncurses. Pour plus d'informations à ce sujet, consultez :Comment puis-je utiliser les entrées terminfo sur FreeBSD ?
Vous pouvez trouver la source de la base de données termcap dans le fichier texte /usr/share/misc/termcap
. Si vous apportez des modifications à ce fichier, vous devez exécuter cap_mkdb
pour que le système reconnaisse le changement. Vous trouverez ici la réponse à votre énigme. Il y a un TERM
explicite paramètre pour Putty nommé :putty
.
FreeBSD a alors fait le choix de ne pas modifier les paramètres de xterm
pour correspondre au comportement de Putty (probablement en raison de problèmes de combatibilité). Mais ils ont été assez gentils pour fournir un cadre à Putty.
Donc, si vous modifiez le paramètre par défaut de Putty pour Terminal-type string:
de xterm
à putty
alors cela est reflété dans TERM
lorsque vous vous connectez. Et le termcap FreeBSD par défaut a une entrée pour cela.
Et par magie et sans toucher à beaucoup de fichiers rc, vous avez maintenant des touches fléchées qui fonctionnent (j'avais ça aussi avec xterm) mais aussi des déplacements Home/End vers le début/la fin de la ligne et des suppressions Del(ete).
Bonus :
Il semble que la définition de mastic par défaut ne prenne pas en charge les 256 couleurs. Vous pouvez ensuite modifier votre termcap et ajouter ces deux lignes (et exécuter cap_mkdb) :
putty-256color:\
:pa#32767:Co#256:tc=putty:
Ensuite, vous pouvez définir votre TERM
à putty-256color
. Scott Robison a suggéré que cela devrait être ajouté - mais le changement n'a pas été repris par FreeBSD. Je ne trouve plus ce PR dans la base de données.
Bonus 2 :
Si vous préférez conserver TERM
comme xterm
alors vous devriez passer du temps à configurer Putty pour qu'il corresponde à ce que FreeBSD attend du terminal xterm.
Si vous allez dans les paramètres Terminal -> Clavier dans le cadre Les touches Début et Fin vous pouvez changer "Standard" en "rxvt".
Avec ce changement, vous remarquerez que la touche Accueil fonctionne sur la ligne de commande (se déplace au début de la ligne). Mais End ne fait plus rien.
Il s'agit alors de faire en sorte que Putty soit d'accord avec ce que FreeBSD attend d'un xterm. Juste pour montrer que vous pouvez aussi faire l'inverse.
En relation :comment configurer correctement l'afflux ?