Difference between revisions of "Automatic login to virtual console"

From ArchWiki
Jump to: navigation, search
(With systemd)
m (With systemd)
Line 100: Line 100:
 
[...]
 
[...]
 
}}
 
}}
The idea behind {{ic|1=Type=simple}} is to avoid delaying the execution of agetty until all jobs (state change requests to units) are completed. See {{ic|man systemd.service}} for more info  
+
The idea behind {{ic|1=Type=simple}} is to avoid delaying the execution of agetty until all jobs (state change requests to units) are completed. See {{ic|man systemd.service}} for more info.
  
 
For security reasons you may also want to change {{ic|1=Restart=always}} to {{ic|1=Restart=no}}.
 
For security reasons you may also want to change {{ic|1=Restart=always}} to {{ic|1=Restart=no}}.

Revision as of 21:04, 26 July 2012

Summary help replacing me
Describes how to automatically log in to a virtual console.
Related
Display Manager
Start X at Boot

This article describes how to automatically log in to a virtual console at the end of the boot process. This article only covers console log-ins; methods for starting an X server are described in Start X at Boot.

With default init

Using agetty

This is the preferred (i.e. clean) method. Edit /etc/inittab like this:

/etc/inittab
c1:2345:respawn:/sbin/agetty -a USERNAME -8 -s 38400 tty1 linux
c2:2345:respawn:/sbin/agetty -8 -s 38400 tty2 linux
c3:2345:respawn:/sbin/agetty -8 -s 38400 tty3 linux
c4:2345:respawn:/sbin/agetty -8 -s 38400 tty4 linux
c5:2345:respawn:/sbin/agetty -8 -s 38400 tty5 linux
c6:2345:respawn:/sbin/agetty -8 -s 38400 tty6 linux

to automatically log in USERNAME to the first console (tty1).

Using mingetty

Note: Although a mingetty derivative, fgettyAUR does not support the --autologin parameter.

Alternatively, you can install the mingetty package from the official repositories. Mingetty is designed to be a minimal getty and allows automatic log-ins:

/etc/inittab
c1:2345:respawn:/sbin/mingetty --autologin USERNAME tty1 linux
c2:2345:respawn:/sbin/agetty -8 -s 38400 tty2 linux
c3:2345:respawn:/sbin/agetty -8 -s 38400 tty3 linux
c4:2345:respawn:/sbin/agetty -8 -s 38400 tty4 linux
c5:2345:respawn:/sbin/agetty -8 -s 38400 tty5 linux
c6:2345:respawn:/sbin/agetty -8 -s 38400 tty6 linux

Using the above methods, you will get a re-login loop when trying to log out. If you wish to only login at boot, use the following:

Note: You will not be able to access any other virtual consoles until after logging out.
/etc/inittab
a1:2345:wait:/sbin/mingetty --autologin USERNAME tty1 linux
c1:2345:respawn:/sbin/agetty -8 -s 38400 tty1 linux
c2:2345:respawn:/sbin/agetty -8 -s 38400 tty2 linux
c3:2345:respawn:/sbin/agetty -8 -s 38400 tty3 linux
c4:2345:respawn:/sbin/agetty -8 -s 38400 tty4 linux
c5:2345:respawn:/sbin/agetty -8 -s 38400 tty5 linux
c6:2345:respawn:/sbin/agetty -8 -s 38400 tty6 linux

Using a C login program

As an alternative, a C login program can be written:

autologin.c
#include <unistd.h>

int main(void) {
   execlp("login", "login", "-f", "USERNAME", NULL);
}

Here, the C function execlp executes the command login -f USERNAME.

The program must be compiled and copied to an appropriate location:

$ gcc -o autologin autologin.c
# cp autologin /usr/local/sbin/

Finally, tell /etc/inittab to use it:

/etc/inittab
c1:2345:respawn:/sbin/agetty -n -l /usr/local/sbin/autologin -s 38400 tty1 linux
c2:2345:respawn:/sbin/agetty -8 -s 38400 tty2 linux
c3:2345:respawn:/sbin/agetty -8 -s 38400 tty3 linux
c4:2345:respawn:/sbin/agetty -8 -s 38400 tty4 linux
c5:2345:respawn:/sbin/agetty -8 -s 38400 tty5 linux
c6:2345:respawn:/sbin/agetty -8 -s 38400 tty6 linux

With systemd

Merge-arrows-2.pngThis article or section is a candidate for merging with Systemd.Merge-arrows-2.png

Notes: This section should merged to Systemd and leave a link here. (Discuss in Talk:Automatic login to virtual console#)

Create a new service file similar to getty@.service by copying it to /etc/systemd/system/:

# cp /usr/lib/systemd/system/getty@.service /etc/systemd/system/autologin@.service
Note: /etc/systemd/system/ takes precedence over /usr/lib/systemd/system/

Once created you can link the new autologin@.service to your chosen "target" tty, e.g. tty1, tty2, [...] tty8, etc:

# ln -s /etc/systemd/system/autologin@.service /etc/systemd/system/getty.target.wants/getty@tty1.service

Next, change the value of ExecStart and either remove the line Type=idle or change it to Type=simple (the default) in autologin@.service like this:

/etc/systemd/system/autologin@.service
[Service]
[...]
ExecStart=-/sbin/agetty --noclear -a USERNAME %I 38400
Type=idle
[...]

The idea behind Type=simple is to avoid delaying the execution of agetty until all jobs (state change requests to units) are completed. See man systemd.service for more info.

For security reasons you may also want to change Restart=always to Restart=no.

Finally you should reload the daemons and start the service:

# systemctl daemon-reload
# systemctl start getty@tty1.service