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
-
There is an option in those settings to "When Command Exits:." The options are "Exit the Terminal," "restart the command," and " hold the terminal open." Which should I select? Commented Apr 9, 2019 at 21:50
-
@CalebJay: whichever you prefer, that option is not related to terminal colors. What to do when the command ends is purely a matter of preference. Commented Apr 23, 2019 at 17:38
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
-
5Just be aware that Gnome Terminal from 3.13 onwards do not set
COLORTERM
anymore. Commented Jan 29, 2015 at 11:55 -
3For versions that no longer set
COLORTERM
you can rely onVTE_VERSION
.– egmontCommented Apr 19, 2015 at 15:37
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
-
==
is a bash-only syntax, do not use it for snippets intended to be sourced bysh
(which is the case with~/.profile
in DEs). Also, the "x$.." syntax is not needed as you are correctly quoting the var expansion. Commented Jan 28, 2015 at 11:03 -
-
I tried, but AU requires changes to be more than 6 chars, hence the comment Commented Jan 28, 2015 at 11:19
-
It does not work,the value set in .profile gets overridden.– Hibou57Commented May 7, 2020 at 19:29
-
@Hibou57: something is resetting it. Run
bash -xi
to see what is going on Commented May 8, 2020 at 18:34
xterm
is wrong because most applications won't work in 256-color mode unless it'sxterm-256color
orscreen-256color
(vim and tmux being the main ones I care about). Like @Freddy I would prefer not to set these in my shell profile, because I may be connecting from a different terminal type over SSH, and because it's really the terminal emulator's job to set this. I'm amazed that gnome-terminal doesn't provide multiple emulations.xterm-256colors
.