Can't export environment variables on X session start

6,303

~/.xinitrc is only read when you start a GUI session with startx (or otherwise calling xinit) after logging in in text mode. So that won't help you.

Whether ~/.bash_profile, ~/.profile, ~/.xprofile and ~/.xsessionrc are read when logging in with a display manager depends on how the display manager is configured and what session type you select when logging in. As far as I can tell, at least on Debian jessie (I haven't looked if this has changed since then):

  • /usr/share/lightdm/lightdm.conf.d/01_debian.conf tells Lightdm to use /etc/X11/Xsession as the session startup script.
  • /etc/X11/Xsession (via /etc/X11/Xsession.d/40x11-common_xsessionrc) loads $USERXSESSIONRC which is ~/.xsessionrc.

So ~/.xsessionrc should work, at least on Debian jessie.

On Debian, ~/.pam_environment should work to set environment variables for any login method.

Alternatively, you can set environment variables and run programs from Awesome via ~/.config/awesome/rc.lua (call posix.setenv("QT_STYLE_OVERRIDE", "GTK+") to set an environment variable).

Share:
6,303

Related videos on Youtube

Red
Author by

Red

Updated on September 18, 2022

Comments

  • Red
    Red over 1 year

    My setup is:

    • Debian testing (stretch), up to date
    • LightDM with autologin enabled
    • Awesome window manager
    • bash, in ROXTerm or XTerm

    I don't seem to be able to set own environment variables and get it sourced at X session startup. Here's what I tried:

    • using ~/.bash_profile worked on my previous OS, but I learned from this answer that it isn't sourced on X startup in Debian and it's derivatives
    • I did mv .bash_profile .profile as suggested, but it didn't work too because, as I learned later from here, ~/.profile isn't sourced when display manager launches X session
    • the answer from above question suggests use of ~/.xsessionrc. This also didn't work because, as I learned from here, it is sourced only by /etc/X11/Xsession which LightDM doesn't execute
    • Arch Linux wiki claims that LightDM sources ~/.xprofile files, but that didn't work too.

    Trying advice from that last site, I made my ~/.xinitrc like this:

    export QT_STYLE_OVERRIDE=GTK+
    [ -f ~/.xprofile ] && source ~/.xprofile
    ~/.screenlayout/default.sh
    awesome
    

    And my ~/.xprofile like this:

    [[ -f ~/.bashrc ]] && . ~/.bashrc
    source /etc/bash_completion.d/virtualenvwrapper
    
    export GDK_NATIVE_WINDOWS=1
    export WORKON_HOME=$HOME/env/
    

    Sadly, after logging in and starting X session, I see that none of these variables are set:

    red@localhost:~$ echo $QT_STYLE_OVERRIDE
    
    red@localhost:~$ echo $GDK_NATIVE_WINDOWS
    
    red@localhost:~$ echo $WORKON_HOME
    

    How do I set them up properly?

    • Admin
      Admin about 8 years
      Actually, none of these has any effect. I also checked that awesome isn't run from ~/.xinitrc anymore, but configured with /usr/share/xsessions/awesome.desktop file that comes with package. This doesn't bring me any closer though. I also tried ~/.pam_environment which is supposed to work with LightDM, but no luck either.
  • u_Ltd.
    u_Ltd. over 4 years
    This does not work for LD_PRELOAD, LD_LIBRARY_PATH because ssh_agent is started. See man ssh_agent. TMPDIR is passed in /etc/X11/Xsession.d/90x11-common_ssh-agent , for the LD_* variables you have to amend 90x11-common_ssh-agent.