2

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!

8

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

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

enable the getty@tty1.service then reboot

systemctl enable getty@tty1.service
reboot

Arch linux docs :getty

0

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.

Hope this helps!

0

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.

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

Your Answer

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

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