Difference between revisions of "Automatic login to virtual console"

From ArchWiki
Jump to: navigation, search
(With systemd: Megre request.)
(With systemd)
Line 92: Line 92:
 
  # ln -s /etc/systemd/system/autologin@.service /etc/systemd/system/getty.target.wants/getty@tty1.service
 
  # ln -s /etc/systemd/system/autologin@.service /etc/systemd/system/getty.target.wants/getty@tty1.service
  
Next, change the value of {{ic|ExecStart}} in {{ic|autologin@.service}} like this:
+
Next, change the value of {{ic|ExecStart}} and either remove the line {{ic|1=Type=idle}} or change it to {{ic|1=Type=simple}} (the default) in {{ic|autologin@.service}} like this:
 
{{hc|/etc/systemd/system/autologin@.service|
 
{{hc|/etc/systemd/system/autologin@.service|
[Service]
+
2=[Service]
 
[...]
 
[...]
 
ExecStart=-/sbin/agetty --noclear -a ''USERNAME'' %I 38400
 
ExecStart=-/sbin/agetty --noclear -a ''USERNAME'' %I 38400
 +
<s>Type=idle</s>
 
[...]
 
[...]
 
}}
 
}}
 +
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

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.

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