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

15

5

I'm looking for a way to set arbitrary environment variables for my graphical login on linux. I am not talking about starting a terminal and exporting environment variables within the terminal, because those variables only exist within that one terminal. I want to know how to set an environment variable that will apply to all programs started in my graphical session.

In other words, what's the Xorg equivalent of ~/.bash_login?

Ryan C. Thompson

Posted 2010-03-18T07:11:07.417

Reputation: 10 085

Answers

10

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

Chris Lercher

Posted 2010-03-18T07:11:07.417

Reputation: 592

Thanks, .profile worked. – Ryan C. Thompson – 2010-03-18T18:05:22.543

1Also, .profile is really nice because I can put any bash code I want to in it. So I cna add to existing environment variables, and do other stuff entirely. – Ryan C. Thompson – 2010-03-22T22:09:58.597

1It seems that for KDE you need to put this in ~/.kde/env/ and end it with .sh. See the startkde manpage. – Ryan C. Thompson – 2010-07-11T05:03:35.697

2Actually, this seems a bit more complicated. It depends on your choices distribution, desktop environment, and even your login shell. For Gnome on Ubuntu 10.04, you have to put your setup script in ~/.gnomerc, as shown in /etc/X11/Xsession.d/55gnome-session_gnomerc.KDE reads the profile script for whichever shell is your login shell. If SHELL=bash, then it reads ~/.profile. If SHELL=zsh, then it reads ~/.zprofile. I don't know what it does for other shells. – Ryan C. Thompson – 2010-08-27T19:20:37.937

4

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.

Louis

Posted 2010-03-18T07:11:07.417

Reputation: 197

0

Xorg itself doesn't have one, since it doesn't start your programs - it would be whatever display manager (gdm, xdm, xinit, startx, etc.) or session manager (gnome-session, KDE, etc.) you use, since those are the parents of your desktop session processes. Unfortunately, there's a variety of those, each with different startup scripts/dotfiles, so there is no one-size-fits-all answer. (Under X's client/server model, the X server may not even be on the same machine as the clients, and it's often running as root instead of you, so is the wrong place for settings like environment variables.)

alanc

Posted 2010-03-18T07:11:07.417

Reputation: 1 032

I know that Xorg itself isn't what I want to look at. I just want to know how to set my environment variables in my X session. – Ryan C. Thompson – 2010-03-19T19:10:00.970