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!


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

Past 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. – Keelan Aug 31 '18 at 18:00
  • 1
    Definitely worked for me, after checking for typos... Thanks – clearlight Jul 29 at 9:03

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.


works on my Debian 9.9 system

  #systemctl edit getty@tty1
  #mkdir /etc/systemd/system/getty@tty1.service.d
  #cd /etc/systemd/system/getty@tty1.service.d
  #nano override.conf
and add
  ExecStart=-/sbin/agetty --autologin username --noclear %I 38400 linux
  • 2
    it's like GAD3R answer without editing logind.conf and enabling getty@tty1.service and with any username – art8cp Jun 22 at 18:03
  • Please edit your answer to add that information. Incidentally, you can create the required directories and edit the correct file by running systemctl edit getty@tty1. – Stephen Kitt Jun 22 at 20:37
  • I meant that you should add the info from your comment to the answer itself. – Stephen Kitt Jun 23 at 8:33
  • with # systemctl edit getty@tty1 command filename for "override.conf" looking like "override.conf3239a8107ec1b4e2" and it was listed in previous replies. – art8cp Jun 23 at 8:34
  • That’s the temporary filename used for the editor; the file is renamed appropriately when you exit the editor. – Stephen Kitt Jun 23 at 8:37

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.