Estoy usando FreeBSD 11 con PuTTY para SSH. Los códigos de las teclas del teclado no parecen estar configurados correctamente; por ejemplo, emite un pitido en la flecha hacia arriba e inserta '~' para la mayoría de las teclas de navegación, incluidas las funciones básicas como las flechas y la tecla Eliminar. El teclado es un teclado inglés británico estándar. Escribir es un verdadero fastidio.
He leído varios hilos sobre la configuración de códigos clave, tanto en rc como en shell, así que sé que puedo configurarlo de esa manera como último recurso.
Pero sería muy extraño que un cliente con tanta capacidad de configuración y un sistema operativo con un uso tan amplio, no tenga alguna opción/configuración de terminal en común que ambos "simplemente entiendan", que puedo configurar en ambos y listo:el todas las teclas (o la mayoría) funcionan. El problema es que no tengo idea de cómo encontrarlo y, cuando lo encuentro, cómo configurarlo para todas las sesiones futuras.
Entiendo cómo encontrar el código clave que envía el terminal para una clave individual, por lo que podría configurar mis claves de esa manera, una por una. Pero me gustaría encontrar configuraciones básicas de terminal para mi shell rc y para PuTTY, que entiendan la mayor cantidad posible de claves, por lo que solo tengo que configurar algunas excepciones si las necesito.
¿Cómo puedo hacer esto?
Respuesta aceptada:
Hay tantas perillas para girar y girar. Y muchos consejos en Internet la gente los sigue ciegamente. Como siempre, muchos caminos a Roma, pero cuando sabes cómo se conectan las cosas, son muy simples.
La respuesta ultracorta es:
Cambie la cadena de terminal en Putty de xterm
a putty
(en Conexión -> Datos -> Cadena de tipo terminal).
El escollo típico a evitar:
Asegúrese de no configurar TERM
en otra parte de sus archivos rc.
La respuesta un poco más larga:
Primero, comenzaría asegurándome de que realmente está utilizando los valores predeterminados. Desde mi computadora portátil personal con Windows 10 usando el teclado DK (y mapeo), me conecto a una configuración de FreeBSD 11.1 con mapeo DK. En mi caso, las teclas de flecha funcionan como se esperaba en la línea de comandos. Se mueve hacia la izquierda/derecha en la línea actual. Arriba/Abajo recorre el historial de comandos.
He verificado esto tanto para /bin/sh (shell de usuario predeterminado) como para /bin/tcsh (shell de raíz predeterminado). Puedes leer sobre conchas.
Escribe que sabe cómo puede hacer su mapeo de teclas en el archivo shell rc. Muchas sugerencias sobre cómo hacer esto están flotando. Pero por lo general no es lo que debe hacer.
Encontrará sugerencias como esta para combinaciones de teclas tcsh:
# Del(ete), Home and End
bindkey "\e[3~" delete-char
bindkey "\e[1~" beginning-of-line
bindkey "\e[4~" end-of-line
Y sugerencias como esta para bash ( ~/.inputrc)
"\x7F": backward-delete-char
"\e[3~": delete-char
"\e[1~": beginning-of-line
"\e[4~": end-of-line
Pero en lugar de configurar estos enlaces localmente para cada sesión y cada shell, debería usar termcap/terminfo para este propósito (más sobre esto más adelante).
En este contexto Putty es tu terminal.
El valor predeterminado para Putty es establecer TERM para su sesión en "xterm". Lo hace porque es razonablemente compatible con xterm. xterm
no es una referencia a ningún terminal sino al programa Xterm.
Configuración de PuTTY
Connection -> Data -> Terminal-type string: `xterm`
Cuando haya iniciado sesión, puede verificar que esta configuración se refleja en su sesión:
echo $TERM
xterm
Si $TERM no coincide con lo que configuró en Putty, es posible que haya configurado una anulación en sus archivos rc. Observe la advertencia para /bin/sh
en ~/.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
Porque ya no usamos muchos DEC VT100 físicos xterm
es lo que verás en muchos lugares.
Incluso si mantienes TERM
como xterm
obtendrá una salida de color con Putty y FreeBSD predeterminados como ls -G
funcionará.
Algunos recomendarán que establezca TERM
a xterm-color
, xterm-256
o rxvt-256color
para obtener el soporte de color "adecuado".
Pero recuerda: Toda esta magia TERM
los valores son solo asignaciones en una base de datos. Una razón xterm
es tan frecuente hoy en día es que algunos programas y secuencias de comandos comprueban si $TERM
comienza con xterm
(que es una idea horrible).
Esto nos lleva de vuelta a termcap, que es el predeterminado en FreeBSD. Si desea utilizar terminfo, deberá instalar devel/ncurses. Para obtener más información sobre esto, consulte:¿Cómo puedo usar las entradas de terminfo en FreeBSD?
Puede encontrar la fuente de la base de datos termcap en el archivo de texto /usr/share/misc/termcap
. Si realiza cambios en este archivo, debe ejecutar cap_mkdb
para que el sistema reconozca el cambio. Aquí encontrarás la respuesta a tu enigma. Hay un TERM
explícito configuración para Putty llamada:putty
.
FreeBSD entonces tomó la decisión de no cambiar la configuración de xterm
para que coincida con el comportamiento de Putty (probablemente debido a problemas de combatibilidad). Pero han sido lo suficientemente amables como para proporcionar un escenario para Putty.
Entonces, si cambia la configuración predeterminada de Putty para Terminal-type string:
de xterm
a putty
entonces esto se refleja en TERM
cuando inicia sesión. Y el termcap predeterminado de FreeBSD tiene una entrada para esto.
Y por arte de magia y sin tocar muchos archivos rc, ahora tiene teclas de flecha que funcionan (también las tenía con xterm), pero también Inicio/Fin se mueve al inicio/final de línea y Borrar (eliminar).
Bonificación:
Parece que la definición de masilla predeterminada no admite los 256 colores. Luego puede modificar su termcap y agregar estas dos líneas (y ejecutar cap_mkdb):
putty-256color:\
:pa#32767:Co#256:tc=putty:
Luego puede establecer su TERM
a putty-256color
. Scott Robison sugirió que esto debería agregarse, pero FreeBSD no ha recogido el cambio. Ya no puedo encontrar este PR en la base de datos.
Bonificación 2:
Si prefiere mantener TERM
como xterm
entonces debería dedicar tiempo a configurar Putty para que coincida con lo que FreeBSD espera de la terminal xterm.
Si vas a la configuración Terminal -> Teclado en la configuración Las teclas Inicio y Fin puede cambiar "Estándar" a "rxvt".
Con este cambio, notará que la tecla Inicio funciona en la línea de comando (se mueve al inicio de la línea). Pero End ahora no hace nada.
Entonces es una cuestión de hacer que Putty esté de acuerdo con lo que FreeBSD espera de un xterm. Solo para demostrar que también puedes ir al revés.
Relacionado:¿cómo configurar la afluencia correctamente?