Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

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

5 Answers 5

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 0 down vote accepted

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

share|improve this answer
    
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
    
@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

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

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.