Start X at login
Related articles
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
For Bash, add the following to the bottom of ~/.bash_profile
. If the file does not exist, copy a skeleton version from /etc/skel/.bash_profile
. For Zsh, add it to ~/.zlogin
(or ~/.zprofile
) instead.
[[ -z $DISPLAY && $XDG_VTNR -eq 1 ]] && exec startx
For Fish, add the following to the bottom of your ~/.config/fish/config.fish
.
# start X at login if status --is-login if test -z "$DISPLAY" -a $XDG_VTNR = 1 exec startx end end
Using systemd
Create a service file (for example /etc/systemd/system/xinit@.service
):
[Unit] Description=startx for user %i After=x@vt7.service systemd-user-sessions.service Wants=x@vt7.service Conflicts=getty@tty7.service [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
Make sure ~/.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>&1
for debug.
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
~/.xinitrc
is read and hence pulseaudio started (see: BBS#155416) - If you would like to remain logged in when the X session ends, remove
exec
. - To redirect the output of the X session to a file, create an alias:
-
alias startx='startx &> ~/.xlog'