Difference between revisions of "Start X at login"

From ArchWiki
Jump to: navigation, search
(Rewrote shell config to make it simpler and to avoid requiring $DISPLAY be empty. Also general neatness rewrite.)
(Shell profile files: the note refers to the bash/zsh solution; bash and zsh share the code template)
(10 intermediate revisions by 5 users not shown)
Line 20: Line 20:
 
{{Article summary end}}
 
{{Article summary end}}
  
A [[Display Manager|display manager]] can be used to provide a login screen and start the [[X server]]. This article explains how this can be done using an existing virtual terminal.
+
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.
  
To manually start X, {{ic|startx}} is used, which will execute {{ic|~/.xinitrc}}, which may be customized to start the window manager of choice as described in the [[xinitrc]] article.
+
== Shell profile files ==
  
== Shell RCConfig File ==
+
{{Note|These solutions run X on the same tty used to login, which is required in order to maintain the login session.}}
  
To easily accomplish this, add to your shell's rc config:
+
* For [[Bash]], add the following to the bottom of {{ic|~/.bash_profile}}. If the file does not exist, copy a skeleton version from {{ic|/etc/skel/.bash_profile}}. <br> For [[Zsh]], add it to {{ic|~/.zprofile}} instead.
* Bash - {{ic|~/.bashrc}}
+
{{bc|1=<nowiki>
* Zsh - {{ic|~/.zshrc}}
+
[[ -z $DISPLAY && $XDG_VTNR -eq 1 ]] && exec startx
* Csh - {{ic|~/.cshrc}}
+
</nowiki>}}
* Ksh - {{ic|~/.kshrc}}
+
 
 +
{{Note|
 +
* You can replace the {{ic|-eq 1}} comparison with one like {{ic|-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 {{ic|/etc/X11/xinit/xserverrc}}.
 +
}}
  
The following:
+
* For [[Fish]], add the following to the bottom of your {{ic|~/.config/fish/config.fish}}.
 
{{bc|1=<nowiki>
 
{{bc|1=<nowiki>
[[ $TTY == "/dev/tty1" ]] && exec startx
+
# start X at login
 +
if status --is-login
 +
    if test -z "$DISPLAY" -a $XDG_VTNR = 1
 +
        exec startx
 +
    end
 +
end
 
</nowiki>}}
 
</nowiki>}}
  
 
== Tips ==
 
== Tips ==
  
*This method can be combined with [[automatic login to virtual console]].
+
* 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 {{ic|~/.xinitrc}} is read and hence pulseaudio started (see: [https://bbs.archlinux.org/viewtopic.php?id=155416 BBS#155416])
{{Warning|1=When doing so, if you use [[PulseAudio]] remember to set correct dependencies for the autologin systemd service to ensure that dbus is started before {{ic|~/.xinitrc}} is read (see: [https://bbs.archlinux.org/viewtopic.php?id=155416 BBS#155416])}}
+
 
* If you would like to remain logged in when the X session ends, remove {{ic|exec}}.
 
* If you would like to remain logged in when the X session ends, remove {{ic|exec}}.
 
* To redirect the output of the X session to a file, create an [[alias]]:
 
* To redirect the output of the X session to a file, create an [[alias]]:
: {{bc|1=alias startx='startx &> ~/.xlog'}}
+
: {{bc|1=alias startx='startx & > ~/.xlog'}}
* If you have a profile config ({{ic|~/.bash_profile}}, {{ic|~/.zprofile}}, etc...) place it in there instead to only run on successful logins.
+

Revision as of 09:46, 20 June 2013

Summary help replacing me
Starting X automatically at login to a virtual terminal.
Related
systemd/User
Automatic login to virtual console
Display Manager
Silent boot
Xinitrc

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

Note: These solutions run X on the same tty used to login, which is required in order to maintain the login session.
  • 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 ~/.zprofile instead.
[[ -z $DISPLAY && $XDG_VTNR -eq 1 ]] && exec startx
Note:
  • You can replace the -eq 1 comparison 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 /etc/X11/xinit/xserverrc.
  • 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

Tips

  • 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'