4 votos

Detectar el tipo de terminal con tput

Me gustaría configurar el tipo de terminal mediante la detección de la misma. Por ejemplo, cuando me estoy conectando a un Solaris cuadro con la Masilla, el $TERM variable se establece en vt100. Me gustaría negociar este modo, cuando el emulador de terminal es PuTTY, para establecer $TERM a xterm.

Me he dado cuenta de que en ^E Masilla respuestas con PuTTY. Pero creo que el mejor método es usar tput para tratar de detectar el emulador de terminal tipo. El problema es que no pude encontrar ninguna referencia en la terminfo o tput manual de cómo hacer esto.

De lo contrario, voy a probar con algo basado en:

unset remote_term;echo $'\cE';read -rt 1 -n5 remote_term ;echo remote_term=$remote_term

1voto

Signal15 Puntos 656

Quizás esto es demasiado simple, pero si usted está preocupado acerca de su entorno de usuario (y suponiendo que todo el mundo tiene su propia cuenta, y no hay ningún loco compartir cuenta en donde un montón de personas que utilizan el mismo nombre de usuario+contraseña combo)...

Por qué no agregar algo en su propio entorno del shell archivo?

Korn (/bin/ksh) Shell (~/.kshrc)

##############################################################################
## TERM control - if we're on the console, fix it up.
TTY=` /usr/bin/tty ` # Really should call /bin/tty in HP-UX in case of S.U.M.
TTY_DEV=${TTY##*/dev/}
if [[ ${TTY_DEV} = "console" ]]; then
## Most serial-line consoles report "/dev/console" when you use 'tty'
## Since most consoles don't set their columns and rows, resulting in weird
##   stuff when we open things like 'vi', we call 'resize' (if it's present)
   if [[ -x /usr/openwin/bin/resize   ]]; then
      printf "Console...\c"
      export PATH=${PATH}:/usr/openwin/bin && \
      /usr/openwin/bin/resize >/dev/null 2>&1 && \
      printf "fixed. \n" || \
      printf "something's broke.\n"
   elif [[ -x /usr/bin/X11/resize     ]]; then
      printf "Console..."
      export PATH=${PATH}:/usr/bin/X11 && \
      /usr/bin/X11/resize >/dev/null 2>&1 && \
      printf "fixed. \n" || \
      printf "something's broke.\n"
   else
      printf "No resize binary found, check console settings.\n"
   fi
else
   TERM=xterm
fi

Bourne Again (/bin/bash Shell (~/.bashrc ~/.bash_profile)

(El código anterior debería funcionar sin problema)

Regular Bourne (/bin/sh) Shell (~/.perfil)

(El código de arriba, pero de /bin/sh no hacer variable la división, por lo que TTY_DEV tendrá que ser más creativo.)

1voto

Ninguna razón por qué usted no sólo puede establecer las opciones de conexión en la Masilla para negociar la deseada tipo de terminal?

Bajo la Masilla de configuración, haga Clic en la Conexión -> Datos y, a continuación, establezca la "Terminal de tipo cadena de caracteres" en la Terminal en la sección de Detalles para cualquier tipo de terminal que desee. La mina se establece en la norma ansi pero se puede cambiar fácilmente que a xterm.

Esto es más elegante que el de interceptar el Ctrl-E la contestación como respeta la intención del usuario para el tipo de terminal.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: