What is the purpose of the .xsession
file in the home folder? What should be put in there? The desktop environments don't use that file and for the X startup from the tty there is .xinitrc
.
4 Answers
If you log in in text mode then start a GUI session with xinit or with the wrapper script startx
, then xinit
does the following things:
- Start an X server (typically through the script
/etc/X11/xinit/xserverrc
). - Usually run some scripts in
/etc/X11
(typically/etc/X11/xinit/xinitrc
), depending on how it's set up. - Run
~/.xinitrc
, if it exists. If it doesn't exist, run a default client (traditionallyxterm
). - Once
~/.xinitrc
terminates, kill the X server.
If you log in in graphical mode on an X display manager (xdm, gdm, kdm, wdm, lightdm, …), traditionally, what is executed after you log in is some scripts in /etc/X11
then ~/.xsession
.
~/.xsession
has the role of ~/.profile
and ~/.xinitrc
combined: it's supposed to perform the initial startup of your session (e.g. define environment variables), then launch programs specific to the GUI (usually at least window manager).
Nowadays, most X display managers give you a choice of a session. Choosing a particular session launched a specific desktop environment, session manager, window manager. What is executed then is only that DE/SM/WM and whatever programs it chooses to start based on whatever configuration files it chooses to read. Many environments provide a “custom session” that reads the traditional ~/.xsession
.
-
3I don't know what is this "many environments", but at least kdm silently ignores the «~/.xsession» file.– Hi-AngelFeb 18, 2015 at 19:18
-
2@Hi-Angel The
.xsession
file is only read if you select a particular session type. I know that for Gdm, the upstream developers don't want to include one that runs.xsession
by default, and leave it up to each distribution, and many distributions don't bother or don't realize the need. I don't know what the kdm situation is. Feb 18, 2015 at 20:12 -
Well, you know, I found in man kdm that kdm have an own file
/etc/kde4/kdm/Xsession
to be ran as user just after login. They're lie — the file (which is present btw) never being touched by kdm, I even did removed it at all, and that didn't changed anything.– Hi-AngelFeb 19, 2015 at 4:58 -
2@Hi-Angel What Gilles means is that at your graphical login screen you'll often have a dropdown menu listing various environments. If you choose "KDE," that will start and it will ignore
.xsession
, as you described. But if, instead of "KDE," you choose "Custom session,".xsession
will be run instead of KDE. I use this, for example, because I run justxfce4-panel
and FVWM 2 as my "desktop"; if KDE were installed on a system I happened to be using, it would be completely ignored.– cjsJul 26, 2017 at 2:10 -
Xsession may setup paths. Since it's often run from startx typed at a command line, frequently all paths are already set up.– RichieHHDec 9, 2020 at 18:04
X session startup can be complicated these days. A good place to start is the script /etc/X11/Xsession
to see how things will get executed.
On my Debian/Ubuntu systems, the script /etc/X11/Xsession
sets the variable USERXSESSION=$HOME/.xsession
. Later, the script /etc/X11/Xsession.d/50x11-common_determine-startup
looks for this script and uses it as the primary session, if allowed by system policy in /etc/X11/Xsession.options
, and if no other session was requested by the display manager.
-
1Complicated is an understatement. Combined with sys specific handling of /etc/ profile etc it's a downright mess.– RichieHHDec 9, 2020 at 18:05
-
And there have been a lot of changes in the 8 years since this answer was posted (such as systemd adoption). Dec 10, 2020 at 21:35
-
@JimParis My
/etc/X11/Xsession
sets the variableUSERXSESSION=$HOME/.xsession
, used by/etc/X11/Xsession.d/50x11-common_determine-startup
. My/etc/X11/Xsession.options
hasallow-user-xsession
. But still my${HOME}/.xsession
doesn't run as I didecho "Hello Nikhil" > /home/nikhil/Desktop/a.txt
inside${HOME}/.xsession
but this file is not created when I log in after logging out! Can you please help? I am using Ubuntu 20.04.2. I want to start firefox using systemd unit and I am refering superuser.com/questions/759759/… Aug 11, 2021 at 12:47
I strongly recommend you to take a look in the book X Window system administrator's guide : for X version 11. Chapter 2 explains the purpose of .xsession
and the whole configuration process for a sample setup. Also it's a nice refresher for the whole x-window related terminology (and i hope you don't get spooked :) ). You can get the book from
Although it's rather outdated you can find a lot of information of the underlying concepts that didn't change until today and it is very legible. Moreover it is really funny to take a look at what was top notch at those days.
.xsession is the traditional startscript for the X11 environment. Nowadays with sessionmanagers like kdm it is not that much of a use anymore, but on a traditionaly set up system. This is what is run after starting X11 with startx.
-
It is one of many things depending on system and xinitrc as well as /x11 xsession– RichieHHDec 9, 2020 at 18:06