How can I set environment variables for a graphical login on linux?

You can always put them in .profile, so they should apply for any login.

Problems occur however, if a .bash_login exists: In that case, bash won't read .profile.

If you want your variables from .profile to apply both in bash and for other logins, don't use .bash_login! Put bash specific variables in .bashrc instead.

Or alternatively, include .profile from .bash_login


My .profile does more than just set environment variables so I've split off the environment setting tasks to a .setenv file which only sets the environment. To get it to set the environment for X11 on Debian, I added a .xsessionrc in my home with:

. ~/.setenv

The file that causes .xsessionrc to be sourced is /etc/X11/Xsession.d/40x11-common_xsessionrc.

Using the files that bash uses to set its environment did not do what I want. Sure, if I started a bash shell in X11, I'd get the environment I wanted. However, I need to have my PATH set so that my desktop environment will run the software I want. For instance, I often use custom versions of Firefox, installed outside the usual paths. I want my desktop environment to start the proper version rather than use whatever it can find on the default paths. To do this, PATH must be set before the desktop environment starts.