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


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

Create a /etc/systemd/system/getty@tty1.service.d/override.conf through ;

systemctl edit getty@tty1

Paste the following lines

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

enable the getty@tty1.service then reboot

systemctl enable getty@tty1.service

Arch linux docs :getty

  • 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
  • 1
    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

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/serial-getty@.service and the same procedure of adding --autologin <user> to the appropriate line does the trick.

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

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/getty@tty1.service.d
echo "[Service]" > /etc/systemd/system/getty@tty1.service.d/override.conf
echo "ExecStart=" >> /etc/systemd/system/getty@tty1.service.d/override.conf
echo "ExecStart=-/sbin/agetty --autologin root --noclear %I 38400 linux" >> /etc/systemd/system/getty@tty1.service.d/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 getty@tty1.service

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/getty@tty1.service.d
echo "[Service]" > /etc/systemd/system/getty@tty1.service.d/override.conf
echo "ExecStart=" >> /etc/systemd/system/getty@tty1.service.d/override.conf
echo "ExecStart=-/path/program -arg1 -arg2" >> /etc/systemd/system/getty@tty1.service.d/override.conf
echo "StandardInput=tty"  >> /etc/systemd/system/getty@tty1.service.d/override.conf
echo "StandardOutput=tty"  >> /etc/systemd/system/getty@tty1.service.d/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.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.