Auto login without Display Manager

Setting up auto login for LTSP clients without a Display Manager

Introduction

LTSP's default implementation of auto login is technically not auto login. It requires the user to press Enter on the dislay manager page. We can overcome this limitation by getting rid of the display manager altogether and use agetty to properly auto login the user to their shell.

Auto login can be implemented on the client to login to the TTY automatically without user interaction. From there we can start xorg or run custom scripts using our shell's profile file: ie bash_profile. For this to work, we need:

The first one alone won't be able to run our shell profile file since without proper SSHFS/NFS mount, we will get dropped into / without proper home directory

The second one alone won't technically "auto-login" the user, it just wait for the user to press enter on the login screen and hence we need user interaction.

The setup

First, start the VM and add a systemd drop-in file

/etc/systemd/system/getty@tty1.service.d/autologin.conf

[Service]
ExecStart=
ExecStart=-/sbin/agetty -o '-p -f -- \\u' --noclear --autologin username %I $TERM

replace username with the username we want to auto-login

install -m 0660 -g sudo /usr/share/ltsp/common/ltsp/ltsp.conf /etc/ltsp/ltsp.conf

After that, add the following code to the [client] section of ltsp.conf

[*]                           # Wild card to catch all clients
HOSTNAME=client               # host name for clients
PASSWORDS_client=ltc/cm9vdA== # username/base64 encoded password
AUTOLOGIN=ltc                 # enables autologin for the above user

replace client with a hostname for the clients and ltc with the user that we want to auto login. Password for the user should be converted to base64. Pipe it into base64 from the commandline like this:

echo -n password | base64

Replace password with your user password

ltsp image <image name>
ltsp initrd

Done and dusted. Reboot your client and boot from your updated image

Limitations

Limited to single user

Though this is a reliable approch to auto login to the client machine, we are limited to a single user since the systemd drop-in file can only have a single user.

Unless we create multiple image for multiple clients, change the usernames on those images and finally change the LTSP config to auto login based on the client MAC address instead of using wildcard method.

Works only on VM image method

If we try to add the drop-in file to our server's systemd config, our server will start auto logging into that user from the next boot onwards, which is not what we intend to do. Hence a VM image is required for this method to work