自动登录 Debian 9.2.1 命令行

Jos*_*osh 12 login autologin debian

我刚刚在一台旧笔记本电脑上安装了 Debian 9.2.1 作为廉价服务器。除了我自己以外的任何人都无法物理访问计算机,所以我想在启动时自动登录,这样如果我必须使用笔记本电脑本身而不是 SSH,我就不必费心登录。我没有图形环境安装,所以这些方法都不起作用,我已经尝试了多种解决方案,例如https://superuser.com/questions/969923/automatic-root-login-in-debian-8-0-console-only 然而所有它确实导致根本没有给出登录提示......所以我重新安装了Debian。如何在没有图形环境的情况下自动登录?谢谢!

GAD*_*D3R 26

编辑您的/etc/systemd/logind.conf,更改#NAutoVTs=6为NAutoVTs=1

创建一个/etc/systemd/system/getty@tty1.service.d/override.conf通过;

systemctl edit getty@tty1
Run Code Online (Sandbox Code Playgroud)

粘贴以下几行

[Service]
ExecStart=
ExecStart=-/sbin/agetty --autologin root --noclear %I 38400 linux
Run Code Online (Sandbox Code Playgroud)

启用getty@tty1.service然后重新启动

systemctl enable getty@tty1.service
reboot
Run Code Online (Sandbox Code Playgroud)

Arch linux 文档:getty

  • 这似乎也适用于 Debian Buster (2认同)
  • 添加 Jonathan Holvey 的评论:在 Raspbian (Buster) 中,这与 raspi-config 当您使用它来设置自动控制台登录时的做法非常接近。主要区别在于帐户名称,它使用当前用户帐户(运行“sudo raspi-config”的帐户,因此不一定是“pi”)而不是 root。从 root shell (sudo -i) 运行它也不会使它使用 root 帐户。第二个区别是它不包括波特率。 (2认同)

小智 8

我只想在此讨论中补充一点,已接受的答案与虚拟终端有关。就我而言,我必须编辑一个用于串行终端的单独服务文件。该文件位于/lib/systemd/system/serial-getty@.service并且添加--autologin <user>到适当行的相同过程可以解决问题。

[Service]
ExecStart=-/sbin/agetty --keep-baud 115200,38400,9600 --autologin root %I $TERM
Run Code Online (Sandbox Code Playgroud)


Fms*_*rat 7

我想添加一个更彻底的答案,特别是考虑到有关从@Keelan 破坏他的系统的评论。

首先,如果您希望只有一个 TTY 正在运行该程序,并且不能登录到任何其他 tty,那么请编辑您的/etc/systemd/logind.conf,并更改#NAutoVTs=6为NAutoVTs=1. 这样做将使您无法登录终端!

接下来创建一个目录和一个override.conf文件:

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
Run Code Online (Sandbox Code Playgroud)

不要重启。不要像其他答案中描述的那样重新启动,而是登录到另一个 TTY,然后运行以下命令来测试:

systemctl daemon-reload
systemctl restart getty@tty1.service
Run Code Online (Sandbox Code Playgroud)

如果一切顺利,则重新启动。

但是如果我想运行一个程序而不是自动登录呢? 然后,您将使用以下内容:

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
Run Code Online (Sandbox Code Playgroud)

现在请记住,这将在没有bashrc. 这意味着如果您使用类似的东西,screen那么您将无法获得所有常用的别名/等。要解决这个问题,请使用上面的标准自动登录,但将其添加到您的.bashrc:

[ `tty` == /dev/tty1 ] && /path/program -arg1 -arg2
Run Code Online (Sandbox Code Playgroud)

这意味着该程序只会在 上运行tty1,但会在下面为您提供完整的外壳。