Difference between revisions of "Automatic login to virtual console"

From ArchWiki
Jump to: navigation, search
m (With inittab)
m (Service: add templates)
(47 intermediate revisions by 19 users not shown)
Line 1: Line 1:
 
[[Category:Boot process]]
 
[[Category:Boot process]]
 
[[Category:Security]]
 
[[Category:Security]]
 +
[[es:Automatic login to virtual console]]
 
[[it:Automatic login to virtual console]]
 
[[it:Automatic login to virtual console]]
 
{{Article summary start}}
 
{{Article summary start}}
Line 6: Line 7:
 
{{Article summary heading|Related}}
 
{{Article summary heading|Related}}
 
{{Article summary wiki|Display Manager}}
 
{{Article summary wiki|Display Manager}}
{{Article summary wiki|Start X at Boot}}
+
{{Article summary wiki|Silent boot}}
 +
{{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__
+
== Service ==
== With default init ==
+
Create a new service file similar to {{ic|getty@.service}} by copying it to {{ic|/etc/systemd/system/}}:
  
=== Using agetty ===
+
# cp /usr/lib/systemd/system/getty@.service /etc/systemd/system/autologin@.service
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).
+
  
=== Using mingetty ===
+
{{Note|{{ic|/etc/systemd/system/}} takes precedence over {{ic|/usr/lib/systemd/system/}}.}}
{{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 change the {{ic|ExecStart}} line to include the {{ic|-a ''USERNAME''}} parameter:
{{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/autologin@.service|
{{Note|You will not be able to access any other virtual consoles until after logging out.}}
+
2=[Service]
{{hc|/etc/inittab|
+
''[...]''
a1:2345:wait:/sbin/mingetty --autologin ''USERNAME'' tty1 linux
+
ExecStart=-/sbin/agetty --noclear -a ''USERNAME'' %I 38400
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 ===
+
[Install]
 
+
WantedBy=getty.target
As an alternative, a C login program can be written:
+
 
+
{{hc|autologin.c|
+
#include <unistd.h>
+
 
+
int main(void) {
+
  execlp("login", "login", "-f", "''USERNAME''", NULL);
+
}
+
 
}}
 
}}
  
Here, the C function {{Ic|execlp}} executes the command {{Ic|login -f ''USERNAME''}}.
+
{{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 Login|starting X automatically]]. See {{ic|man systemd.service}} for more info. {{Note|{{ic|1=Type=simple}} can cause systemd boot-up messages to pollute the login prompt.}}}}
 +
{{Note|If you are using mingetty, simply replace {{ic|/sbin/agetty}} to {{ic|/sbin/mingetty}}.}}
  
The program must be compiled and copied to an appropriate location:
 
  
  $ gcc -o autologin autologin.c
+
Finally, you need to disable the old {{ic|getty@tty''X''.service}} for the specified tty and enable the new {{ic|autologin@tty''X''.service}}. For example,
  # cp autologin /usr/local/sbin/
+
  # systemctl daemon-reload
 +
# systemctl disable getty@''tty1''
 +
# systemctl enable autologin@''tty1''
 +
  # systemctl start autologin@''tty1''
  
Finally, tell {{ic|/etc/inittab}} to use it:
+
{{Warning|If you are currently in an X session on the same tty configured in the service file, starting {{ic|autologin@tty''X''.service}} will kill your X server.}}
{{hc|/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 ==
+
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
  
Create a new service file similar to {{ic|getty@.service}} by copying it to {{ic|/etc/systemd/system/}}:
+
===See also===
 
+
* [[Systemd#Change_default_target_to_boot_into|Change default runlevel/target to boot into]].
# 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 "target" tty, e.g. {{ic|tty1}}, {{ic|tty2}}, [...] {{ic|tty8}}, etc:
+
 
+
# 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:
+
{{hc|/etc/systemd/system/autologin@.service|
+
[Service]
+
[...]
+
ExecStart&#61;-/sbin/agetty -a ''USERNAME'' %I 38400
+
[...]
+
}}
+
For security reasons you may also want to change {{ic|1=Restart=always}} to {{ic|1=Restart=no}}.
+
 
+
Finally you should reload the daemons and start the service:
+
# systemctl daemon-reload
+
# systemctl start getty@tty1.service
+

Revision as of 18:39, 18 February 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.

Service

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/.

Then change the ExecStart line to include the -a USERNAME parameter:

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

[Install]
WantedBy=getty.target
Tip: It is possible to change Type=idle to 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 starting X automatically. See man systemd.service for more info.
Note: Type=simple can cause systemd boot-up messages to pollute the login prompt.
Note: If you are using mingetty, simply replace /sbin/agetty to /sbin/mingetty.


Finally, you need to disable the old getty@ttyX.service for the specified tty and enable the new autologin@ttyX.service. For example,

# systemctl daemon-reload
# systemctl disable getty@tty1
# systemctl enable autologin@tty1
# systemctl start autologin@tty1
Warning: If you are currently in an X session on the same tty configured in the service file, starting autologin@ttyX.service will kill your X server.

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