Linux Mint .profile TERM variable not set

Posted on

Problem :

I have a custom script in my .profile file, with added code and nothing taken away, however it is still replying with a TERM ENVIRONMENT VARIABLE NOT SET error. However, if I run the command echo $TERM in the terminal after boot it is set to xterm-256color. I’m open to even suppressing the error instead of solving it since it does not effect my computer after the boot.

Here is the script in .profile:

clear
# ~/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.
# see /usr/share/doc/bash/examples/startup-files for examples.
# the files are located in the bash-doc package.

# the default umask is set in /etc/profile; for setting the umask
# for ssh logins, install and configure the libpam-umask package.
#umask 022

# if running bash
if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
    . "$HOME/.bashrc"
    fi
fi

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/.local/bin" ] ; then
    PATH="$HOME/.local/bin:$PATH"
fi


# --- EVERYTHING ABOVE HERE IS DEFAULT AND NOT CHANGED ---


wget -q --spider http://google.com
if [ $? -eq 0 ]; then
    (
     echo )
    else
    (
    echo Aquiring Internet Connection . . .
    sleep 6)
    fi
wget -q --spider http://google.com
if [ $? -eq 0 ]; then
    (
     echo )
    else
    (
    sleep 5)
    fi

wget -q --spider http://google.com
if [ $? -eq 0 ]; then
    echo ==========================================================================================================================================
    echo WELCOME LUKAKA                                     LOCAL WEATHER REPORT    VIA WTTR.IN                                      Running XFCE
    echo ==========================================================================================================================================
    curl wttr.in
    echo ==========================================================================================================================================
    echo
    echo -e "33[1;32mStatus for play.wildcraftmc.com [Wildcraft Survival+ Server]   33[0m" 
    mcstatus play.wildcraftmc.com status >wildcraft.txt
    sed -n 1p wildcraft.txt
    tail -n -1 wildcraft.txt
    echo ==========================================================================================================================================
    echo -e "33[1;32mStatus For Mc.Starlegacy.Net [Starlegacy Space Survival]   33[0m" 
    mcstatus mc.starlegacy.net status >Star-Legacy.txt
    sed -n 1p Star-Legacy.txt
    tail -n -1 Star-Legacy.txt
    echo ==========================================================================================================================================
    echo -e "33[1;32mStatus For Jectile.com [Shoota COD Server]   33[0m" 
    mcstatus Jectile.com status >Star-Legacy.txt
    sed -n 1p Star-Legacy.txt
    tail -n -1 Star-Legacy.txt
    echo ==========================================================================================================================================
    rm Star-Legacy.txt
    rm wildcraft.txt
else
    echo Connection Failed.
fi

echo -n "Would you like to start the GUI (y/n)? "
old_stty_cfg=$(stty -g)
stty raw -echo ; answer=$(head -c 1) ; stty $old_stty_cfg # Careful playing with stty
if echo "$answer" | grep -iq "^y" ;then
    sudo systemctl start lightdm
    onedrive-d start
    xinput set-prop 11 317 -1
else
    echo No
    echo -e "33[0;33mskipping GUI. The following service(s) will not run: onedrive-d, lightdm, Minecraft-Lukaka, xinput 11.33[0m"
    fi

This is the error message: err

For context, what my script does is check for an internet connection, if it is there it wgets wttr.in (weather) and uses an official Minecraft tool to check the status on some servers.

Solution :

So once your script gets to the point where it asks you if you want to start the GUI, if you say yes it runs 3 more commands:

sudo systemctl start lightdm

onedrive-d start

xinput set-prop 11 317 -1

Now, if you know the errors are harmless, you can redirect them into nothingless using 2>/dev/null after the command causing the error, such as

sudo systemctl start lightdm 2>/dev/null

However, it’d be more advisable to run each of these commands in turn, review the errors that show and fix them if possible.

You should check whether you’re running in a terminal before printing messages or running commands that require a terminal. This can be done, for example, using:

if [ -t 1 ] # check if stdout is a terminal
then
  # in a TTY, do stuff
fi

THe GUI login process sources /etc/profile and ~/.profile so that any environment variables you may need are set. But this sourcing isn’t done in a terminal, so TERM isn’t set. When you open a terminal, and run echo $TERM, the terminal has set TERM for processes started by it, so you get a value.

IMO you should wrap all of whatever you added in the if check given above, since none of it is particular relevant when running in a GUI.

Leave a Reply

Your email address will not be published. Required fields are marked *