Difference between revisions of "Automatic login to virtual console"

From ArchWiki
Jump to: navigation, search
(With systemd)
(Fix path for serial console.)
(45 intermediate revisions by 16 users not shown)
Line 7: Line 7:
 
{{Article summary heading|Related}}
 
{{Article summary heading|Related}}
 
{{Article summary wiki|Display Manager}}
 
{{Article summary wiki|Display Manager}}
 +
{{Article summary wiki|Silent boot}}
 
{{Article summary wiki|Start X at Login}}
 
{{Article summary wiki|Start X at Login}}
 
{{Article summary end}}
 
{{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 [[Xorg|X server]] are described in [[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 [[Xorg|X server]] are described in [[Start X at Login]].
  
__TOC__
+
== Installation ==
== With default init ==
+
=== Use drop-in feature of systemd for getty autologin ===
 +
[http://cgit.freedesktop.org/systemd/systemd/tree/NEWS#n655 Since systemd 198] unit files may now be extended via drop-in files without having to edit/override the unit files themselves, to learn more about this feature, consult [http://www.freedesktop.org/software/systemd/man/systemd.unit.html systemd.unit(5)] and search for ''Along with a unit file foo.service a directory foo.service.d/ may exist.''
  
=== Using agetty ===
+
There are two types of consoles virtual and serial ones. In most cases you would want to setup up autologin on virtual console, the one which device name is ''ttyN'', where ''N'' is a number. The configuration of the autologin for the serial consoles will be slightly different. Device names of the serial consoles look like ''ttySN'', where ''N'' is a number.
This is the preferred (i.e. clean) method. Edit {{ic|/etc/inittab}} like this:
+
{{hc|/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 {{ic|''USERNAME''}} to the first console (tty1).
+
  
If you want your username to be used automatically without skipping the password prompt:
+
For the virtual console proceed with the following steps, the case with serial console is dealt with at the bottom of this page.
  
c1:2345:respawn:/sbin/agetty -a ''USERNAME'' -o "-- \u" -8 -s 38400 tty1 linux
+
Create a new directory named {{ic|getty@tty1.service.d}} under {{ic|/etc/systemd/system}}:
  
=== Using mingetty ===
+
# mkdir /etc/systemd/system/getty@tty1.service.d
{{Note|Although a {{pkg|mingetty}} derivative, {{AUR|fgetty}} does not support the {{ic|--autologin}} parameter.}}
+
  
Alternatively, you can install the {{pkg|mingetty}} package from the [[Official Repositories|official repositories]]. Mingetty is designed to be a minimal [[getty]] and allows automatic log-ins:
+
Then create a new file named {{ic|autologin.conf}} and add it into the directory:
{{hc|/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:
+
{{hc|/etc/systemd/system/getty@tty1.service.d/autologin.conf|
{{hc|/etc/inittab|
+
2=[Service]
c2:2345:respawn:/sbin/agetty -8 -s 38400 tty2 linux
+
ExecStart=
c3:2345:respawn:/sbin/agetty -8 -s 38400 tty3 linux
+
ExecStart=-/usr/bin/agetty --autologin <username> --noclear %I 38400 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
+
a1:2345:wait:/sbin/mingetty --autologin ''USERNAME'' tty1 linux
+
c1:2345:respawn:/sbin/agetty -8 -s 38400 tty1 linux
+
 
}}
 
}}
  
=== Using a C login program ===
+
{{Tip|The option {{ic|1=Type=idle}} will delay the execution of agetty until all jobs (state change requests to units) are completed. On the other hand it may cause systemd boot-up messages to pollute the login prompt. This option is more useful when [[Start X at Login|starting X automatically]]. See {{ic|man systemd.service}} for more info.}}
  
As an alternative, a C login program can be written:
+
By default, {{ic|getty@.service}} uses {{ic|1=Type=idle}}. If you want to use {{ic|1=Type=simple}}, then your {{ic|autologin.conf}} should look like this:
  
{{hc|autologin.c|
+
{{hc|/etc/systemd/system/getty@tty1.service.d/autologin.conf|
#include <unistd.h>
+
2=[Service]
 
+
ExecStart=
int main(void) {
+
ExecStart=-/usr/bin/agetty --autologin <username> --noclear %I 38400 linux
  execlp("login", "login", "-f", "''USERNAME''", NULL);
+
Type=simple
}
+
 
}}
 
}}
  
Here, the C function {{Ic|execlp}} executes the command {{Ic|login -f ''USERNAME''}}.
+
In the case of a serial console you need to create different directory
  
The program must be compiled and copied to an appropriate location:
+
# mkdir /etc/systemd/system/serial-getty@ttyS0.service.d
  
$ gcc -o autologin autologin.c
+
The file {{ic|autologin.conf}} will also look slightly different
# cp autologin /usr/local/sbin/
+
  
Finally, tell {{ic|/etc/inittab}} to use it:
+
{{hc|/etc/systemd/system/serial-getty@ttyS0.service.d/autologin.conf|
{{hc|/etc/inittab|
+
2=[Service]
c1:2345:respawn:/sbin/agetty -n -l /usr/local/sbin/autologin -s 38400 tty1 linux
+
ExecStart=
c2:2345:respawn:/sbin/agetty -8 -s 38400 tty2 linux
+
ExecStart=-/sbin/agetty --autologin <username> -s %I 115200,38400,9600 vt102
c3:2345:respawn:/sbin/agetty -8 -s 38400 tty3 linux
+
Type=simple
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 ==
+
== Tips & Tricks ==
Create a new service file similar to {{ic|getty@.service}} by copying it to {{ic|/etc/systemd/system/}}:
+
 
+
# cp /usr/lib/systemd/system/getty@.service /etc/systemd/system/autologin@.service
+
 
+
{{Note|{{ic|/etc/systemd/system/}} takes precedence over {{ic|/usr/lib/systemd/system/}}.}}
+
 
+
Once created you can link the new {{ic|autologin@.service}} to your chosen tty, e.g. {{ic|tty1}}, {{ic|tty2}}, [...] {{ic|tty8}}, etc, by specifying it as an alias in the {{ic|[Install]}} section of the unit file. Also, change the value of {{ic|ExecStart}} in {{ic|autologin@.service}}, to end up with something like this:
+
 
+
{{hc|/etc/systemd/system/autologin@.service|
+
2=[Service]
+
[...]
+
ExecStart&#61;-/sbin/agetty --noclear -a ''USERNAME'' %I 38400
+
[...]
+
[Install]
+
Alias=getty.target.wants/getty@''tty1''.service
+
}}
+
{{Tip|It is possible to change {{ic|1=Type=idle}} to {{ic|1=Type=simple}} and avoid delaying the execution of agetty until all jobs (state change requests to units) are completed. This option is more useful when [[Start X at Boot|starting X automatically]]. See {{ic|man systemd.service}} for more info. {{Note|{{ic|1=Type=simple}} can cause systemd bootup messages to pollute the login prompt.}}}}
+
  
For security reasons you may also want to change {{ic|1=Restart=always}} to {{ic|1=Restart=no}}.
+
=== Avoiding unnecessary dmesg errors ===
 +
To avoid errors related to {{ic|display-manager.service}} in dmesg, you should set the default target to multi-user instead of graphical:
 +
# systemctl enable multi-user.target
  
Finally you should reload the daemons and enable and start the service:
+
==See also==
# systemctl daemon-reload
+
* [[Systemd#Change_default_target_to_boot_into|Change default runlevel/target to boot into]].
# systemctl enable autologin@tty1.service
+
# systemctl start autologin@tty1.service
+

Revision as of 20:20, 22 September 2013

Template:Article summary start Template:Article summary text Template:Article summary heading Template:Article summary wiki 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 Login.

Installation

Use drop-in feature of systemd for getty autologin

Since systemd 198 unit files may now be extended via drop-in files without having to edit/override the unit files themselves, to learn more about this feature, consult systemd.unit(5) and search for Along with a unit file foo.service a directory foo.service.d/ may exist.

There are two types of consoles virtual and serial ones. In most cases you would want to setup up autologin on virtual console, the one which device name is ttyN, where N is a number. The configuration of the autologin for the serial consoles will be slightly different. Device names of the serial consoles look like ttySN, where N is a number.

For the virtual console proceed with the following steps, the case with serial console is dealt with at the bottom of this page.

Create a new directory named getty@tty1.service.d under /etc/systemd/system:

# mkdir /etc/systemd/system/getty@tty1.service.d

Then create a new file named autologin.conf and add it into the directory:

/etc/systemd/system/getty@tty1.service.d/autologin.conf
[Service]
ExecStart=
ExecStart=-/usr/bin/agetty --autologin <username> --noclear %I 38400 linux
Tip: The option Type=idle will delay the execution of agetty until all jobs (state change requests to units) are completed. On the other hand it may cause systemd boot-up messages to pollute the login prompt. This option is more useful when starting X automatically. See man systemd.service for more info.

By default, getty@.service uses Type=idle. If you want to use Type=simple, then your autologin.conf should look like this:

/etc/systemd/system/getty@tty1.service.d/autologin.conf
[Service]
ExecStart=
ExecStart=-/usr/bin/agetty --autologin <username> --noclear %I 38400 linux
Type=simple

In the case of a serial console you need to create different directory

# mkdir /etc/systemd/system/serial-getty@ttyS0.service.d

The file autologin.conf will also look slightly different

/etc/systemd/system/serial-getty@ttyS0.service.d/autologin.conf
[Service]
ExecStart=
ExecStart=-/sbin/agetty --autologin <username> -s %I 115200,38400,9600 vt102
Type=simple

Tips & Tricks

Avoiding unnecessary dmesg errors

To avoid errors related to display-manager.service in dmesg, you should set the default target to multi-user instead of graphical:

# systemctl enable multi-user.target

See also