On a clean install of Ubuntu 12.10, the default gnome-terminal is reporting $TERM to be xterm where it should really be reporting xterm-256color. What is the best way of changing this? I'm avoiding putting this in my .bashrc as that's just asking for trouble.
3 Answers
You were well advised not to change your startup scripts, specially ~/.bashrc. Any "terminal detection" using current $TERM or $COLORTERM in ~/.profile is merely a guess, and may, as you said, cause trouble when using other terminals (say, Putty or xterm). The terminal emulator is supposed to set $TERM, and this should not  be changed from within the shell.
Gnome terminal, AFAIK, does not offer a configuration to change its TERM, but it does allow you to change your startup command, and that's all you need. Here is the trick:
Profile Preferences => Title and Command => Run a custom command instead of my shell
Then use the following command:
env TERM=xterm-256color /bin/bash
Just replace /bin/bash with your preferred shell if it's different. And no, you can't use "$SHELL" in that line for shell auto-detection ;) You have to hard-code it
 
    
    - 20,726
For connecting with a terminal that's not able to do 256 colors.
It'd be far better to detect the terminal specifically with $COLORTERM. Look for gnome-terminal, xfce4-terminal, etc, and then set the $TERM variable to xterm-256color. 
I do it with:
if [ "$COLORTERM" = "gnome-terminal" ] || [ "$COLORTERM" = "xfce4-terminal" ]
then
    export TERM=xterm-256color
elif [ "$COLORTERM" = "rxvt-xpm" ]
then
    export TERM=rxvt-256color
fi
 
    
    - 20,726
 
    
    - 121
While it's true that terminfo has xterm+256color (/usr/share/terminfo/x/xterm+256color), termcap has just xterm (/usr/share/vte/termcap/xterm), so changing $TERM shouldn't be advisable.
Anyhow, $TERM is not set by gnome-terminal, but by vte. The default value for that environment variable can be changed either at compile time (giving an option to the configure script) or by calling the vte_pty_set_term() function. Looking at the sources of gnome-terminal, I see that vte_pty_set_term gets never called, so I can say that there are no ways to modify $TERM by editing gnome-terminal's settings.
What you have to do is to place the following piece of code in your ~/.profile:
if [ "$TERM" = "xterm" ]
then
    export TERM=xterm-256color
fi
 
    
    - 16,126
