我有一台装有 Debian Jessie 的无头计算机 (TS-7680),我可以通过 Putty 命令行访问它。该计算机没有任何 GUI,只能通过命令行访问。它将被放入现场,并带有一个程序,如果临时断电,需要自动重新启动。
我知道如何让程序自动运行。但是,我无法通过登录。每次启动计算机时,都会提示我进行 root 登录。我在这台计算机上没有密码。启动代码之后,如下所示:
Debian GNU/Linux 8 ts7680 ttyAMA0
ts7680 login:
此时,我必须键入root
才能进入命令提示符root@ts7680:~#
有谁知道如何自动登录吗?我用谷歌搜索了所有内容,但找不到答案。我试过了这个解决方案没有运气。
答案1
假设 systemd 将ttyAMA0
串行端口视为与 PC 上相同的方式ttyS0
,您需要编辑[email protected]
.
(您可以检查是否systemctl status serial-getty@ttyAMA0
显示它处于活动状态。)
基本版本在其中,我们在其中找到启动 getty 的命令:/lib/systemd/system/[email protected]
ExecStart=-/sbin/agetty --keep-baud 115200,38400,9600 %I $TERM
为服务创建一个覆盖文件来启动agetty
:--autologin root
创建目录,并在其中调用一个包含以下内容的文件:/etc/systemd/system/[email protected]
override.conf
[Service]
ExecStart=
ExecStart=-/sbin/agetty --autologin root --keep-baud 115200,38400,9600 %I $TERM
systemctl edit [email protected]
将有助于做到这一点。
请注意,作为参数传递的终端类型agetty
需要与您的串行终端的实际类型相匹配。多年来,这一直是 systemd 中各种方法的主题。它以各种方式硬连线到内核/引导加载程序vt102
并(间接)从内核/引导加载程序继承。当前的方法(截至 2020 年)在如何做出决策方面相当复杂。
然而,它最终只会选择来自三个值linux
、vt220
以及内核/引导加载程序为 Linux 控制台所说的任何内容。第一个方法永远不适合任何真实的终端,甚至不可能与串行电缆上的终端仿真器大致匹配。第二种不太可能是正确的,尤其是在颜色方面。 两者都不与 PuTTY 匹配,正确的终端类型是putty
( 或putty-256color
)。第三个可能也不会putty
;除非您已将 Linux 重定向/dev/console
到串行终端和 PuTTY,和使用一致的控制台终端类型正确重新配置引导加载程序。
TERM
因此,为了获得最佳结果,您还需要在该覆盖文件中设置环境变量:
Environment=TERM=putty-256color
然后重新加载 systemd,我们可以检查新配置是否到位:
# systemctl daemon-reload
# systemctl cat serial-getty\@ttyAMA0 | grep Exec
(我们应该在最后一行看到新命令ExecStart
。)
如果您只想在按键后自动登录,请将-p
或添加--login-pause
到agetty
命令行。
您链接的页面讨论了在虚拟控制台上配置自动登录:它们是通过配置的[email protected]
,并且使用的命令行agetty
有点不同(似乎只是缺少该--keep-baud
选项)。在这种情况下,我们会使用for 来代替。/etc/systemd/system/[email protected]/override.conf
tty1
有Ask Ubuntu 中的答案有关覆盖 systemd 配置的更多详细信息。
在使用 sysvinit 而不是 systemd 的系统上,您需要添加/修改与串口对应的行/etc/inittab
:
T0:23:respawn:/sbin/getty -L ttyAMA0 --autologin root 38400 vt100