TTY Autologin: Difference between revisions

From Alpine Linux
(use single "apk add" command to install packages)
(Add note for setting permission bit for script)
 
(One intermediate revision by the same user not shown)
Line 11: Line 11:
{{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 wrapper=
=By making your own autologin wrapper=


== How ==
== How ==
# Writing a wrapper, called autologin, around {{path|/bin/login}} and moving it in {{path|/usr/sbin/}}
# Writing a wrapper script, 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}}
# Editing {{path|/etc/inittab}} specifying the use of {{path|/usr/sbin/autologin}} instead of {{path|/bin/login}}


== Prerequisites ==
== Writing the autologin script ==
* A C compiler (e.g. '''''{{pkg|gcc}}''''' or '''''{{pkg|tcc}}''''')
* The '''''{{pkg|musl-dev}}''''' package which contains the C standard library


==== Example on how to assolve the prerequisites: ====
Edit and create the script in this example in the location {{path|/usr/sbin/autologin}}:
{{Cmd|# apk add gcc musl-dev}}


== Writing the autologin.c program ==
{{cat|/usr/sbin/autologin|#!/bin/sh
exec login -f root}}


Create a file in this example called autologin.c
Remember to make the scripts executable:
{{cmd|# chmod +x /usr/sbin/autologin}}


{{cat|autologin.c|&#35;include <unistd.h>
The script executes the ''login'' binary (part of busybox) which will be searched in $PATH.
 
int main()
{
    execlp( "login", "login", "-f", "root", 0);
}
}}
 
The program makes a system call to execute the ''login'' binary (part of busybox) which will be searched in $PATH.


As parameters are passed:
As parameters are passed:
* '''-f'''  flag which stands for "Do not authenticate (user already authenticated)"
* '''-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.
* ''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 gcc:
{{Cmd|# gcc -o autologin autologin.c }}
Move the binary autologin to {{path|/usr/sbin}}
{{Cmd|# mv autologin /usr/sbin/}}


== Editing /etc/inittab ==
== Editing /etc/inittab ==
Line 62: Line 46:
* "'''@'''" is used as a delimiter
* "'''@'''" is used as a delimiter
* The '''-i''' flag edits the file in-place
* The '''-i''' flag edits the file in-place
== Cleaning up ==
It is possible to remove the autologin.c file, the C compiler and the {{pkg|musl-dev}} package


== References ==
== References ==

Latest revision as of 17:26, 23 June 2024

By using agetty

How

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

How

  1. Writing a wrapper script, called autologin, around /bin/login and moving it in /usr/sbin/
  2. Editing /etc/inittab specifying the use of /usr/sbin/autologin instead of /bin/login

Writing the autologin script

Edit and create the script in this example in the location /usr/sbin/autologin:

Contents of /usr/sbin/autologin

#!/bin/sh exec login -f root

Remember to make the scripts executable:

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

Editing /etc/inittab

Open /etc/inittab

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

Note

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

References