Start X at login
This article explains how to have the X server start automatically right after logging in at a virtual terminal. This is achieved by running the startx command, whose behaviour can be customized as described in the xinitrc article, for example for choosing what window manager to launch. Alternatively, a display manager can be used to start X automatically and provide a graphical login screen.
Shell profile files
[[ -z $DISPLAY && $XDG_VTNR -eq 1 ]] && exec startx
- You can replace the
-eq 1comparison with one like
-le 3(for vt1 to vt3) if you want to use graphical logins on more than one VT.
- X must always be run on the same tty where the login occurred, to preserve the logind session. This is handled by the default
xinitmay be faster than
startx, but needs additional parameter such as
For Fish, add the following to the bottom of your
# start X at login if status --is-login if test -z "$DISPLAY" -a $XDG_VTNR = 1 exec startx end end
Tips and tricks
- This method can be combined with automatic login to virtual console. When doing this you have to set correct dependencies for the autologin systemd service to ensure that dbus is started before
~/.xinitrcis read and hence pulseaudio started (see: BBS#155416)
- If you would like to remain logged in when the X session ends, remove
- To redirect the output of the X session to a file, create an alias:
alias startx='startx &> ~/.xlog'
- Note: Redirecting stderr (
startx &>) breaks rootless startup, see Xorg#Rootless Xorg (v1.16).
Create a service file (for example
[Unit] Description=startx for user %i Afterfirstname.lastname@example.org systemd-user-sessions.service Wantsemail@example.com Conflictsfirstname.lastname@example.org [Service] User=%i TTYPath=/dev/tty7 PAMName=login Environment=DISPLAY=:0 WorkingDirectory=/home/%I Nice=0 ExecStart=/bin/bash -l -c "cd; startx >/dev/null 2>&1" [Install] WantedBy=graphical.target
~.xinitrc exists and is properly setup.
Then enable the service
sudo systemctl enable xinit@your-user-name / run it
sudo systemctl start xinit@your-user-name.
- hint* remove
>/dev/null 2>&1for debug.