18

I just installed Debian 9.2.1 on an old laptop as a cheap server. The computer is not physically accessed by anyone other than myself, so I would like to automatically login upon startup so that if I have to use the laptop itself rather than SSH, I don't have to bother logging in. I have no graphical environments installed, so none of those methods would work, and I've tried multiple solutions such as https://superuser.com/questions/969923/automatic-root-login-in-debian-8-0-console-only However all it did was result in no login prompt being given at all... So I reinstalled Debian. What can I do to automatically log in without a graphical environment? Thanks!

3 Answers 3

35

Edit your /etc/systemd/logind.conf , change #NAutoVTs=6 to NAutoVTs=1

Create a /etc/systemd/system/[email protected]/override.conf through ;

systemctl edit getty@tty1

Paste the following lines

[Service]
ExecStart=
ExecStart=-/sbin/agetty --autologin root --noclear %I 38400 linux

enable the [email protected] then reboot

systemctl enable [email protected]
reboot

Arch linux docs :getty

4
  • I must have done something wrong, because this broke my system: unix.stackexchange.com/q/466088/37050. Worthwhile to check out depending on the answers there.
    – user37050
    Aug 31, 2018 at 18:00
  • 1
    Definitely worked for me, after checking for typos... Thanks
    – clearlight
    Jul 29, 2019 at 9:03
  • 2
    This seems to work on Debian Buster as well Nov 23, 2019 at 3:20
  • 2
    Adding to Jonathan Holvey's comment: and in Raspbian (Buster), this comes pretty close to how raspi-config does it when you use it to set auto console login. The main difference is the account name, it uses the current user account (the one running 'sudo raspi-config', so it's not necessarily 'pi') instead of root. Running it from a root shell (sudo -i) does not make it use the root account either. Secondary difference is that it doesn't include a baud rate.
    – Luc VdV
    Feb 4, 2020 at 8:31
10

I just want to add to this discussion that the accepted answer pertains to virtual terminals. In my case, I had to edit a separate service file which is used for serial terminals. The file is found at /lib/systemd/system/[email protected] and the same procedure of adding --autologin <user> to the appropriate line does the trick.

[Service]
ExecStart=-/sbin/agetty --keep-baud 115200,38400,9600 --autologin root %I $TERM
8

I'd like to add a slightly more thorough answer, especially given the comment about breaking his system from @Keelan.

First if you wish to only have one TTY that is running the program, and not be able to log in to any other tty, THEN edit your /etc/systemd/logind.conf, and change #NAutoVTs=6 to NAutoVTs=1. Doing this will keep you from logging in on the terminal!

Next create a directory and an override.conf file:

mkdir -p /etc/systemd/system/[email protected]
echo "[Service]" > /etc/systemd/system/[email protected]/override.conf
echo "ExecStart=" >> /etc/systemd/system/[email protected]/override.conf
echo "ExecStart=-/sbin/agetty --autologin root --noclear %I 38400 linux" >> /etc/systemd/system/[email protected]/override.conf

Don't reboot. Instead of rebooting, as described in the other answer, log in to another TTY, then run the following commands to test things out:

systemctl daemon-reload
systemctl restart [email protected]

If all goes well, then reboot.

But what if I want to run a program instead of autologin? Then you would use the following:

mkdir -p /etc/systemd/system/[email protected]
echo "[Service]" > /etc/systemd/system/[email protected]/override.conf
echo "ExecStart=" >> /etc/systemd/system/[email protected]/override.conf
echo "ExecStart=-/path/program -arg1 -arg2" >> /etc/systemd/system/[email protected]/override.conf
echo "StandardInput=tty"  >> /etc/systemd/system/[email protected]/override.conf
echo "StandardOutput=tty"  >> /etc/systemd/system/[email protected]/override.conf

Now keep in mind this will run without a bashrc. This means if you use something like screen then you won't get all your usual aliases/etc. To fix that, use the standard auto-login above, but add this to your .bashrc:

[ `tty` == /dev/tty1 ] && /path/program -arg1 -arg2

This means that the program will only be run on tty1, but will give you a full shell underneath.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .