Automatic login to virtual console
Template:Article summary start Template:Article summary text Template:Article summary heading Template:Article summary wiki Template:Article summary wiki Template:Article summary end
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.
Contents
With inittab
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
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 relog loop when trying to log out. If you wish to only login at boot, use the following:
/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
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
/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
in autologin@.service
like this:
/etc/systemd/system/autologin@.service
[Service] [...] ExecStart=-/sbin/agetty -a USERNAME %I 38400 [...]
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