TTY Autologin: Difference between revisions

From Alpine Linux
(more template usages & cat to show file content)
m (fixed heading levels and points, added greetd and moved note)
 
(6 intermediate revisions by 4 users not shown)
Line 1: Line 1:
=By using agetty=
This page documents how to setup autologin to tty. Once configured, when computer is powered on, you will be logged in automatically without typing password. Note that, if someone else starts up your computer, they will be able to access your account and your personal data.
 
== By using agetty==


== How ==
Install {{pkg|agetty}}: {{cmd|# apk add agetty}}
Install {{pkg|agetty}}: {{cmd|# apk add agetty}}
Edit {{path|/etc/inittab}} to use agetty<br>
Edit {{path|/etc/inittab}} to use agetty<br>
Line 11: Line 12:
{{tip|You can change the `tty1` or `ttyS0` to a different serial port or virtual terminal as you please. `root` can be changed to a different user as well. Finally the terminal type (`linux` and `vt100` in our examples) can be changed to a wide variety of serial terminals.}}
{{tip|You can change the `tty1` or `ttyS0` to a different serial port or virtual terminal as you please. `root` can be changed to a different user as well. Finally the terminal type (`linux` and `vt100` in our examples) can be changed to a wide variety of serial terminals.}}


=By compiling your own autologin program on edge=
== By making your own autologin wrapper ==
What follows is one of many different ways to get autologin on edge.
 
== How ==
# Writing a wrapper, called autologin, around {{path|/bin/login}} and moving it in {{path|/usr/sbin/}}
# Editing {{path|/etc/inittab}} specifying the use of {{path|/usr/sbin/autologin}} instead of {{path|/bin/login}}
 
== Prerequisites ==
* A C compiler
* The '''''{{pkg|musl-dev}}''''' package which contains the C standard library
 
==== Example on how to assolve the prerequisites: ====
{{Cmd|&#35; apk add --repository https://dl-cdn.alpinelinux.org/alpine/edge/testing tcc
&#35; apk add musl-dev}}
 
== Writing the autologin.c program ==
 
Create a file; in this example called autologin.c
{{Cmd|&#35; vi autologin.c }}
 
Write into it the following C program.
 
{{cat|autologin.c|&#35;include <unistd.h>
 
int main()
{
    execlp( "login", "login", "-f", "root", 0);
}
}}
 
The only thing it does is a system call to execute the ''login'' binary (part of busybox) which will be searched in $PATH.
 
As parameters are passed:
* '''-f'''  flag which stands for "Do not authenticate (user already authenticated)"
* ''username'' in this example is ''root'' but if you created a new user, its username can be used instead.
 
== Compiling the autologin.c program ==
If using tcc:
{{Cmd|&#35; tcc -o autologin autologin.c }}
 
Move the binary autologin to {{path|/usr/sbin}}
{{Cmd|&#35; mv autologin /usr/sbin/}}
 
== Editing /etc/inittab ==
 
Open {{path|/etc/inittab}}


{{Cmd|&#35; vi /etc/inittab }}
Create a script, called autologin, around {{path|/bin/login}} and moving it in {{path|/usr/sbin/}} and editing {{path|/etc/inittab}} to specify the use of {{path|/usr/sbin/autologin}} instead of {{path|/bin/login}}.


replace "'':respawn:/sbin/getty''" with "'':respawn:/sbin/getty -n -l /usr/sbin/autologin''" for each TTY you want to enable autologin.
# Create and edit the autologin wrapper script {{path|/usr/sbin/autologin}} as follows:{{cat|/usr/sbin/autologin|#!/bin/sh
* The getty's '''-n''' flag do not prompt the user for a login name
exec login -f root}}
* The getty's '''-l''' flag invokes a custom login instead of {{path|/bin/login}}; in our case it is set to invoke {{path|/usr/sbin/autologin}}
# Remember to make the scripts executable: {{cmd|# chmod +x /usr/sbin/autologin}}
# The script executes the ''login'' binary (part of busybox) which will be searched in $PATH. As parameters are passed:
#:  '''-f'''  flag which stands for "Do not authenticate (user already authenticated)"
#:  ''username'' in this example is ''root'' but if you created a new user, its username can be used instead.
# Open {{path|/etc/inittab}} and replace "'':respawn:/sbin/getty''" with "'':respawn:/sbin/getty -n -l /usr/sbin/autologin''" for each TTY you want to enable autologin.
#: The getty's '''-n''' flag do not prompt the user for a login name
#: The getty's '''-l''' flag invokes a custom login instead of {{path|/bin/login}}; in our case it is set to invoke {{path|/usr/sbin/autologin}}
# To perform such a replacement on all TTYs, the following command can be used:{{Cmd|# sed -i 's@:respawn:/sbin/getty@:respawn:/sbin/getty -n -l /usr/sbin/autologin@g' /etc/inittab }}
#:  "'''@'''" is used as a delimiter
#:  The '''-i''' flag edits the file in-place


==== Note ====
== Use greetd ==
To perform such a replacement on all TTYs, the following command can be used:
{{Cmd|&#35; sed -i 's@:respawn:/sbin/getty@:respawn:/sbin/getty -n -l /usr/sbin/autologin@g' /etc/inittab }}
* "'''@'''" is used as a delimiter
* The '''-i''' flag edits the file in-place


== Cleaning up ==
The [[Greetd]] display manager has a text based greeter that can be configured to autologin.
It is possible to remove the autologin.c file, the C compiler and the {{pkg|musl-dev}} package
{{Cmd|&#35; rm autologin.c
&#35; apk del tcc musl-dev}}


== References ==
== See also ==
* [https://git.busybox.net/busybox/tree/init/init.c Busybox init source, substantial comments documenting /etc/inittab are at the bottom]
* [https://git.busybox.net/busybox/tree/init/init.c Busybox init source, substantial comments documenting /etc/inittab are at the bottom]
* [http://littlesvr.ca/linux-stuff/articles/autologinconsole/autologinconsole.php Linux-Stuff: Log in automatically to a console when Linux boots]
* [http://littlesvr.ca/linux-stuff/articles/autologinconsole/autologinconsole.php Linux-Stuff: Log in automatically to a console when Linux boots]
Line 81: Line 39:
* [https://busybox.net/downloads/BusyBox.html#getty Busybox getty arguments]
* [https://busybox.net/downloads/BusyBox.html#getty Busybox getty arguments]
* [https://github.com/util-linux/util-linux/blob/master/term-utils/agetty.8.adoc agetty(8) Manual Page]
* [https://github.com/util-linux/util-linux/blob/master/term-utils/agetty.8.adoc agetty(8) Manual Page]
[[Category:Display Managers]]
[[Category:Desktop]]

Latest revision as of 05:26, 5 January 2025

This page documents how to setup autologin to tty. Once configured, when computer is powered on, you will be logged in automatically without typing password. Note that, if someone else starts up your computer, they will be able to access your account and your personal data.

By using agetty

Install agetty:

# apk add agetty

Edit /etc/inittab to use agetty
Example for the virtual terminal tty1:
tty1::respawn:/sbin/agetty --autologin root tty1 linux

Example inittab entry for a serial terminal on ttys01:
ttyS0::respawn:/sbin/agetty --autologin root ttyS0 vt100

Tip: You can change the `tty1` or `ttyS0` to a different serial port or virtual terminal as you please. `root` can be changed to a different user as well. Finally the terminal type (`linux` and `vt100` in our examples) can be changed to a wide variety of serial terminals.

By making your own autologin wrapper

Create a script, called autologin, around /bin/login and moving it in /usr/sbin/ and editing /etc/inittab to specify the use of /usr/sbin/autologin instead of /bin/login.

  1. Create and edit the autologin wrapper script /usr/sbin/autologin as follows:

    Contents of /usr/sbin/autologin

    #!/bin/sh exec login -f root
  2. Remember to make the scripts executable:

    # chmod +x /usr/sbin/autologin

  3. The script executes the login binary (part of busybox) which will be searched in $PATH. As parameters are passed:
    -f flag which stands for "Do not authenticate (user already authenticated)"
    username in this example is root but if you created a new user, its username can be used instead.
  4. Open /etc/inittab and replace ":respawn:/sbin/getty" with ":respawn:/sbin/getty -n -l /usr/sbin/autologin" for each TTY you want to enable autologin.
    The getty's -n flag do not prompt the user for a login name
    The getty's -l flag invokes a custom login instead of /bin/login; in our case it is set to invoke /usr/sbin/autologin
  5. To perform such a replacement on all TTYs, the following command can be used:

    # sed -i 's@:respawn:/sbin/getty@:respawn:/sbin/getty -n -l /usr/sbin/autologin@g' /etc/inittab

    "@" is used as a delimiter
    The -i flag edits the file in-place

Use greetd

The Greetd display manager has a text based greeter that can be configured to autologin.

See also