Super User is a question and answer site for computer enthusiasts and power users. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I have to set an environment variable called GDK_NATIVE_WINDOWS to fix the problem with Eclipse buttons in Ubuntu. To set the environment variable, I added the following line to ~/.pam_environment.

GDK_NATIVE_WINDOWS DEFAULT=true

Surprisingly, the environment variable doesn't get set when I echo $GDK_NATIVE_WINDOWS in a terminal. However, all other environment variables that I've listed in ~/.pam_environment are set properly. Besides, when I switch to a tty, e.g. Alt+Ctrl+F1, the environment variable gets set correctly. Can anyone tell what's wrong with setting this environment variable in ~/.pam_environment?

share|improve this question
1  
did you restart your X session? – Benjamin Bannier Apr 12 '10 at 17:24
    
Yes, I restarted my X session by logging out and in, and even restarting the machine. – reprogrammer Apr 14 '10 at 0:41

Stick to the simple "key=value" syntax in the ~/.pam_environment file. No DEFAULT, OVERRIDE, ${HOME}, no nothing. Just key=value. The man page you linked to is for pam_env.conf, only. See "man 8 pam_env" which does not promise anything else "This module can also parse a file with simple KEY=VAL pairs on separate lines.".

By the way putting something like PATH=${PATH}:more/paths in ./pam_environment is a great way to break almost any attempt to login, since the PATH gets set to ${PATH}:more/paths literally (not much to be found there). To rescue, "/bin/mv .pam_environment out_of_the_way" and re-login.

share|improve this answer

You have a space in between GDK_NATIVE_WINDOWS and DEFAULT=true . This differs from the example you linked.

Try:

GDK_NATIVE_WINDOWS=true

share|improve this answer
1  
pam_env doesn't use shell syntax. linux.die.net/man/5/pam_env.conf – Ignacio Vazquez-Abrams Apr 12 '10 at 21:53
    
Corrected, thanks. – kmarsh Apr 13 '10 at 12:10
    
@kmarsh My example matches the syntax VARIABLE [DEFAULT=[value]] [OVERRIDE=[value]] at manpages.ubuntu.com/manpages/hardy/man5/pam_env.conf.5.html. This explains the space before DEFAULT. – reprogrammer Jul 14 '12 at 19:00
1  
@reprogrammer That manpage only applies to /etc/security/pam_env.conf. ~/.pam_environment and /etc/environment use a simpler syntax. – sourcejedi Aug 28 '12 at 20:37

I think that's because when you start a terminal you are not launching a login session. it's a terminal session, and it works with different rules. I never really got the difference and the need to differentiate, but in any case I suggest you to use ~/.bash_profile and/or ~/.bashrc to achieve the same result, unless you have been suggested to use pam for specific reasons.

share|improve this answer
    
It's recommended to use .pam_environment not shell scripts. See help.ubuntu.com/community/EnvironmentVariables – reprogrammer Apr 14 '10 at 0:47

As you have identified, your environment variables should be set in ~/.pam_environment as recommended on https://help.ubuntu.com/community/EnvironmentVariables. Easier said than done ;)

It is possible that you ran into the same configuration gap that existed for me. See the workaround for encrypted home below.

My ~/.pam_environment:

PATH            DEFAULT=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:${HOME}/bin
IDEA_JDK        DEFAULT=${HOME}/Applications/jdk

Why the ugly static path? ${PATH} would not work for me. I bricked my login several times trying to work around it so I am sticking with the ugly static copy of the defaults :)

Workaround for Encrypted Home Folders

In Ubuntu releases up to and including Precise 12.04 Beta 2, if you are using an encrypted home directory you will need to modify /etc/pam.d/common-session to get it to load ~/.pam_environment. This solution apparently works for earlier releases, but I have not tested it.

Guenther Montag (g-montag) wrote on 2010-08-19:

This seems to be an issue with encrypted home directories. I added

session required pam_env.so

at the end of /etc/pam.d/common-session and now ~/.pam_environment gets read. On another system without encrypted home directories (also 10.04) the work around is not needed. Perhaps in my case the system tries to read ~/.pam_environment before it is decrypted.

share|improve this answer
    
My home folder is not encrypted. – reprogrammer Apr 5 '12 at 4:26
up vote -1 down vote accepted

It looks like it's just a bug that my environment variable is not being set.

share|improve this answer
1  
It's not a bug. That's not a valid syntax for ~/.pam_environment. See manpages.ubuntu.com/manpages/hardy/man5/pam_env.conf.5.html – Gili Jul 13 '12 at 18:25
1  
@Gili My example matches the syntax VARIABLE [DEFAULT=[value]] [OVERRIDE=[value]] at the link you posted. Note that I'm using ${} rather than @{} to refer to HOME and PATH because they are environment variables. – reprogrammer Jul 14 '12 at 18:58

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .